用Python实现队列---循环队列:牛客题解 AB8 【模板】循环队列

题目

牛客 AB8 【模板】循环队列

描述

请你实现一个循环队列,该循环队列可利用的空间大小等于n个int型变量的大小。

操作:

push x:将xxx加入到循环队列尾端。若循环队列已满,输出"full"(不含引号),否则不输出任何内容。保证xxx为int型整数。
front:输出队首元素,队首不出队。若队列为空,输出"empty"(不含引号)。
pop:输出队首元素,且队首出队。若队列为空,输出"empty"(不含引号)。

输入描述:

第一行输入两个整数n, q (1≤n, q≤10^5),表示循环队列可利用的空间大小和操作次数。
接下来的q行,每行一个字符串,表示一个操作。保证操作是题目描述中的一种。

输出描述:

按对应操作要求输出。

示例

输入:
3 10
push 1
push 2
front
push 3
push 4
pop
pop
pop
front
pop

输出:
1
full
1
2
3
empty
empty

代码

class Queue:
    def __init__(self,size):
        # 以列表的最后一个元素作为队尾
        self.items = [None]*size  #长度占位 声明长度为size的数据区
        self.size =size  #队列的最大长度
        self.head = 0 #队头的索引
        self._length = 0 #记录队列的长度


    def is_empty(self):
        return self._length ==0 # items中实际是有元素的,没有真正pop,但是进行了封装

    def length(self):
        return self._length

    def push(self, item):
        if self.length() == self.size:
            print("full" )
        else:
            idx = (self.head + self.length()) % self.size #要加入元素的索引
            self.items[idx] = item #赋值
            self._length += 1

    def pop(self):
        # 抛出队首元素
        if self.is_empty():
            return "empty"
        else:
            value = self.items[self.head]
            self.head = (self.head +1) % self.size #出队之后的队头索引
            self._length -= 1
            return value#时间复杂度为O(1)

    def front(self):
        if self.is_empty():
            return "empty"  
        return self.items[self.head]


if __name__ == "__main__":
    m, n = map(int, input().split())
    queue = Queue(m)
    while n:
        n = n - 1
        s = input('')  # 在pycharm中改为s = input(' ')  牛客中为s = input('')
        a = s.split()[0]
        if a == "push":
            num = int(s.split()[1])
            queue.push(num)
        elif a == "pop":
            print(queue.pop())
        else:
            print(queue.front())
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Your_Majesty!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值