前言
- 有Python基础
- 学过数据结构那就更妙了
原理
先进先出
- 注意:栈是先进后出
灵感来源于生活,也许这个“队列”就是根据生活中的排队的队列所命名的。因为它们的特点是共通的,都是先来排队的先出去,即先进先出。因此在想到数据结构中的队列时候,将其与生活中的排队联系起来即可。图片来源于百度百科,链接:
https://baike.baidu.com/item/%E9%98%9F%E5%88%97/14580481?fr=aladdin
-
初始化时,队列为空
-
添加元素时,添加的第一个元素作为队头,之后加入的元素需要排在他的后面(类似于现实生活中的排队)
-
出队时,排在开头的人先出,之后再轮到后面的元素
-
不同于栈,栈是只对栈顶元素操作,队列则是对队头队尾的元素操作。
实现
环境
win10 + pycharm + python3.7。Python3是重点,其他的可换。
初始化
队列的初始化,按上面的话讲,应是空的队列,初始化类似栈,同样的是采用list类型作为items
class Queue(object):
def __init__(self):
self.items = []
判空/遍历/size
判空、遍历、size方法依旧采用之前博客中的方法,链接
https://blog.csdn.net/sf9898/article/details/104939489
代码
def isEmpty(self):
return len(self.items) == 0
def size(self):
return len(self.items)
def travel(self):
for i in self.items:
print(i, end= ' ')
print('')
增加元素和删除元素
- 队列的重要部分,和栈区别的部分,即添加和删除操作,入队的时候肯定是从队尾排起,因此直接将加进来的元素加到队尾即可,现在用list类型的items模拟队列,将items的第一个元素作为队头,最后一个元素作为队尾,那么在做将元素加到队尾的这一步操作时,直接用append即可。
- 出队的时候,是从队头开始走人的。那么用pop(0)即可。
# 队列是先进先出
# 入队
def push(self, item):
self.items.append(item)
# 出队
def pop(self):
self.items.pop(0)
完整代码
class Queue(object):
def __init__(self):
self.items = []
def isEmpty(self):
return len(self.items) == 0
# 队列是先进先出
# 入队
def push(self, item):
self.items.append(item)
# 出队
def pop(self):
self.items.pop(0)
def size(self):
return len(self.items)
def travel(self):
for i in self.items:
print(i, end=' ')
print('')
q = Queue()
print(q.isEmpty())
for i in range(5):
q.push(i)
q.travel() # 打印出0-5
print("size:", q.size())
q.pop()
q.pop() # 进行2次出队的操作,讲道理是前两个元素即0和1出去了,现在遍历应该是只有后三个元素即2 3 4
print("size:", q.size())
q.travel()
- 结果