# ADT Queue:
# Queue(self) #创建空队列
# is_empty(self) #判断队列是否为空
# enqueue(self, elem) #入队
# dequeue(self) #出队
# peek(self) #查看最早入队的元素,不删除
class QueueUnderflow(ValueError): # (空队列访问)
pass
class LNode:
def __init__(self, elem, next_=None):
self.elem = elem
self.next = next_
class LQueue():
def __init__(self):
self._rear = None
self._head = None
def is_empty(self):
return self._head is None
def enqueue(self,elem):
if self._head is None:
self._head = LNode(elem, self._head)
self._rear = self._head
else:
self._rear.next = LNode(elem)
self._rear = self._rear.next
def dequeue(self):
if self._head is None:
raise QueueUnderflow('in dequeue')
e = self._head.elem
self._head = self._head.next
return e
def peek(self):
if self._head is None:
raise QueueUnderflow("in peek")
return self._head.elem
queue1 = LQueue()
queue1.enqueue(3)
queue1.enqueue(5)
queue1.enqueue(7)
while not queue1.is_empty():
print(queue1.dequeue())
输出结果:
PS E:\VScode\DataStructure> python .\Queue.py
3
5
7
######################
'''队列的顺序表实现'''
######################
class SQueue:
def __init__(self, init_len=8):
self._len = init_len # 存储区长度
self._elems = [0]*init_len # 元素存储
self._head = 0 # 表头元素下标
self._num = 0 # 元素个数
def is_empty(self):
return self._num == 0
def peek(self):
if self._num == 0:
raise QueueUnderflow
return self._elems[self._head]
def enqueue(self,elem):
if self._num == self._len: # 判断队满
self._extend()
self._elems[ (self._head+self._num) % self._len ] = elem
self._num += 1
def dequeue(self):
if self._num == 0:
raise QueueUnderflow
elem = self._elems[self._head]
self._head = (self._head+1) % self._len
self._num -= 1
return elem
def _extend(self):
old_len = self._len
self._len *= 2
new_elems = [0]*self._len
for i in range (old_len):
new_elems[i] = self._elems[ (self._head+i) % old_len ]
self._elems, self._head = new_elems, 0
queue2 = SQueue()
for i in range(12):
queue2.enqueue(i)
print("最先入队的元素是:",queue2.peek())
for i in range(12):
print(queue2.dequeue(), end=", ")
输出结果:
PS E:\VScode\DataStructure> python .\Queue.py
最先入队的元素是: 0
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,