큐 예제

대기열의 실제 예는 차량이 먼저 진입하고 먼저 나가는 단일 차선 단방향 도로일 수 있습니다. 더 많은 실제 예제는 티켓 창과 버스 정류장에서 대기열로 볼 수 있습니다. 순환 큐 구현은 분할의 나머지 부분을 취하여 계산되는 modulo 연산자(표시%)를 사용하여 수행됩니다(예: 8%5는 3). modulo 연산자를 사용 하 여 순환 배열로 큐를 볼 수 있습니다., 여기서 “래핑” “뒤로 % array_size”로 시뮬레이션할 수 있습니다. 후면 및 전면 인덱스 외에도 큐의 요소 수를 계산하기 위한 cur라는 또 다른 인덱스를 유지합니다. 이 인덱스를 갖는 것은 구현의 논리를 단순화. 큐는 또한 추상 데이터 형식 또는 선형 데이터 구조, 스택 데이터 구조 처럼, 첫 번째 요소는 REAR (꼬리 라고도 함)라는 한쪽 끝에서 삽입 되 고 기존 요소의 제거는 FRONT(또한 라는 다른 쪽 끝에서 수행) 머리라고 합니다). 큐는 데이터, 개체, 사람 또는 이벤트와 같은 다양한 엔터티가 저장되고 나중에 처리될 수 있도록 컴퓨터 과학, 전송 및 운영 연구에서 서비스를 제공합니다. 이러한 컨텍스트에서 큐는 버퍼의 기능을 수행합니다. 스택과 마찬가지로 큐의 경우 새 요소가 추가될 위치와 요소가 제거될 위치를 정확히 알고 있으므로 이러한 두 작업에는 단일 단계가 필요합니다.

큐 작업에는 큐를 초기화하거나 정의하고, 큐를 활용한 다음 메모리에서 완전히 지워야 합니다. 여기에서 우리는 큐와 관련된 기본 작업을 이해하려고한다 – 우리는 큐에서 요소를 제거 할 때, 우리는 두 가지 가능한 접근 방식을 따를 수 있습니다 (언급 [A] 및 [B] 위의 다이어그램에서). [A] 접근 방식에서는 헤드 위치에서 요소를 제거한 다음 다른 모든 요소를 방향 위치로 하나씩 이동합니다. Queue1 – 건설, 열거, 푸시, 터지는. 큐는 별도의 데이터 유형으로 구현되거나 이중 종료 큐(deque)의 특별한 경우로 간주될 수 있으며 별도로 구현되지 않을 수 있습니다. 예를 들어 Perl과 Ruby는 양쪽 끝에서 배열을 푸시하고 터지는 것을 허용하므로 푸시 및 이동 해제 함수를 사용하여 목록을 큐에 넣거나 대기열에 줄 수 있습니다(또는 반대로 시프트 및 팝을 사용할 수 있음). 고정 길이 배열은 용량이 제한되어 있지만 항목을 큐의 헤드쪽으로 복사해야 하는 것은 사실이 아닙니다. 배열을 닫힌 원으로 바꾸고 머리와 꼬리가 끝없이 그 원에서 표류하게하는 간단한 트릭은 배열에 저장된 항목을 이동할 필요가 없습니다. n이 배열의 크기인 경우 인덱스 modulo n을 계산하면 배열이 원으로 바뀝니다.