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()