数据结构中的队列在python中的理解,环形队列的实现

在这里插入图片描述
在这里插入图片描述
(remove的参数是元素,pop的参数是下标。)
(1)b中如果让a出队,后面的bcde都需要往前挪,时间复杂度为O(n)
(2)c中如果让front指向+1的位置,不管a,也可以做到a出队列的操作。但是如果到了最后只剩e再想入队的话,前后都没有位置了。如果用python的列表append的话,虽然可以扩充,但是很可能一系列的入队出队操作之后占了大量的内存,有用的很少。
在这里插入图片描述
用环形队列的方式解决问题。
(1)rear=front,空队列。
(2)入队一圈之后,怎样让11变回0?
取余。(rear【或者front】+1)对12取余,12是队列的大小。
(3)上图6,说明队列是满的。空着一个,是为了判定队空还是队满。牺牲一小块空间定义为队满。rear+1=front定义为队满。
下图错误:front == Maxsize - 1 时,再前进一个位置就自动到0。
在这里插入图片描述

class Quene:
    def __init__(self, size=100):
        self.quene = [0 for _ in range(size)]
        self.size = size
        self.rear = 0    # 队尾(进队)
        self.front = 0    # 队首(出队)

    def push(self, element):
        if not self.is_filled():
            self.rear = (self.rear + 1) % self.size
            self.quene[self.rear] = element
        else:
            raise IndexError('Quene is filled')

    def pop(self):   # front不指向元素
        if not self.is_empty():
            self.front = (self.front+1)% self.size
            return self.quene[self.front]
        else:
            raise IndexError('Quene is empty')

    def is_empty(self):
        return self.rear == self.front

    def is_filled(self):
        return (self.rear+1) % self.size == self.front


q = Quene(5)
for i in range(4):
    q.push(i)
print(q.pop())
q.push(4)
print(q.pop())
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值