삽입(enqueue)
된 데이터가 제일 처음에 삭제 (dequeue)
됨선입선출
(First In First Out)이라고 함그냥 배열
을 사용하면 큐를 구현할 수는
있다.
enqueue
하면 그냥 제일 뒤에 추가 O(1)
내부적으로는 insert_at(num_count, 60);
dequeue
하면 그냥 제일 앞
에서 삭제 O(N)
dequeue();
remove_at(0)
하지만 큐의 삭제도 O(1)
으로 구현할 수 있다.
enqueue
라고 표현O(1)
이다enum { MAX_NUMS = 8 };
int s_nums[MAX_NUMS];
size_t s_front = 0;
size_t s_back = 0;
size_t s_num_count = 0;
void enqueue(int n)
{
assert(s_num_count < MAX_NUMS)
s_nums[s_back] = n;
s_back = (s_back + 1) % MAX_NUMS;
++s_num_count;
}
int main(void)
{
enqueue(10); // { 10 }, s_back = 1, s_num_count = 1
enqueue(20); // { 10, 20 }, s_back = 2, s_num_count = 2
enqueue(30);
enqueue(40);
enqueue(50);
enqueue(60);
enqueue(70); // { 10, 20, ... , 70 }, s_back = 7, s_num_count = 7
enqueue(80); // { 10, 20, ... , 70, 80 }, s_back = 8, s_num_count = 8
return 0;
}
dequeue
라고 표현O(1)
이다int is_empty(void)
{
return (s_num_count == 0);
}
int dequeue(void)
{
int ret;
assert(is_empty() == FALSE);
ret = s_nums[s_front];
--s_num_count;
s_front = (s_front + 1) % MAX_NUMS;
return ret;
}
/* 메인 함수 */
/* s_nums = { 10, 20, 30, 40, 50 }*/
int item = dequeue(); /* item: 10 */
O(N)
이다enqueue()
와 dequeue()
만 허용하므로 임의의 요소에 접근할 방법이 없다대기 줄
이 필요한 경우 모두 적용 가능멀티 쓰레딩
에서도 이런 일을 함입출력 스트림 버퍼링
도 같은 개념버퍼
에 쌓아두고 앞에서 부터 차례대로 접근