队列的实现

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

 

posted @ 2017-12-24 14:45  cuzz_z  阅读(162)  评论(0编辑  收藏  举报