Algorithm/APS

[APS] 6. 큐

개발자 뭄뭄 2022. 9. 2. 17:37
반응형

스택 다음에 배울 자료구조는 큐!

(이미지 출처: 위키백과)

1. 큐의 특징

  • 큐와 스택의 공통점 : 삽입과 삭제의 위치가 제한적인 자료구조이다.
  • 차이점 : 선입-선출 (FIFO). 가장 먼저 삽입된 원소는 가장 먼저 삭제된다.

2. 큐의 구현

  1. 선형큐
    • 초기 공백 큐 생성 ( front와 rear을 모두 -1로 초기화)
    • 삽입 (enQueue) : rear += 1을 한 후, 배열원소를 저장한다.
    • 삭제 (deQueue) : front += 1을 하여 큐에 남아있게 될 첫번째 원소로 이동하고 값을 리턴한다.
    • 공백상태 검사(isEmpty()) : front == rear 일 경우에 공백상태이다
    • 포화상태 검사(isFull()) : rear ==n-1 (n:배열의 크기, n-1:마지막인덱스)
    • 검색(Qpeek()) : front +=1 현재 front의 한자리 뒤에 있는 원소를 검색하여 반환한다.

  1. 원형큐
    💡
    선형큐의 문제점 : 잘못된 포화상태인식
    • 선형큐를 사용하여 원소의 삽입과 삭제를 반복하면, 배열의 앞부분을 활용할 수 있는 공간이 있음에도 불구하고, rear=n-1 즉, 포화상태로 인식하여 더이상 삽입을 수행하지 않는다.

    ⇒ 해결방안 : 원형큐!

    • 1차원 배열이지만, 논리적으로는 배열의 처음과 끝이 연결되어 원형 형태의 큐를 이룬다고 가정하고 사용한다.
    • 선형큐와 원형큐의 삽입, 삭제위치 비교
      삽입 위치삭제위치
      선형큐rear = rear + 1front = front + 1
      원형큐rear = (rear + 1) % nfront = (front + 1) % n
  1. 우선순위 큐
    • FIFO 순서가 아니라, 우선순위가 높은 순서대로 먼저 나가게 된다.
    • 배열 혹은 리스트를 사용해서 구현할 수 있다.
    • 배열을 이용하여 구현할 때의 문제점 : 삽입이나 삭제 연산이 일어날 때 원소의 재배치가 발생한다. → 이에 소요되는 시간이나 메모리 낭비가 크다.

3. 큐의 활용 : 버퍼(Buffer)

💡
데이터를 한 곳에서 다른 곳으로 전송하는 동안 일시적으로 그 데이터를 보관하는 메모리의 영역

⇒ 순서대로 입력/출력/전달 되어야 하므로 FIFO 방식의 자료구조인 큐가 활용된다.

ex) 키보드 버퍼

사용자 키보드 입력 → 키보드 입력 버퍼에 enter키 입력이 들어오면 → 프로그램이 실행된다.


Uploaded by N2T

반응형