Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/29: Рейтинг темы: голосов - 29, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 03.12.2020
Сообщений: 8

Дек неограниченного размера

07.12.2020, 02:17. Показов 6084. Ответов 6

Студворк — интернет-сервис помощи студентам
Условие задачи:

Реализуйте структуру данных "дек". Напишите программу, содержащую описание дека и моделирующую работу дека, реализовав все указанные здесь методы. Программа считывает последовательность команд и в зависимости от команды выполняет ту или иную операцию. После выполнения каждой команды программа должна вывести одну строчку. Возможные команды для программы:

push_front
Добавить (положить) в начало дека новый элемент. Программа должна вывести ok.

push_back
Добавить (положить) в конец дека новый элемент. Программа должна вывести ok.

pop_front
Извлечь из дека первый элемент. Программа должна вывести его значение.

pop_back
Извлечь из дека последний элемент. Программа должна вывести его значение.

front
Узнать значение первого элемента (не удаляя его). Программа должна вывести его значение.

back
Узнать значение последнего элемента (не удаляя его). Программа должна вывести его значение.

size
Вывести количество элементов в деке.

clear
Очистить дек (удалить из него все элементы) и вывести ok.

exit
Программа должна вывести bye и завершить работу.
Размер дека должен быть ограничен только размером доступной оперативной памяти. Перед исполнением операций pop_front, pop_back, front, back программа должна проверять, содержится ли в деке хотя бы один элемент. Если во входных данных встречается операция pop_front, pop_back, front, back, и при этом дек пуст, то программа должна вместо числового значения вывести строку error.

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

Выходные данные
Требуется вывести протокол работы дека, по одному сообщению на строке.

Например:

ВводРезультат
push_backok
back1
exitbye
size0
push_back 1ok
size1
push_back 2ok
size2
push_front 3ok
size3
exitbye

Мой код:
Python
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
size = 0 
deque = []
queue_head = 0
queue_tail = 0 
 
def isempty():
    return len(deque) == 0
 
def push_back(val):
    global deque, size
    deque.append(val)
    size += 1
    print('ok')
 
 
def push_front(val):
    global deque, size
    deque.insert(0, val)
    size += 1
    print('ok')
 
 
def pop_front():
  global queue_head, size
  if not isempty():
    queue_head = deque[0]
    size -= 1
    return queue_head
  else:
    return 'error'
 
def pop_back():
  global queue_tail, size
  if not isempty():
    queue_tail = deque[-1]
    size -= 1
    return queue_tail
  else:
    return 'error'
 
def front():
  if not isempty(): 
    return deque[0]
  else:
    print('error')
 
def back():
  if not isempty(): 
    return deque[-1]
  else:
    print('error')
 
def clear():
  global deque
  deque[:] = []
  print('ok')
 
while True:
  s = input().split(' ')
  if s[0] == 'push_front':
    push_front(int(s[1]))
  elif s[0] == 'push_back':
    push_back(int(s[1]))
  elif s[0] == 'pop_back':
    print(pop_back())
  elif s[0] == 'pop_front':
    print(pop_front())
  elif s[0] == 'front':
    print(front())
  elif s[0] == 'back':
    print(back())
  elif s[0] == 'size':
    print(size)
  elif s[0] == 'clear':
    clear()
  elif s[0] == 'exit':
    print('bye')
    break
Прошу помочь найти ошибку.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.12.2020, 02:17
Ответы с готовыми решениями:

Дек неограниченного размера
Помогите пожалуйста! Реализуйте структуру данных "дек". Напишите программу, содержащую описание дека и моделирующую работу дека,...

Создание универсальной очереди неограниченного размера
Консольное приложение должно быть выполнено с применением технологии объектно-ориентированого программирования. В шаблоне класса...

Реализовать дек ограниченного размера на базе массива
Деком называют структуру, которая сочетает очередь и стек : добавлять и убирать элементы можно с обоих концов. Надо реализовать дек...

6
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
07.12.2020, 10:16
Skiffi_,
Python
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
from collections import deque
 
d = deque()
n = str(input()).split()
 
 
def push_back(elem):
    d.append(elem)
    print("ok")
 
 
def push_front(elem):
    d.appendleft(elem)
    print("ok")
 
 
def pop_front():
    print(d.popleft())
 
 
def pop_back():
    print(d.pop())
 
 
def back():
    print(d[-1])
 
 
def front():
    print(d[0])
 
 
def size():
    print(len(d))
 
 
def clear():
    d.clear()
    print("ok")
 
 
def exit():
    print("bye")
 
 
while n[0] != 'exit':
    if n[0] == 'push_back':
        push_back(n[1])
    elif n[0] == 'push_front':
        push_front(n[1])
    elif n[0] == 'pop_back':
        if len(d) > 0:
            pop_back()
        else:
            print('error')
    elif n[0] == 'pop_front':
        if len(d) > 0:
            pop_front()
        else:
            print('error')
    elif n[0] == 'back':
        if len(d) > 0:
            back()
        else:
            print('error')
    elif n[0] == 'front':
        if len(d) > 0:
            front()
        else:
            print('error')
    elif n[0] == 'size':
        size()
    elif n[0] == 'clear':
        clear()
    n = str(input()).split()
exit()
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
07.12.2020, 11:00
Catstail, удалить можно?
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38190 / 21125 / 4307
Регистрация: 12.02.2012
Сообщений: 34,731
Записей в блоге: 14
07.12.2020, 11:25
Gdez, Вы про моё замечание? Могу. А код пусть остаётся. У меня не так много единомышленников.
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
07.12.2020, 12:00
Catstail, я про удаление своего кода , если он по соображениям модераторов по тем или причинам некорректен (считаю, на то они и существуют). Претензий не буду иметь от слова совсем
0
1 / 1 / 0
Регистрация: 03.12.2020
Сообщений: 4
07.12.2020, 15:26
Михаил,короч там это, ну ты понял
1
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
07.12.2020, 16:31
Лучший ответ Сообщение было отмечено Catstail как решение

Решение

Python
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
class Deque:
    def __init__(self, *content: any):
        self.content: [any] = list(content)
 
    def push_front(self, element: any) -> str:
        self.content.insert(0, element)
        return "ok"
 
    def push_back(self, element: any) -> str:
        self.content.append(element)
        return "ok"
 
    def pop_front(self) -> any:
        return self.content.pop(0) if self.content else "error"
 
    def pop_back(self) -> any:
        return self.content.pop(-1) if self.content else "error"
 
    def front(self) -> any:
        return self.content[0] if self.content else "error"
 
    def back(self) -> any:
        return self.content[-1] if self.content else "error"
 
    def size(self) -> int:
        return len(self.content)
 
    def clear(self):
        self.content.clear()
        return "ok"
 
 
deq = Deque()
for line in iter(input, "exit"):
    name, *args = line.split()
    print(getattr(deq, name)(*args))
print("bye")
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.12.2020, 16:31
Помогаю со студенческими работами здесь

Стек и дек: Почему стек есть, с ним я могу работать, а дек я должен сам описывать?
Где взять этот дек? Почему я не могу в C# найти его и обратиться к нему? Почему стек есть, с ним я могу работать, а дек я должен сам...

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

Ввод неограниченного числа строк
Здравствуйте! Возникла проблема. Программа должна читать заранее не известное число строк, и выводить ответ (тестирующая система). Как в...

БД с хранением неограниченного числа комментариев и вложений
Всем привет! Ситуация следующая: мне нужно создать базу, в которую с формы я мог бы вносить определенные данные в таблицу. Все это...

запуск неограниченного количества программ калькулятора
Помогите написать задачу по системному программному обеспечению. "Запуск неограниченного количества программ калькулятора и выборочное их...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru