본문 바로가기
자료구조및알고리즘

(Python/Queue) CircularQueue (환형큐)

by windy7271 2022. 11. 23.
728x90
반응형

큐의 활용:

 

1. 자료를 생성하는 작업과 그 자료를 이용하는 작업이 비동기적으로 일어나는 경우.

2. 자료를 생성하는 작업이 여러곳에서 일어나는 경우.

3. 자료를 이용하는 작업이 여러곳에서 일어나는 경우.

4.자료를 생성하는 작업과 그 자료를 이용하는 작업이 양쪽 여러곳에서 일어나는 경우

 

 

5. 자료를 처리하여 새로운 자료를 생성하고 나중에 그 자료를 또 처리해야 하는 작업의 경우

 

 

CircularQuueu(환형큐)

 

 꺼내는곳 front 넣는곳 rear 라고 칭함

큐가 가득차면 원소를 넣을 수 없음

 

dequeue 가 가지고 있는 내장함수 + 

isFull() 큐에 데이터 원소가 꽉 차있는지 확인

 

enqueue, 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]
반응형

댓글