티스토리 뷰

python lecture/algorism

[edu] queue (with node)

burningrizen 2018. 12. 11. 00:19



단방향 linked list 를 이용해서


queue 를 구현해 보자


매직 키워드를 사용해서 for, enumerate, len, slicing, 등등 기능도 구현해 보자



class Node:
def __init__(self, data, next=None):
self.data, self.next = data, next


class Queue:
def __init__(self):
self.head = None
self.size = 0

def is_empty(self): return not bool(self.size)

def enqueue(self, data):
if self.is_empty():
self.head = Node(data)
else:
cur_node = self.head
while cur_node.next:
cur_node = cur_node.next
cur_node.next = Node(data)
self.size += 1

def dequeue(self):
if self.is_empty():
return None
ret_data, self.head = self.head.data, self.head.next
self.size -= 1
return ret_data

def peek(self): return None if self.is_empty() else self.head.data

def __getitem__(self, index):
cur_node = self.head
for _ in range(index):
cur_node = cur_node.next
return cur_node.data

def __iter__(self):
return (item for item in range(len(self)))

def __len__(self):
return self.size


q = Queue()
print(q.is_empty())
# enqueue
for i in range(10):
q.enqueue(i*i)
# enumerate
for i, v in enumerate(q):
print(i, v)
# peek (first in first out)
print(q.peek())
# dequeue
while not q.is_empty():
print(q.dequeue())

print(q.is_empty())
# enumerate
for i, v in enumerate(q):
print(i, v)


'python lecture > algorism' 카테고리의 다른 글

[edu] 퀵 소트  (0) 2018.12.19
[edu] 10진수 > n진수 변환  (0) 2018.12.19
[edu] double linked list (with node)  (0) 2018.12.09
[edu] 4 와 7 구하기  (0) 2018.12.03
[edu] 가위바위보 승패  (0) 2018.11.22
댓글