一、队列的基本概念
队列这种数据结构具有以下特点:
- 队列相当于两端都开的容器;
- 队列的一端只能进行删除操作,不能进行插入操作;
- 队列的另一端只能进行插入操作,不能进行删除操作;
进行插入操作的一端叫作队尾,进行删除操作的一端叫作队首,它就像排队一样,队列中的数据是从队尾进,从队首出。
图 “队列的初始数据存储结构” 中的箭头表示排队的方向,即箭头指向的方向为队首所在的方向。
当有n个数据(数据1 ~ 数据n)依次在队列里面,如果队首最开始的位置(指向数据1)下标为 0,那么数据n所在的位置下标为 n-1,而队尾的位置是指向数据 n 的下一个位置下标为 n-1 ,而队尾的位置是指向数据 n 的下一个位置的,所以队尾的下标就应该是 n-1+1,即队尾的下标为 n 。如下图所示 “队列的普遍存储结构图示” 。
二、Python中队列的应用实例
完整代码实现:
#队列的实现
class queue():
def __init__(self,size): #建立初始化方法,在初始化方法中进行一些参数的初始化
self.data=[] #指定数据存储的基本类型为列表
self.size=size #初始化队列的大小
self.head=0 #队首初始化为0
self.tail=0 #队尾初始化为0
def Empty(self): #判断队列是否为空
if(self.head==self.tail):
return True
else:
return False
def Full(self): #判断队列是否已满
if(self.tail-self.head==self.size):
return True
else:
return False
def join(self,content): #入队列
if self.Full():
print("队列已满,不能进入队列!")
else:
self.data.append(content)
self.tail=self.tail+1
def out(self): #出队列
if(self.Empty()):
print("队列已空,没有元素出队列!")
else:
print(self.data[self.head])
self.data[self.head]="null"
self.head=self.head+1
def sayhead(self):
print("当前的队首下标位置是:"+str(self.head))
def saytail(self):
print("当前的队尾下标位置是:"+str(self.tail))
将上面代码输入PyCharm,鼠标右击选择 “Run File in Console” 进入Python Shell
# 创建一个大小为3,名为myque的队列对象
>>> myque=queue(3)
# 依次将“APP”、“OK”进行入队列的操作
>>> myque.join("APP")
>>> myque.join("OK")
# 查看当前的队首下标与队尾下标
>>> myque.sayhead()
当前的队首下标位置是:0
>>> myque.saytail()
当前的队尾下标位置是:2
# 出队列,可以看到此时先进去的元素 “App” 先出来了
>>> myque.out()
APP
# 查看当前的队首与队尾位置,发现队尾位置不变,队首位置往后移动一个单位
>>> myque.sayhead()
当前的队首下标位置是:1
>>> myque.saytail()
当前的队尾下标位置是:2
# 继续将“Ban”、“Ahhh”入队列
>>> myque.join("Ban")
>>> myque.join("Ahhh")
# 此时队列里有三个元素,队列大小为3,队列已满
>>> myque.join("Qu")
队列已满,不能进入队列!
# 依次按先进先出的顺序进出队列
>>> myque.out()
OK
>>> myque.out()
Ban
>>> myque.out()
Ahhh
>>> myque.out()
队列已空,没有元素出队列!
# 下标都是4,即队首与队尾重合,满足队空的条件
>>> myque.sayhead()
当前的队首下标位置是:4
>>> myque.saytail()
当前的队尾下标位置是:4