Tiny Finger Point Hand With Heart
본문 바로가기
1일1CS

2.큐에 비해 원형큐가 가지는 장단점

by yoondii 2022. 9. 7.
728x90
반응형

간단하게 결론부터 말하자면 

원형 큐의 장점은 처음과 끝이 연결되어 있는 형태로, 
데이터가 배열의 끝에 다다르면 다시 처음으로 돌아올 수 있어 이미 사용했던 부분도 재사용이 가능하다는 점이다.
또한, 선형 큐보다 메모리를 낭비하지 않는 다는 점이다.
원형 큐의 단점은 원형 큐는 배열이 꽉차있는지, 비어있는지를 구분하기 위하여 한 칸의 공백은 무조건 있어야 한다는 점이다.

 

선형 큐(Queue)는, 이미 사용한 영역인 front의 앞부분에 대해서 다시 활용을 못하기 때문에 메모리를 낭비한다는 단점이 있었다.
그리고 큐가 다 찼을 경우 데이터들을 앞쪽으로 이동시켜 사용하는 방법이 있지만 남아있는 모든 데이터를 다 이동시켜야 한다는 불편한 작업을 수행해야 하기 때문에 그리 효율적으로 동작하지 못한다.

이런 문제를 해결하고자 나온 큐가 바로 원형 큐이다.

 

#원형 큐

 - '정해진' 개수의 저장 공간을 빙 돌려가며 이용

 - 큐가 가득 차면 더이상 원소를 넣을 수 없음

 

 

#연산의 정의

  • size() : 현재 큐에 들어 있는 데이터 원소의 수를 구함
  • isEmpty() : 현재 큐가 비어 있는지를 판단
  • isFull() : 큐에 데이터 원소가 꼭 차 있는지를 판단
  • qneueue(x) : 데이터 원소 x를 큐에 추가
  • dequeue() : 큐의 맨 앞에 저장된 데이터 원소를 제거(또한, 반환)
  • peek() : 큐의 맨 앞에 저장된 데이터 원소를 반환(제거하지 않음)
class CircularQueue:

#큐 초기화
    def __init__(self, n):
        self.maxCount = n
        self.data = [None] * n
        self.count = 0
        self.front = -1
        self.rear = -1

 

    # 현재 큐 길이를 반환
    def size(self):
        return self.count

 

    # 큐가 비어있는지 
    def isEmpty(self):
        return self.count == 0

 

    # 큐가 꽉 차있는지
    def isFull(self):
        return self.count == self.maxCount

 

# 데이터 원소 추가
    def enqueue(self, x):
        if self.isFull():
            raise IndexError('Queue full')
        
        self.rear = (self.rear + 1) % self.maxCount
        self.data[self.rear] = x
        self.count += 1

 

    #데이터 원소 제거
    def dequeue(self):
        if self.isEmpty():
            raise IndexError('Queue empty')

        self.front = (self.front + 1) % self.maxCount
        x = self.data[self.front]
        self.count -= 1
        return x

 

    # 큐의 맨 앞 원소 반환
    def peek(self):
        if self.isEmpty():
            raise IndexError('Queue empty')
        return self.data[(self.front + 1) % self.maxCount]
728x90
반응형

'1일1CS' 카테고리의 다른 글

6.유니캐스트, 멀티캐스트, 브로드캐스트  (0) 2022.09.09
5. Scale-up과 Scale-out의 개념  (0) 2022.09.09
4. 캐시의 지역성  (0) 2022.09.08
3. OSI 7계층  (0) 2022.09.07
1. 우선순위 큐의 동작방식  (0) 2022.09.06

댓글