1
+ # 使用我们的链表作为底层的数据结构实现队列
2
+ # from multiprocessing import Queue
3
+
4
+ class Queue_Node (object ):
5
+ def __init__ (self , val , back = None ):
6
+ self .val = val
7
+ self .back = back # 记录的是入队的节点指针
8
+
9
+ class Queue (object ):
10
+ # 构造函数
11
+ def __init__ (self ):
12
+ self .__head = self .__end = Queue_Node (None )
13
+
14
+ # 开始我们的入队操作
15
+ def push (self , data ):
16
+ self .__head .back = Queue_Node (data )
17
+ # 然后将我们的头节点执行现在新加的节点,实现节点的后移
18
+ self .__head = self .__head .back
19
+
20
+ # 出队的操作实现
21
+ def pop (self ):
22
+ # 实现的是先进先出
23
+ # 我们这里的 end 节点是一直不用更新的,一直指向的是最初的头节点
24
+ if self .__head == self .__end :
25
+ raise Exception ("queue is empty" )
26
+ self .__end = self .__end .back
27
+ return self .__end .val
28
+
29
+ def show_front_val (self ):
30
+ if self .__head .back is None :
31
+ raise Exception ("queue is empty" )
32
+ return self .__head .back .val
33
+
34
+ def show_end_val (self ):
35
+ if self .__end :
36
+ return self .__end .val
37
+ raise Exception ("queue is empty" )
38
+
39
+
40
+ if __name__ == "__main__" :
41
+ queue = Queue ()
42
+
43
+ print (queue .show_end_val ())
44
+ queue .push (1 )
45
+ # print(queue.show_end_val())
46
+ queue .push (2 )
47
+ print (queue .show_end_val ())
48
+ queue .push (3 )
49
+ print (queue .show_end_val ())
50
+ queue .push (4 )
51
+ print (queue .show_end_val ())
52
+
53
+ # 开始出栈
54
+ print (queue .show_end_val ())
55
+ print (queue .pop ())
56
+ print (queue .show_end_val ())
57
+ print (queue .pop ())
58
+ print (queue .show_end_val ())
59
+ print (queue .pop ())
60
+ print (queue .pop ())
61
+
62
+
63
+ # https://developer.aliyun.com/article/953777 队列的实现场景,消息队列的实现
0 commit comments