1 # -*- coding:utf-8 -*- 2 """ 3 队列的特点是 先进先出 ,一般有一下操作 4 enqueue 将一个元素存入队列中 5 dequeue 将一个元素从队列中取出, 并在队列中删除他 6 7 empty 查看队列是否是空 8 """ 9 10 11 # Node类是一个节点, 有两个属性, 一个是存储元素, 一个指向另一节点的引用 12 class Node(object): 13 def __init__(self, element=None, next=None): 14 self.element = element 15 self.next = next 16 17 # 这个函数是在使用print的时候被自动调用, 就是把这个Node显示出来 18 def __repr__(self): 19 return str(self.element) 20 21 22 class Queue(object): 23 # 初始化函数, 自动被调用 24 # 初始化Queue()类的时候, 他有两个属性, 分别指向头尾 25 def __init__(self): 26 self.head = Node() 27 self.tail = self.head 28 29 # 如果head的next属性为空, 说明队列是空的 这里不能是head的element 30 def empty(self): 31 return self.head.next is None 32 33 # 创建一个node 34 # 让tail.next指向ta 35 # 让tail指向他, tail现在就是新的队尾 36 def enqueue(self, element): 37 n = Node(element) 38 self.tail.next = n 39 self.tail = n 40 41 # 取出head.next指向的元素, 如果队列不是空的, 就让head.next指向node.next, 42 # 这样node就不在队列中 43 def dequeue(self): 44 node = self.head.next 45 if not self.empty(): 46 self.head.next = node.next 47 # 看看是不是只有一个元素, 如果是的话, 48 # 让让tail指回第一个Node 49 if self.head.next == None: 50 self.tail = self.head 51 return node 52 53 def test(): 54 q = Queue() 55 q.enqueue(1) 56 print(q.dequeue()) 57 q.enqueue(1) 58 print(q.dequeue()) 59 print(q.dequeue()) 60 print(q.dequeue()) 61 print(q.dequeue()) 62 63 if __name__ == "__main__": 64 test()