-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathI_Limited_queue.py
100 lines (81 loc) · 3.15 KB
/
I_Limited_queue.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
"""
I. Ограниченная очередь
Астрологи объявили день очередей ограниченного размера.
Тимофею нужно написать класс MyQueueSized, который принимает параметр
max_size, означающий максимально допустимое количество элементов в очереди.
Помогите ему —– реализуйте программу, которая будет эмулировать работу
такой очереди. Функции, которые надо поддержать, описаны в формате ввода.
Формат ввода
В первой строке записано одно число — количество команд,
оно не превосходит 5000.
Во второй строке задан максимально допустимый размер очереди,
он не превосходит 5000.
Далее идут команды по одной на строке. Команды могут быть следующих видов:
push(x) — добавить число x в очередь;
pop() — удалить число из очереди и вывести на печать;
peek() — напечатать первое число в очереди;
size() — вернуть размер очереди;
При превышении допустимого размера очереди нужно вывести «error».
При вызове операций pop() или peek() для пустой очереди нужно вывести «None».
Формат вывода
Напечатайте результаты выполнения нужных команд, по одному на строке.
Пример 1
Ввод
8
2
peek
push 5
push 2
peek
size
size
push 1
size
Вывод
None
5
2
2
error
2
"""
class CustomQueueSizedException(Exception):
def __init__(self, message):
self.message = message
class MyQueueSized:
def __init__(self, max_size):
self.array = [None] * max_size
self.max_size = max_size
self.head = 0
self.tail = -1
self.qsize = 0
def push(self, element):
if self.qsize != self.max_size:
self.tail = (self.tail + 1) % self.max_size
self.array[self.tail] = element
self.qsize += 1
else:
raise CustomQueueSizedException('error')
def size(self):
return self.qsize
def peek(self):
if self.qsize == 0:
raise CustomQueueSizedException('None')
return self.array[self.head]
def pop(self):
x = self.peek()
self.head = (self.head + 1) % self.max_size
self.qsize -= 1
return x
qty_cmd = int(input())
max_size = int(input())
queue_sized = MyQueueSized(max_size)
for _ in range(qty_cmd):
try:
list_cmd = input().split(' ')
if len(list_cmd) == 1:
print(getattr(queue_sized, list_cmd[0])())
else:
getattr(queue_sized, list_cmd[0])(int(list_cmd[1]))
except CustomQueueSizedException as error:
print(error.message)