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

Создать эффективную реализацию дека

22.08.2021, 13:32. Показов 10093. Ответов 6

Студворк — интернет-сервис помощи студентам
Задача

Гоша реализовал структуру данных Дек, максимальный размер которого определяется заданным числом.
Методы push_back(x), push_front(x), pop_back(), pop_front() работали корректно. Но, если в деке было много элементов, программа работала очень долго. Дело в том, что не все операции выполнялись за O(1). Помогите Гоше! Напишите эффективную реализацию.


Внимание: при реализации нельзя использовать связный список.


Формат ввода
В первой строке записано количество команд n — целое число, не превосходящее 5000. Во второй строке записано число m — максимальный размер дека. Он не превосходит 1000. В следующих n строках записана одна из команд:

push_back(value) – добавить элемент в конец дека. Если в деке уже находится максимальное число элементов, вывести «error».
push_front(value) – добавить элемент в начало дека. Если в деке уже находится максимальное число элементов, вывести «error».
pop_front() – вывести первый элемент дека и удалить его. Если дек был пуст, то вывести «error».
pop_back() – вывести последний элемент дека и удалить его. Если дек был пуст, то вывести «error».
Value — целое число, по модулю не превосходящее 1000.

Формат вывода
Выведите результат выполнения каждой команды на отдельной строке. Для успешных запросов push_back(x) и push_front(x) ничего выводить не надо.

Пример 1
Ввод
4
4
push_front 861
push_front -819
pop_back
pop_back

Вывод
861
-819

Пример 2
Ввод
7
10
push_front -855
push_front 720
pop_back
pop_back
push_back 844
pop_back
push_back 823

Вывод
-855
720
844

Пример 3
6
6
push_front -201
push_back 959
push_back 102
push_front 20
pop_front
pop_back

Вывод
20
102
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.08.2021, 13:32
Ответы с готовыми решениями:

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

Используя модуль для реализации дека целых чисел, реализовать очередь на базе дека
Уважаемые программисты!Очень нужна Ваша помощь: (помогите решить, разобраться или хотябы просто объяснить алгоритм, с чего начинать, как...

Считывание элементов дека с файла и запись дека в файл
Доброго времени суток. Я написал код программы про дек с ограниченным входом слева (то есть с него можно удалять элементы как с начала,...

6
Модератор
Эксперт С++
 Аватар для zss
13772 / 10965 / 6491
Регистрация: 18.12.2011
Сообщений: 29,242
22.08.2021, 16:26
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
from collections import deque
 
f = open("file.txt",  "r")  
m =int(f.readline())
n =int(f.readline())
d = deque()
for i in range(n):
   if len(d)>m :
      print("Deque size>m")
      break
   s=f.readline().split()
   command=s[0]
   if len(s)==2:
      value = s[1]
   if command=="push_back":
      d.append(value)
   elif command=="push_front":
      d.appendleft(value)
   elif command=="pop_front":
         print(d[0])
         d.popleft()
   elif command=="pop_back":
         print(d[-1])
         d.pop()
   else:
      print("Error command: "+command)
f.close()
0
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
22.08.2021, 16:31
Цитата Сообщение от thegho Посмотреть сообщение
при реализации нельзя использовать связный список.
Цитата Сообщение от zss Посмотреть сообщение
from collections import deque
0
Эксперт Python
1356 / 653 / 207
Регистрация: 23.03.2014
Сообщений: 3,057
22.08.2021, 16:52
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
class Deque(object):
    def __init__(self):
        self.dllist = []
 
    def is_empty(self):
        return self.dllist == []
 
    def addfront(self, item):
        self.dllist.append(item)
 
    def addrear(self, item):
        self.dllist.insert(0, item)
 
    def removefront(self):
        return self.dllist.pop()
 
    def removerear(self):
        return self.dllist.pop(0)
 
    def size(self):
        return len(self.dllist)
 
 
if __name__ == '__main__':
    d=Deque()
    print(d.is_empty())
    print(d.addrear(4))
    print(d.addrear('dog'))
    print(d.addrear('cat'))
    print(d.addfront(True))
    print(d.size())
    print(d.is_empty())
    print(d.addrear(8.4))
    print(d.removerear())
    print(d.removefront())
0
Заблокирован
22.08.2021, 17:51
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
import re
#a=["push_front 861","push_front -819","pop_back","pop_back"]
#a=["push_front -855","push_front 720","pop_back","pop_back","push_back 844","pop_back","push_back 823"]
#n=len(a)
#m=10;
n,m=input().split()
n=int(n)
m=int(m)
dq=[0]*m
p=0;
for i in range(n):
    #l=re.split(' |_',a[i])
    l=re.split(' |_',input())
    if len(l)==3:
        if l[1]=='back':
            dq[p]=int(l[2])
        else:
            for j in range(p-1,-1,-1):
                dq[j+1]=dq[j]
            dq[0]=int(l[2])
                           
        p+=1
    else:
        if l[1]=='back':
            print(dq[p-1])
        else:
            print(dq[0])
            for j in range(1,p):
                dq[j-1]=dq[j]
        p-=1
0
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
22.08.2021, 18:44
Лучший ответ Сообщение было отмечено thegho как решение

Решение

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
class ArrayDeque:
    def __init__(self, capacity):
        self.__deque = [None] * capacity
        self.__size = 0
        self.__head = 0
        
    def _ensureCapacity(self, x):
        if not 0 <= self.__size + x < len(self.__deque):
            raise ValueError("error")
 
    def _addHeadSize(self, head, size):
        self.__head = (self.__head + head) % len(self.__deque)
        self.__size += size
 
    def pushBack(self, value):
        self._ensureCapacity(1)
        d = self.__deque
        n = len(self.__deque)
        index = (self.__head + self.__size + 1) % n
        d[index] = value
        self._addHeadSize(0, 1)
        
    def pushFront(self, value):
        self._ensureCapacity(1)
        d = self.__deque
        n = len(d)
        d[self.__head] = value
        self._addHeadSize(-1, 1)
        
    def popFront(self):
        self._ensureCapacity(-1)
        d = self.__deque
        n = len(d)
        index = (self.__head + 1) % n
        result = d[index]
        d[index] = None
        self._addHeadSize(1, -1)
        return result
        
    def popBack(self):
        self._ensureCapacity(-1)
        d = self.__deque
        n = len(d)
        index = (self.__head + self.__size) % n
        result = d[index]
        d[index] = None
        self._addHeadSize(0, -1)
        return result
        
def solution():
    n = int(input())
    m = int(input())
    deque = ArrayDeque(m)
    commands = {
        "push_back": deque.pushBack,
        "push_front": deque.pushFront,
        "pop_front": deque.popFront,
        "pop_back": deque.popBack,
    }
    for _ in range(n):
        command, *values = input().split()
        try:
            result = commands[command](*values)
            if result is not None:
                print(result)
        except ValueError as e:
            print(e)
       
if __name__ == "__main__":
    solution()
1
0 / 0 / 0
Регистрация: 22.08.2021
Сообщений: 10
22.08.2021, 23:19  [ТС]
большое спасибо за решение
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.08.2021, 23:19
Помогаю со студенческими работами здесь

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

Создать собственную реализацию функции rtrim
Написать реализацию функции rtrim. Ее прототип выглядит следующим образом: char *rtrim (const char *string); ...

Создать класс принтер и написать его реализацию
Создать класс принтер и написать его реализацию. Результат всех методов должен отображаться на экране. Свойства: - марка принтера -...

Как создать свою реализацию существующей функции?
Интересует способ создания модуля, который бы перекрыл выполнение функции PHP, например system, выполнив некоторые проверки, а потом...

Создать реализацию базы данных без использования SQL сервера
Здравствуйте уважаемые участники форума. Мне была поставлена задача создать реализацию базы данных без использования SQL сервера и других...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru