You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现双端队列ADT遇移除操作难题,求技术解答

解决双端队列ADT移除操作的问题

我来帮你梳理下双端队列ADT实现里的问题,尤其是移除操作部分,还有几个小细节需要调整:

现有代码的核心问题

  • is_empty方法逻辑错误:你当前用self.item == None判断是否为空,但初始化时self.item被赋值为[](空列表),它永远不会等于None,导致这个方法永远返回False。
  • remove_front方法不符合ADT规范:该方法不需要接收item参数,双端队列的remove_front是移除队首(列表第一个元素),而不是移除指定元素;另外self.item.remove(item)是按值移除,不是按位置,逻辑错误。
  • remove_back方法未完成:需要实现移除队尾元素的逻辑。

修正后的完整代码

class deq:
    def __init__(self):
        self.item = []
    
    def is_empty(self):
        # 更简洁的空列表判断方式
        return not self.item
    
    def size(self):
        return len(self.item)
    
    def add_front(self, item):
        self.item.insert(0, item)
    
    def add_back(self, item):
        self.item.append(item)
    
    def remove_front(self):
        # 弹出并返回队首元素,队列为空时会抛出IndexError(和列表pop行为一致)
        return self.item.pop(0)
    
    def remove_back(self):
        # 弹出并返回队尾元素,队列为空时会抛出IndexError
        return self.item.pop()

关键修正点说明

  1. is_empty方法:用return not self.item直接判断列表是否为空,这是Python中判断空容器的简洁写法。
  2. remove_front方法:
    • 去掉了多余的item参数,符合双端队列“从队首移除元素”的定义。
    • 使用pop(0)弹出列表第一个元素,这正是队首元素的位置,同时返回该元素(符合ADT的常规设计,让调用者能获取被移除的元素)。
  3. remove_back方法:
    • 使用pop()(无参数)弹出列表最后一个元素,对应双端队列的队尾位置,同样返回被移除的元素。
    • 如果队列为空时调用这两个移除方法,会抛出IndexError,这和Python列表的pop行为一致,也符合ADT的错误处理逻辑(你也可以根据需求自定义异常提示)。

内容的提问来源于stack exchange,提问作者Joker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:13:12