08_队列的实现-基于单链表
2026/8/1 18:52:08 网站建设 项目流程

2.4.2 单向队列功能的定义

方法说明
size()返回队列中元素个数
is_empty()判断队列是否为空
push(item)向队尾添加元素
pop()从队首取出元素
peek()访问队首元素
classEmptyQueueError(Exception):passclassNode:def__init__(self,item,next=None):self.item=item self.next=nextclassQueue:def__init__(self):self.__head=Noneself.__size=0@propertydefsize(self):returnself.__sizedefis_empty(self):returnself.__size==0# 定义:以单链表的头为队头,以单链表的尾为队尾defpush(self,item):# 第一步:创建新结点new_node=Node(item)# 第二步:添加元素# 2.1 队列为空ifself.__head==None:self.__head=new_nodeelse:# 2.2 队列不为空# 查询队尾node=self.__headwhilenode.next!=None:node=node.next# 循环出来,node.next = None,此时node为队列的最后一个结点node.next=new_node# 第三步:个数+1self.__size+=1defpop(self):ifself.is_empty():raiseEmptyQueueError("队列已空")item=self.__head.item self.__head=self.__head.nextself.__size-=1returnitem# 队头出列defpeek(self):ifself.is_empty():raiseEmptyQueueError("队列已空!")returnself.__head.itemdef__str__(self):result=""# 遍历node=self.__headwhilenodeisnotNone:result+=str(node.item)result+="->"ifnode.nextelse""node=node.nextreturn'队头:'+result+':队尾'if__name__=='__main__':q=Queue()print("初始size:",q.size)print("是否为空:",q.is_empty())q.push('a')q.push('b')q.push('c')print('q',q)try:print('peek:',q.peek())q.pop()print('q',q)print('peek:',q.peek())q.pop()print('q',q)print('peek:',q.peek())q.pop()print('q',q)print('peek:',q.peek())q.pop()print('q',q)q.pop()print('q',q)q.peek()exceptEmptyQueueErrorase:print(e)

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询