class LinkedListStack: # 비어있는 양방향 리스트로 초기화 def __init__(self): self.data = DoublyLinkedList() # 스택의 크기 반환 def size(self): return self.data.getLength() # 스택이 비어있는지 확인 def isEmpty(self): return self.size() == 0 # 스택에 데이터 추가 def push(self, item): # 노드를 새로 만듬 node = Node(item) # 마지막 자리에 데이터를 넣게 된다 self.data.insertAt(self.size() + 1, node) # 스택에 데이터 삭제 후 반환 def pop(self): return self.data.popAt(self.size()) # 스택의 맨 꼭대기의 데이터 반환 def peek(self): return self.data.getAt(self.size()).data
class PriorityQueue: # 양방향 연결리스트를 이용하여 빈 큐를 초기화 def __init__(self, x): self.queue = DoublyLinkedList() # 크기를 반환 def size(self): return self.queue.getLength() # 비어있는가? def isEmpty(self): return self.size() == 0 # 데이터 삽입 연산 def enqueue(self, x): newNode = Node(x) # 처음 시작하는 위치 head에서 시작 curr = self.queue.head # 끝까지 가지 않을 조건 && 우선순위를 비교하는 조건 while curr.next != self.queue.tail and x < curr.next.data: curr = curr.next # 양방향 연결리스트를 이용해 삽입! self.queue.insertAfter(curr, newNode) # [주의] 양방향 연결리스트의 getAt()메서드를 이용하지 않는다. # why? # 데이터 삭제 연산 def dequeue(self): return self.queue.popAt(self.queue.getLength()) # 첫번째 데이터 반환 def peek(self): return self.queue.getAt(self.queue.getLength()).data