【Python3_进阶系列_008】Python3-Queue实现
一、Queue
queue队列也是一种常见的数据结构,具有先进先出的特性。可以理解为一个管道,从管道的一边进,另一边出。queue的实现也是常见的面试题目。我们会通过两种方式实现queue。
方式1:list实现:参考Stack实现代码,由于stack是先进后出的,queue是先进先出,因此只需要修改stack代码的出栈代码,就可以模拟实现队列:
class Queue(object): def __init__(self, len): self.data = [] self.len = len def pop(self): return self.data.pop(0) def push(self, var): """ :param var: :return: """ if len(self.data) < self.len: self.data.append(var) return True else: print("Queue Full, Missing Data!") return False def peek(self): return self.data[0] def empty(self): return not bool(self.data) def full(self): return len(self.data) == self.len def find(self, var): """ :param var: :return: """ return self.data.index(var) def __str__(self): return str(self.data) if __name__ == '__main__': queue = Queue(5) print(queue.empty()) queue.push(1) queue.push(2) queue.push(3) queue.push(3) queue.push(4) queue.push(5) print(queue) print(queue.full()) print(queue.peek()) print(queue.find(3)) print(queue.pop()) print(queue.pop()) print(queue.peek())
实际上只修改了pop,peek方法中取值的索引就可以实现队列。
方法2:通过2个栈,模拟队列
### 通过2个栈实现队列的push。pop方法 from stack import Stack class Queue(): def __init__(self): self.stack1=Stack(3) self.stack2=Stack(3) self.len=6 def push(self,var): ## 入队列的时候,直接进入stack1 self.stack1.push(var) def pop(self): ## 出队列:如果2有数据,直接pop2的数据,如果2为空,需要将1的数据全部入2,然后在pop2 if not self.stack2.empty(): return self.stack2.pop() else: while not self.stack1.empty(): self.stack2.push(self.stack1.pop()) return self.stack2.pop()

浙公网安备 33010602011771号