根据队列的特性,队列内元素遵循先入先出的原则,我们可以基于列表实现一个队列,由于队列的实现比较简单,这里只实现其基本功能,其余功能由读者自己实现。
这里介绍一个容易被忽视的函数,由于部分队列需要实现翻转功能,这个函数应该可以帮上你,这个函数就是
reverse()函数
举个简单的例子:
这里我们定义一个列表:
li = [1,2,3,4,5,'a','abc']
通过调用reverse()函数,直接将列表翻转,翻转与列表元素无关,并不会改变列表内元素,只是改变其位置
li,reverse()
结果如下:
回归正题,我们基于列表简单实现一个队列,
首先,我们定义一个类,并初始化它
class Queue:
def __init__(self):
self.items = []
然后,对于入队,为了方便操作以及减少代码量,我们选择列表尾作为队尾,使用append()函数以达到入队的效果,对于出队,我们选择列表表首作为出队位置,并使用pop()函数实现出队,另外插一句,对于pop()函数,可以传入一个下标作为指定的删除对象,不传入下标时默认为列表最后一个元素,代码如下:
# 入队
def push(self, val):
return self.items.append(val)
# 出队
def top(self):
if self.is_empty():
print("栈空!")
exit(0)
else:
return self.pop(0)
最后,完整的代码如下:这里加了几个简单的测试用例
# 队列是限制在两端进行插入删除操作的线性表,允许进行存入的一端称为 队尾,允许进行删除的一端称为 队首
# 队列只能在队头和队尾进行数据操作
# 队列模型具有 先进先出 或者 后进后出 的规律
"""
对于列表的翻转:
li = [1,2,3,4,5,6,'a','asd']
li.reverse()
li = ['asd','a',6,5,4,3,2,1]
对于reverse函数只是对列表进行翻转
"""
# 队列的顺序存储--基于列表
# 定义队列
class Queue:
# 初始化
def __init__(self):
self.items = []
# 判空
def is_empty(self):
return self.items is None
# 入队
def push(self, val):
return self.items.append(val)
# 出队
def top(self):
if self.is_empty():
print("栈空!")
exit(0)
else:
return self.pop(0)
# 输出
def show(self):
for i in self.items:
print(i, end=" ")
print()
# 翻转
def xuan(self):
return self.items.reverse()
if __name__ == "__main__":
line = Queue()
for i in range(10):
line.push(i)
line.show()
line.xuan()
line.show()