队列
队列也是一种线性的数据结构,和栈相反的是,队列是一种先进先出的线性表。它只允许在表的一端进行插入,而在另一端进行删除元素。与我们现实生活中的排队是一样的:排在队伍最前面的会先完成事情离开队伍。
在数据结构中抽象为一种线性链表,如下所示
链式队列基本数据结构
链式队列即是链表构成,通过指针相连。实现过程如下
链式队列基本单元: 节点(Node)
创建Node
类
- 值域
- 指针域
1 | class Node: |
链式队列类
创建LinkedQueue
类
- front: 队头节点
- rear: 队尾节点
- length: 队列长度
1 | class LinkedQueue: |
链式队列操作函数
self
参数为对象本身,类似于C++中的this
指针
判断队列是否为空
创建queue_empty
函数1
2
3
4
5
6
7
8
9def queue_empty(self):
"""
if the queue is empty
:return:
"""
if self.front is None:
return True
else:
return False
获取队首元素
创建get_head
函数1
2
3
4
5
6def get_head(self):
"""
get the value of head node
:return:
"""
return self.front.value
入队
创建enqueue
函数
- val: 节点值
1 | def enqueue(self, val): |
出队
创建dequeue
函数1
2
3
4
5
6
7
8
9
10def dequeue(self):
"""
delete the value of head node and return its value
:return:
"""
if not self.queue_empty():
val = self.front.value
self.front = self.front.pnext
self.length -= 1
return val
遍历队列(队首-队尾)
创建queue_traverse
函数1
2
3
4
5
6
7
8
9
10
11def queue_traverse(self):
"""
traverse the queue
:return:
"""
print('队头->|', end=' ')
tmp = self.front
while tmp:
print(tmp.value, '|', end=' ')
tmp = tmp.pnext
print("\n")
测试案例
创建程序入口1
2
3
4
5
6
7
8if __name__ == "__main__":
my_queue = LinkedQueue()
my_queue.enqueue([1, 2, 3])
my_queue.enqueue(456)
my_queue.enqueue('hello')
my_queue.queue_traverse()
my_queue.dequeue()
my_queue.queue_traverse()
运行结果如下:1
2
3队头->| [1, 2, 3] | 456 | hello |
队头->| 456 | hello |