Python-数组实现循环队列和非循环队列

 什么是队列?

 队列就是只能在一端插入,而在另一端删除的线性表,故队列又称为先进先出队列

队列类型有哪些?

循环队列和顺序队列

 队列的存储实现方式有哪些?

顺序存储(数组)和链式存储(链表),此博文描述的是数组的实现(后续更新链表实现)

 代码实现

初始化队列:初始化一个size长度的队列,队列的值都为0

判断队列是否已满:队列满,不可插入队列

判断队列是否为空:队列空,没有数据可以出队

入队:将数据item插入队列

出队:将对头元素从队列中删除并返回的值

class Queue:
    """非循环队列"""
    def __init__(self, size):
        self.size = size
        self.front = -1
        self.rear = -1
        self.queue = [0]*size

    def enqueue(self, item):
        if self.isFull():
            raise Exception('队列满')
        else:
            self.rear += 1
            self.queue[self.rear] = item


    def dequeue(self):
        if self.isEmpty():
            raise Exception('队列空')
        else:
            self.front += 1
            data = self.queue[self.front]
            self.queue[self.front] = 0
            return data

    def isFull(self):
        return self.rear - self.front == self.size

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

    def showQueue(self):
        print(self.queue)


class circleQueue:
    """循环队列"""
    def __init__(self, size):
        self.size = size + 1
        self.front = 0
        self.rear = 0
        self.queue = [0] * self.size

    def enQueue(self, item):
        """进队列,将值放进队列"""
        if self.isFull():
            raise Exception('队列满')
        else:
            self.queue[self.rear] = item
            self.rear = (self.rear+1) % self.size
            return True

    def deQueue(self):
        """出队,移动队头的索引"""
        if self.isEmpty():
            raise Exception('队列空')
        else:
            self.front = (self.front+1) % self.size
        return True

    def frontItem(self):
        """返回队头的值"""
        if self.isEmpty():return -1
        return self.queue[self.front]

    def rearItem(self):
        """返回队尾的值"""
        if self.isEmpty():return -1
        return self.queue[(self.rear - 1 + self.size) % self.size]

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

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

    def showQueue(self):
        print(self.queue)

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值