KeyError 发表于 2022-10-21 18:48:37

测验1: 实现队列

本帖最后由 KeyError 于 2022-10-21 18:50 编辑

定义Myduilie类,有以下函数:
        def push(x: int) -> None:将x添加到队列的末尾
        def pop() -> int:从队列的开头移除并返回元素
        def peek() -> int:返回队列开头的元素
        def empty() -> bool:返回队列是否为空

Brick_Porter 发表于 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 = None# 队首,_Node类型或者为None
      self.__tail: Optional = 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:
      """查看队列开头的元素,如果队列为空则返回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()# 抛出异常

KeyError 发表于 2022-11-4 21:00:07

Brick_Porter 发表于 2022-10-21 21:24
类名有所修改,此外还使用了typing库中的Any和Optional这两个类来注释返回值类型。

还可以这么搞:
class Myduilie:
    def __init__(self):
         self.duilie=[]
    def push(self,x:int) -> None:
         self.duilie.append(x)
    def pop(self) -> int:
          return self.duilie.pop(0)
   def peek(self) -> int:
          return self.duilie
      def empty() -> bool:
          return not self.duilie

页: [1]
查看完整版本: 测验1: 实现队列