python数据结构之队列实现

前言:此篇只为本人小菜鸟的练习,如有错误,还烦请大家指出。

自设队列

队列同样作为一个简单的线性数据结构,用来存储不同的数据,其原则与栈相反,严格遵守了first in last out(filo)原则,简单可以理解为子弹,排队等模型,其并不能像栈那样仅仅使用python内部列表的特性去完成filo的队列(原因很简单,如果我们需要出队列元素时,很明显我们需要将第一个删除,那么第一个后面所有的元素都会挪动,这样的效率实在太低了),因此我们采用环形列表来实现队列。

此环形并非物理结构上的环形,而是逻辑结构,具体实现环形我们采用取余的方法,下文会有详细说明,此外,队列与栈还有一个不同那便是大小的约束,实现栈时,其大小一般初始化为0,随着插入和删除大小发生变化,但是队列一开始是有大小的规定的,即初始化时就要指定队列的大小

附上一张环形队列的草图。

由于队列存在大小的限制,那边多出了许多不同于栈的操作,自动增容,判断是否队列已满等等。

因此,我们需要区分出判满和判空的操作(由于初始化规定大小,所以队内还要多少是不清楚的),为此我们牺牲了队列中的一个位置,定义出两个指针front和rear,rear随着增加元素而移动,先移动后增加,而front随着删除移动,先移动后删除,从始至终我们都要保证front指向的位置没有元素,并不是真的没有元素,而是front指向的元素并不属于队内!这样就可以区分开判满和判空,即若front 等于rear就是空,若rear+1等于front就是满

交代完这些要点就开始用类实现一个环形队列吧。

class Queue:
    def __init__(self,size):
        self.size = size  # 指定队列规模
        self.queue = [0 for _ in range(self.size)]
        self.rear = 0  # 增加元素指针
        self.front = 0  # 删除指针

rear和front都初始化为0,传入的参数size是指定队列的规模大小,至此开始队列的一些操作。

回到前文提到的环形队列采用取余的方法实现的意思是对于超出队列大小的下标我们

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值