2.3 循环队列

先进先出

1. 循环队列的思想

循环队列使用特定数组作为容器,通过取模运算,数组可以实现循环使用。

front与rear用来描述队头与队尾。

空队列:   front==rear   非空队列:  front为空,rear指向末元素

当队列满的时候,(rear+1)%QueueSize==front%QueueSize,

其长度实际为数组长度减1

2. 循环队列的实现

1. 队列初始化

令front与rear等于0

class CircleQueue:
    def __init__(self,QueueSize=10):
        self.QueueSize=QueueSize
        self.data=[None]*self.QueueSize
        self.front=self.rear=0

2. 入队操作

1.判断是否上溢

2.修改尾指针并赋值

    def EnQueue(self,x):
        #首先判断是否会溢出
        if self.front==(self.rear+1)%self.QueueSize:
            raise ValueError("上溢异常")
        #若不会溢出,则添加元素
        #例如,QueueSize=10
        #self.rear由8变为9,由9变为0
        self.rear=(self.rear+1)%self.QueueSize
        self.data[self.rear]=x

3. 出队操作

1.判断是否下溢

2.修改头指针并返回出队元素的值

    def DeQueue(self,x):
        #首先判断是否为空
        if self.front==self.rear:
            raise ValueError("下溢异常")
        #若不会异常,则出队
        self.front=(self.front+1)%self.QueueSize
        #可以不用修改front为空
        return self.data[self.front]

4.获取队头元素 获取长度

    def GetFront(self):
        if self.rear==self.front:
            raise ValueError("下溢异常")
        return self.data[(self.front+1)%self.QueueSize]

    def GetLength(self):
        #return (self.rear-self.front)
        return (self.rear-self.front+self.QueueSize)%self.QueueSize

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值