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

如何实现两个Queue队列的合并?附Queue类代码实现

完善Queue类的splice方法实现队列合并

嘿,我来帮你搞定这个队列合并的问题!你已经搭好了Queue类的基本框架,现在只需要把splice方法修正完善,就能实现把第二个队列的所有元素合并到当前队列里了。

首先先指出你草稿里的几个小问题:

  • 直接for i in second_queue会报错,因为咱们的Queue类还没实现迭代器接口,没法直接遍历对象;
  • self.items.enqueue(i)是错误的,self.items是存储元素的列表,它没有enqueue方法,应该调用队列对象的enqueue方法,也就是self.enqueue(i)。

接下来给你两种常见的实现思路,你可以根据需求选择:

方式1:复制第二个队列的元素(原队列保留所有元素)

这种方式会把第二个队列的元素复制到当前队列,合并后第二个队列的元素依然存在:

class Queue: 
    def __init__(self): 
        self.items = [] 
    def isEmpty(self): 
        return self.items == [] 
    def enqueue(self, item): 
        self.items.append(item) 
    def dequeue(self): 
        if self.items == []: 
            raise IndexError('The queue is empty.') 
        # 注意:原代码用了pop(),其实是栈的后进先出逻辑;如果要标准队列的先进先出,应该改成pop(0)
        return self.items.pop() 
    def size(self): 
        return len(self.items) 
    def __str__(self): 
        return "Queue: " + (str(self.items)) 
    def enqueue_list(self, list): 
        for i in list: 
            self.items.append(i) 
        return self.items 
    def splice(self, second_queue): 
        # 遍历第二个队列的元素列表,逐个加入当前队列
        for item in second_queue.items:
            self.enqueue(item)

方式2:移动第二个队列的元素(原队列被清空)

如果需要把第二个队列的元素转移到当前队列,合并后第二个队列变为空,可以这样写:

def splice(self, second_queue): 
        # 循环取出第二个队列的元素,直到它为空
        while not second_queue.isEmpty():
            # 从第二个队列出队,加入当前队列
            self.enqueue(second_queue.dequeue())

另外提个小细节:原dequeue方法用了self.items.pop(),这其实是栈的“后进先出”逻辑。如果要实现标准队列的“先进先出”,应该改成return self.items.pop(0),不过这取决于你的实际需求~

测试示例

咱们来试一下第一种方式的效果:

# 创建两个队列
q1 = Queue()
q1.enqueue_list([1, 2, 3])
q2 = Queue()
q2.enqueue_list([4, 5, 6])

# 合并队列
q1.splice(q2)

# 打印结果
print(q1)  # 输出: Queue: [1, 2, 3, 4, 5, 6]
print(q2)  # 输出: Queue: [4, 5, 6](元素还在)

如果用第二种方式,合并后q2会变成空队列哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:28:47