추천, 2024

에디터의 선택

선형 대기열과 순환 대기열의 차이점

간단한 선형 대기열은 다양한 세 가지 방식으로 구현 될 수 있습니다. 그 중 하나는 원형 대기열입니다. 선형 대기열과 순환 대기열의 차이점은 구조 및 성능 요소에 있습니다. 선형 대기열과 순환 대기열의 근본적인 차이점은 순환 대기열이 선형 대기열의 메모리 낭비를 제한하기 위해 고안된 반면 선형 대기열은 순환 대기열보다 더 많은 공간을 소비한다는 것입니다.

는 데이터 요소가 한쪽 끝 (뒤쪽 끝)에서 삽입되고 다른 쪽 끝 (앞쪽 끝)에서 삭제되는 FIFO 순서 다음에 비 프리미티브 선형 데이터 구조로 설명 될 수 있습니다. 대기열의 다른 변형은 순환 대기열, 이중 종료 대기열 및 우선 순위 대기열입니다.

비교 차트

비교 근거선형 대기열순환 대기열
기본순서대로 데이터 요소와 명령어를 차례로 구성합니다.마지막 요소가 첫 번째 요소에 연결된 원형 패턴의 데이터를 정렬합니다.
작업 실행 순서
작업은 이전에 배치 된 순서대로 실행됩니다 (FIFO).작업 실행 순서가 변경 될 수 있습니다.
삽입 및 삭제
새로운 요소는 뒤쪽 끝에서 추가되고 앞쪽에서 제거됩니다.삽입 및 삭제는 어느 위치에서나 수행 할 수 있습니다.
공연
무능한
선형 대기열보다 효과적입니다.

선형 큐의 정의

선형 대기열 은 합리적으로 선입 선출첫 번째 목록입니다. 요소가 차례로 위치하는 직선과 닮았 기 때문에이를 선형이라고 부릅니다. 여기에는 새로운 요소가 한쪽 끝에 추가되고 다른 쪽에서 삭제되는 동질적인 요소 모음이 포함됩니다. 대기열의 개념은 극장 티켓을 얻기 위해 티켓 카운터 외부에서 기다리는 관중의 예를 통해 이해할 수 있습니다. 이 대기열에서 사람은 대기열의 뒤쪽 끝을 조인하여 티켓을 가져오고 티켓은 대기열의 프론트 엔드에서 발행됩니다.

대기열에서 수행되는 여러 작업이 있습니다.

  • 먼저 대기열이 0으로 초기화됩니다 (즉, 비어 있음).
  • 큐가 비어 있는지 확인하십시오.
  • 큐가 가득 차 있는지 여부를 판별하십시오.
  • 후미 (Enqueue)에서 새 요소를 삽입합니다.
  • 프런트 엔드에서 요소 삭제 (Dequeue).

대기열은 두 가지 방식으로 구현 될 수 있습니다.

  • 정적으로 (배열 사용)
  • 동적으로 (포인터 사용)

선형 대기열의 한계는 대기열에 빈 공간이 포함되어 있어도 대기열에 새 요소를 추가 할 수없는 시나리오를 작성한다는 것입니다. 위의 상황이 아래 주어진 그림에 나와 있습니다. 모든 상자가 여전히 비어있는 동안 뒤가 마지막 색인을 가리키고 있지만 새 요소를 추가 할 수 없습니다.

순환 대기열 정의

순환 대기열 은 선형 대기열의 한계를 효과적으로 극복 한 선형 대기열의 변형입니다. 순환 대기열에서 마지막 요소가 사용되고 공간을 사용할 수있는 경우 대기열의 첫 번째 위치에 새 요소가 추가됩니다. 선형 대기열의 경우 삽입은 후단에서 수행하고 프론트 엔드에서 삭제할 수 있습니다. 대기열에서 일련의 연속 삭제를 수행 한 후 전체 대기열에서 언더 플로우 조건 (Rear = max - 1)이 존재하기 때문에 사용할 수있는 공간이 더 남아 있어도 새 요소를 추가 할 수없는 상황이 발생합니다.

순환 대기열은 마지막 요소 다음에 첫 번째 요소가 오는 포인터를 통해 두 끝을 연결합니다. 또한 삽입 및 삭제할 요소를 추적 할 수 있도록 몇 가지 추가 로직을 구현하여 앞면과 뒷면을 추적합니다. 이 경우 순환 대기열은 실제 대기열이 가득 찰 때까지 오버플로 조건을 생성하지 않습니다.

원형 큐가 뒤 따르는 조건들 :

  • 정면은 첫 번째 요소를 가리켜 야합니다.
  • Front = Rear이면 대기열이 비어 있습니다.
  • 새로운 요소가 추가되면 대기열은 값 1 (Rear = Rear + 1)만큼 증가합니다.
  • 큐에서 요소가 삭제되면 front가 1 씩 증가합니다 (Front = Front + 1).

선형 대기열과 순환 대기열의 주요 차이점

  1. 선형 대기열은 데이터 요소가 순차적으로 구성되는 순서 목록입니다. 반대로 원형 큐는 순환 방식으로 데이터를 저장합니다.
  2. 선형 큐는 태스크를 실행하기 위해 FIFO 순서를 따릅니다 (첫 번째 위치에 추가 된 요소는 첫 번째 위치에서 삭제됨). 반대로 순환 대기열에서 요소에 대해 수행 된 작업 순서가 변경 될 수 있습니다.
  3. 요소의 삽입 및 삭제는 선형 큐에서 고정됩니다. 즉, 후단에서 추가 및 프런트 엔드에서 삭제됩니다. 반면 순환 큐는 요소가 비어있을 때까지 요소를 삽입하고 삭제할 수 있습니다.
  4. 선형 큐는 메모리 공간을 낭비하고 순환 큐는 공간을 효율적으로 사용합니다.

선형 대기열 구현

아래 주어진 알고리즘은 큐에 요소를 추가 하는 것을 보여줍니다.
큐에는 큐를 저장하는 하나의 배열과 -1 인 앞쪽 및 뒤쪽 초기 위치를 저장하는 다른 배열을 포함하여 세 개의 데이터 변수가 필요합니다.

 insert (item, queue, n, rear) {if (rear == n) 다음에 "queue overflow"를 출력한다. else {뒤 = 뒤 + 1; 큐 [rear] = item; }} 

아래에 주어진 알고리즘은 대기열에있는 요소를 삭제하는 방법 을 보여줍니다.

 delete_circular (item, queue, rear, front) {if (rear == front) 다음에 "queue underflow"를 출력하십시오; else {앞 = 앞 + 1; item = 큐 [앞]; }} 

순환 큐의 구현

원형 큐에서 요소의 추가 를 해석하는 알고리즘 :

 insert_circular (item, queue, rear, front) {rear = (rear + 1) mod n; if (front == rear) then "queue is full"을 출력하십시오; else {queue [rear] = item; }} 

알고리즘은 순환 대기열에서 요소 삭제 를 설명합니다.

 delete_circular (item, queue, rear, front) {if (앞 == 뒤) 다음 print ( "대기열이 비어 있음"); else {앞 = 앞 + 1; item = 큐 [앞]; }} 

결론

선형 큐는 삽입 동작을 수행하기 위해 요소가 빈 공간으로 이동해야하는 경우에는 비효율적입니다. 그것이 저장 공간을 낭비하는 경향이있는 이유는 순환 큐가 저장 공간을 적절하게 사용하는 반면 빈 공간이 있으면 임의의 위치에 요소가 추가되기 때문입니다.

Top