Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.04.2025, 22:12   #1
Nicodim
Пользователь
 
Регистрация: 31.05.2023
Сообщений: 31
По умолчанию Алгоритмы и структуры данных на python стек и очередь

Здравствуйте, подскажите пожалуйста где ошибка в коде не проходит тесты.
Выводит две 2 вместо одной.

Реализация стека с поддержкой минимума
Описание: Реализуйте стек, который поддерживает следующие операции:

push x — добавить элемент xxx в стек;
pop — удалить верхний элемент стека (если стек пуст, вывести -1);
top — вывести верхний элемент стека (если стек пуст, вывести -1);
size — вывести размер стека;
empty — вывести 1, если стек пуст, иначе 0;
min — вывести минимальный элемент стека (если стек пуст, вывести -1).
Входные данные:
В первой строке число nnn (1≤n≤1051 \leq n \leq 10^51≤n≤105) — количество операций. В следующих nnn строках записаны команды.

Выходные данные:
Результаты операций, каждая с новой строки.

Пример:

Sample Input:

8
push 3
push 5
min
push 2
min
pop
min
pop
Sample Output:

3
2
3
5

Код:
class Stack:
    def __init__(self):
        self.items = []
        self.min_items = []

    def push(self, x):
        self.items.append(x)
        if not self.min_items or x <= self.min_items[-1]:
            self.min_items.append(x)

    def pop(self):
        if not self.items:
            return -1
        top = self.items.pop()
        if top == self.min_items[-1]:
            self.min_items.pop()
        return top

    def top(self):
        if not self.items:
            return -1
        return self.items[-1]

    def size(self):
        return len(self.items)

    def empty(self):
        return 1 if not self.items else 0

    def min(self):
        if not self.items:
            return -1
        return self.min_items[-1]


if __name__ == "__main__":
    n = int(input())
    stack = Stack()
    for _ in range(n):
        command = input().split()
        op = command[0]
        if op == "push":
            stack.push(int(command[1]))
        elif op == "pop":
            print(stack.pop())
        elif op == "top":
            print(stack.top())
        elif op == "size":
            print(stack.size())
        elif op == "empty":
            print(stack.empty())
        elif op == "min":
            print(stack.min())
Nicodim вне форума Ответить с цитированием
Старый 04.04.2025, 07:57   #2
Exp2.7
 
Регистрация: 06.07.2021
Сообщений: 7
По умолчанию

Код:
class Stack:
    def __init__(self):
        self.items = []

    def push(self, x):
        self.items.append(x)

    def pop(self):
        if not self.items:
            return -1
        top = self.items.pop()
        return top

    def top(self):
        if not self.items:
            return -1
        return self.items[-1]

    def size(self):
        return len(self.items)

    def empty(self):
        return int(not self.items)

    def min(self):
        if not self.items:
            return -1
        return min(self.items)


if __name__ == "__main__":
    n = int(input())#8
    #cmd=['push 3','push 5','min','push 2','min','pop','min','pop']
    stack = Stack()
    for i in range(n):
        command = input().split()
        #command = cmd[i].split()
        op = command[0]
        if op == "push":
            stack.push(int(command[1]))
        elif op == "pop":
            print(stack.pop())
        elif op == "top":
            print(stack.top())
        elif op == "size":
            print(stack.size())
        elif op == "empty":
            print(stack.empty())
        elif op == "min":
            print(stack.min())
Exp2.7 вне форума Ответить с цитированием
Старый 04.04.2025, 09:04   #3
Nicodim
Пользователь
 
Регистрация: 31.05.2023
Сообщений: 31
По умолчанию

Благодарю!
Nicodim вне форума Ответить с цитированием
Старый 04.04.2025, 19:40   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,429
По умолчанию

Exp2.7, так у вас тоже выводятся две двойки. В условии или примере ошибка. Если pop не только удаляет, но и выводит удаленный элемент, то в примере должна быть вторая двойка. А если pop только удаляет, но не выводит удаленный элемент (и печатается -1 при неуспешном pop), то в примере лишняя 5 (или последняя команда должна быть top, а не pop).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 04.04.2025, 22:07   #5
Exp2.7
 
Регистрация: 06.07.2021
Сообщений: 7
По умолчанию

BDA, кроме ТС никто дословно не знает формулировку задания
Exp2.7 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Java Абстрактные типы данных: список, стек, очередь Serg0398 Помощь студентам 1 11.04.2017 12:17
Стек и очередь. Задачи никогда не попадают в стек - Delphi Exxodus Помощь студентам 1 05.04.2016 14:12
Очередь (динамические структуры данных) fenix0093 Помощь студентам 3 24.11.2012 19:24
Алгоритмы и структуры данных Willen Общие вопросы C/C++ 0 09.11.2010 23:40