数据结构之队列(Python代码实现)

一、队列的基本概念

       队列这种数据结构具有以下特点:

  • 队列相当于两端都开的容器;
  • 队列的一端只能进行删除操作,不能进行插入操作;
  • 队列的另一端只能进行插入操作,不能进行删除操作;

       进行插入操作的一端叫作队尾,进行删除操作的一端叫作队首,它就像排队一样,队列中的数据是从队尾进,从队首出。

队列的初始数据存储结构

图 “队列的初始数据存储结构” 中的箭头表示排队的方向,即箭头指向的方向为队首所在的方向。

当有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
发布了83 篇原创文章 · 获赞 188 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/qq_40791253/article/details/90768425
今日推荐