덱이란?
큐와 데이터는 동일함
연산은 유사함
큐와 알고리즘이 동일한 연산
addRear(), deleteFront(), gerFront()
-> 큐의 enqueue, dequeue, peek 연산과 동일
덱의 후단(rear)을 스택의 상단(top)으로 사용
-> addRear(),deleteRear(),getRear() 연산은 스택의 push,pop,peek 연산과 정확하게 동일
<추가된 연산 by 원형 큐>
front = (front -1 + MAX_QSIZE) % MAX_QSIZE
rear = (rear -1 + MAX_QSIZE) % MAX_QSIZE
< 덱은 구조상 큐와 비슷>
원형 덱으로 구현하는 것이 연산들의 시간 복잡도를 O(1)로 만들 수 있는 좋은 방법이다.
원형 큐를 상속하여 원형 덱 클래스를 구현해보자(중요!!)
# 덱의 구현
class CirCularDeque(CircularQueue): # CircularQueue 에서 상속
def __init__(self):
super().__init__()
def addRear(self.item):
self.enqueue(item)
def deleteFront(self):
return self.dequeue()
def getFront(self):
return self.peek()
def addFront(self,item):
if not self.isFull():
self.items[self.front] = item
self.front = self.front -1
if self.front < 0 :
self.front = MAX_QSIZE -1
def deleteRear(self):
if not self.isEmpty():
item = self.items[self.rear];
self.rear = self.rear -1
if self.rear < 0 :
self.rear = MAX_QSIZE - 1
return item
def getRear(self):
return self.items[self.rear]