设计队列的实现( 在这里我们要求用之前介绍的链表形式实现 )
在队列中实现这些步骤:
-
初始化创建 Node, Queue 类
-
依次添加 21 35 58 13 进队列
-
返回队列头部元素
-
删除此时队列头部元素
-
返回此时队列头部元素
新建一个文件myqueue.py
。
参考代码
注意:请务必自己独立思考解决问题之后再对照参考答案,一开始直接看参考答案收获不大。
参考代码如下
class Node(object):
def __init__(self,elem,next=None):
self.elem = elem #表示对应的元素值
self.next=next #表示下一个链接的链点
class Queue(object):
def __init__(self):
self.head = None #头部链点为 None
self.rear = None #尾部链点为 None
def is_empty(self):
return self.head is None #判断队列是否为空
def enqueue(self, elem):
p = Node(elem) #初始化一个新的点
if self.is_empty():
self.head = p #队列头部为新的链点
self.rear = p #队列尾部为新的链点
else:
self.rear.next = p #队列尾部的后继是这个新的点
self.rear =p #然后让队列尾部指针指向这个新的点
def dequeue(self):
if self.is_empty(): #判断队列是否为空
print('Queue_is_empty') #若队列为空,则退出 dequeue 操作
else:
result = self.head.elem #result为队列头部元素
self.head = self.head.next #改变队列头部指针位置
return result #返回队列头部元素
def peek(self):
if self.is_empty(): #判断队列是否为空
print('NOT_FOUND') #为空则返回 NOT_FOUND
else:
return self.head.elem #返回队列头部元素
def print_queue(self):
print("queue:")
temp=self.head
myqueue=[] #暂时存放队列数据
while temp is not None:
myqueue.append(temp.elem)
temp=temp.next
print(myqueue)
if __name__=="__main__":
queue=Queue()
queue.enqueue(21)
queue.enqueue(35)
queue.enqueue(58)
queue.enqueue(13)
queue.print_queue()
print(queue.peek())
queue.dequeue()
queue.print_queue()
print(queue.peek())