Ограниченная очередь

Астрологи объявили день очередей ограниченного размера. Тимофею нужно написать класс MyQueueSized, который принимает параметр max_size, означающий максимально допустимое количество элементов в очереди.

Помогите ему —– реализуйте программу, которая будет эмулировать работу такой очереди. Функции, которые надо поддержать, описаны в формате ввода.

Формат ввода

В первой строке записано одно число — количество команд, оно не превосходит 5000.

Во второй строке задан максимально допустимый размер очереди, он не превосходит 5000.

Далее идут команды по одной на строке. Команды могут быть следующих видов:

push(x) — добавить число x в очередь;
pop() — удалить число из очереди и вывести на печать;
peek() — напечатать первое число в очереди;
size() — вернуть размер очереди;

При превышении допустимого размера очереди нужно вывести «error». При вызове операций pop() или peek() для пустой очереди нужно вывести «None».

Формат вывода

Напечатайте результаты выполнения нужных команд, по одному на строке.

class MyQueueSized:
    def __init__(self, max_size):
        self.queue = [None for _ in range(n)] 
        self.max_n = max_size
        self.head = 0
        self.tail = 0
        self.size = 0
            
    def is_empty(self):
        return self.size == 0

    def push(self, x):
        if self.size < self.max_n:
            self.queue[self.tail] = x
            self.tail = (self.tail + 1) % self.max_n
            self.size += 1
            return 'OK'
        else:
            return 'error'

    def peek(self):
        if self.is_empty():
            return None
        return self.queue[self.head]
    
    def pop(self):
        if self.is_empty():
            return None
        x = self.queue[self.head]
        self.queue[self.head] = None
        self.head = (self.head + 1) % self.max_n
        self.size -= 1
        return x

n = int(input())
queue_length = int(input())
s = MyQueueSized(queue_length)
res = []
for i in range(n):
    command = input().split()
    if command[0] == 'push':
        a = s.push(command[1])
        if a == 'error':
            res.append(a)  
    if command[0] == 'pop':
        res.append(s.pop())
            
    if command[0] == 'peek':
        res.append(s.peek())
        
    if command[0] == 'size':
        res.append(s.size)
        
for x in res:
    print(x)


Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий