如何实现两个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
相关产品推荐
相关产品推荐

