要求:
请你实现一个循环队列,该循环队列可利用的空间大小等于n个int型变量的大小。
操作:
push x:将x加入到循环队列尾端。若循环队列已满,输出"full"(不含引号),否则不输出任何内容。保证x为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 |
思路:
添加元素是从队尾添加的。front和pop()都是输出队首元素。以下图为例,队首是在队列的右端,队尾是在队列的左端。再看列表list,列表的左端是队首的元素,列表的右端是队尾,看着好像列表和队列刚好“反”了。这里需要理清楚列表元素在队列中入队和出队的过程。
list = [12,23,21,5,31,7,2,11]
这个题就是给基本队列加上一个判断长度的条件,不是很难。和上一题代码很像:
算法入门——数据结构(队列)python3实现(7)_弓早早o_O的博客-CSDN博客
代码实现
class Queue:
def __init__(self) -> None:
self.items = []
def is_empty(self):
return self.items == []
def push(self, item):
return self.items.append(item)
def pop(self):
return self.items.pop(0)
def front(self):
return self.items[0]
def size(self):
return len(self.items)
q = Queue()
input_chars = input()
input_ = input_chars.split(' ')
n_input = int(input_[0])
q_input = int(input_[1])
for i in range(q_input):
ip = input()
if ip[:4] == "push":
func = ip.split(" ")
if q.size() == n_input:
print("full")
else:
q.push(int(func[1]))
elif ip == "front":
if q.is_empty():
print("empty")
else:
print(q.front())
elif ip == "pop":
if q.is_empty():
print("empty")
else:
print(q.pop())