KOOC/Linear Structure & Dynamic Programming
Linked list, Stack, Queue <3-4>
dataart
2023. 11. 4. 15:26
<< 3주차 Lecture Note 4번째>>
- Queue
Queue
Stack은 데이터의 출입로가 1개였지만, Queue는 2개로 구성되어 데이터가 들어가는 입구와 데이터가 나가는 출구가 나뉘어진다.
즉 첫 번째 노드는 데이터가 들어가는 입구로, 마지막 노드는 데이터가 나가는 출구로 구성되며, 중간 노드는 데이터의 추가/삭제가 안된다.
1. Operation of Queue
Enqueue
링크드리스트에 데이터를 추가하는 작업을 말한다.
Dequeue
링크드리스트에서 데이터를 삭제하는 작업을 말한다.
2. Implermentation of Queue
큐 구조의 코드를 보면 아래와 같다.
class Queue:
lstInstance = SinglyLinkedList()
def dequeue(self):
return self.lstInstance.deleteAt(0)
def enqueue(self, value):
self.lstInstance.insertAt(value, self.lstInstance.getSize())
위 코드에서는 링크드리스트의 첫번째 노드가 데이터의 출구, 마지막 노드를 데이터의 입구로 구현했다.
데이터의 출구인 첫 번째 노드는 인덱스가 0으로 고정이지만, 데이터의 입구인 마지막 노드는 리스트의 사이즈에 따라 다르기때문에,
링크드리스트의 사이즈를 가져오는 getSize() 메서드를 이용해 마지막 노드의 인덱스를 확인하고 데이터를 입력하게 된다.
위 클래스에 따라 a → b → c 순서로 데이터를 입력하는 경우 리스트의 구성은 아래와 같다.
queue = Queue()
queue.enqueue("a")
queue.lstInstance.printStatus()
queue.enqueue("b")
queue.lstInstance.printStatus()
queue.enqueue("c")
queue.lstInstance.printStatus()
\(\quad\) a
\(\quad\) a b
\(\quad\) a b c
dequeue를 하는 경우는 아래와 같다.
queue.lstInstance.printStatus()
queue.dequeue()
queue.lstInstance.printStatus()
queue.dequeue()
queue.lstInstance.printStatus()
queue.dequeue()
queue.lstInstance.printStatus()
\(\quad\) a b c
\(\quad\) b c
\(\quad\) c
반응형