| 
 | 
 
 
发表于 2022-10-21 18:48:38
|
显示全部楼层
   本楼为最佳答案    
 
 
  类名有所修改,此外还使用了typing库中的Any和Optional这两个类来注释返回值类型。 
- from typing import Any, Optional
 
  
 
- class _Node:
 
 -     """节点类"""
 
  
-     def __init__(self, v: Any) -> None:
 
 -         self.__value = v
 
 -         self.__next = None
 
  
-     def get_value(self) -> Any:
 
 -         """获取节点保存的值"""
 
 -         return self.__value
 
  
-     def get_next(self) -> Optional['_Node']:
 
 -         """获取下一个节点"""
 
 -         return self.__next
 
  
-     def set_next(self, n: Optional['_Node']) -> None:
 
 -         """设置下一个节点"""
 
 -         self.__next = n
 
  
 
- class QueueError(Exception):
 
 -     """自定义队列异常"""
 
  
-     def __init__(self, msg: str) -> None:
 
 -         """使用提示信息实例化一个队列异常对象"""
 
 -         self.val = msg
 
  
-     def __str__(self) -> str:
 
 -         return self.val
 
  
 
- class MyQueue:
 
 -     """自定义队列"""
 
  
-     def __init__(self) -> None:
 
 -         """实例化自定义队列,使用队首、队尾、长度三个属性记录队列信息"""
 
 -         self.__head: Optional[_Node] = None  # 队首,_Node类型或者为None
 
 -         self.__tail: Optional[_Node] = None  # 队尾,_Node类型或者为None
 
 -         self.__len: int = 0  # 队列长度
 
  
-     def push(self, x: int) -> None:
 
 -         """将x添加到队列末尾"""
 
 -         node = _Node(x)
 
 -         if self.__len <= 0:
 
 -             self.__head = self.__tail = node
 
 -         else:
 
 -             self.__tail.set_next(node)
 
 -             self.__tail = node
 
 -         self.__len += 1
 
  
-     def pop(self) -> int:
 
 -         """从队列开头移除并返回元素"""
 
 -         if self.__len > 0:
 
 -             node = self.__head
 
 -             self.__head = node.get_next()
 
 -             self.__len -= 1
 
 -             return node.get_value()
 
 -         raise QueueError('队列为空')
 
  
-     def peek(self) -> Optional[int]:
 
 -         """查看队列开头的元素,如果队列为空则返回None"""
 
 -         if self.__len <= 0:
 
 -             return self.__head.get_value()
 
 -         return None
 
  
-     def empty(self) -> bool:
 
 -         """返回队列是否为空"""
 
 -         return self.__len == 0
 
  
 
- if __name__ == '__main__':
 
 -     q = MyQueue()
 
 -     for i in range(5):
 
 -         q.push(i)
 
 -     print(q.empty())
 
 -     for i in range(5):
 
 -         print(q.pop())
 
 -     q.pop()  # 抛出异常
 
  复制代码 |   
 
 
 
 |