Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
7 / 7 / 3
Регистрация: 24.09.2012
Сообщений: 231

Ошибка доступа к стеку

11.10.2015, 16:37. Показов 1226. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет
Вот такая есть задача

Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.
push(x) -- Push element x onto stack.
pop() -- Removes the element on top of the stack.
top() -- Get the top element.
getMin() -- Retrieve the minimum element in the stack.

Вот так я ее попытался решить
C++
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
#include <iostream>
 
using namespace std;
 
class MinStack {
public:
    void push(int x) {
        if (head == NULL)
        {
            head = new node;
            head->value = x;
        }
        else
        {
            node *item = new node;
            item->value = x;
            item->next = head;
            head = item;
        }
    }
 
    void pop() {
        head = head->next;
    }
 
    int top() {
        return head->value;
    }
 
    int getMin() {
        node *item = head;
        int min = item->value;
        item = item->next;
        while (item != NULL)
        {
            if (min > item->value) min = item->value;
            item = item->next;
        }
        return min;
    }
 
    
 
    ~MinStack()
    {
        
            delete head;
        
    }
 
private:
    struct node
    {
        node *next;
        int value;
    };
 
    node *head;
};
 
int main()
{
    MinStack a;
    a.push(3);
    a.push(2);
    a.push(1);
    a.push(4);
 
    cout << "min:" <<a.getMin();
    cout << "top" << a.top();
    a.pop();
    a.pop();
    cout << "min:" << a.getMin();
    cout << "top" << a.top();
 
    system("PAUSE");
}
не могу понять, в чем проблема и как ее решить?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.10.2015, 16:37
Ответы с готовыми решениями:

[NASM] Ошибка при обращению к стеку FPU
Добрый день. Начал писать программу и застопорился на работе со стеком FPU. Вот то, что пока что написал: %include &quot;io.inc&quot; ...

Обращение к стеку
Люди помогите разобрать код: CSEG Segment org 100h assume CS:CSEG Code: mov sp,offset lab ;Заносим в стек адрес метки lab ...

Вопросы по стеку
1) Зачем он, почему нельзя было всё делать в куче? 2) Почему его размер фиксирован, почему он не высчитывается динамически взависимости...

5
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
11.10.2015, 17:34
Лучший ответ Сообщение было отмечено Drulya как решение

Решение

C++
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
#include <iostream>
 
using namespace std;
 
class MinStack
{
public:
 
    MinStack() : head()
    {
    }
 
    void push(int x)
    {
        if(head == NULL)
            head = new node(x);
        else
        {
            node *item = new node(x, head);
            head = item;
        }
    }
 
    void pop()
    {
        node* temp = head;
        if(head)
            head = head->next;
        delete temp;
    }
 
    bool empty() const
    {
        return head == 0;
    }
 
    int top() const
    {
        return head->value;
    }
 
    int getMin() const
    {
        node *item = head;
        int min = item->value;
        item = item->next;
        while(item != NULL)
        {
            if(min > item->value) min = item->value;
            item = item->next;
        }
        return min;
    }
 
    ~MinStack()
    {
        while(!this->empty())
            this->pop();
    }
 
private:
 
    struct node
    {
        int value;
        node *next;
 
        node(int val, node* n = 0) : value(val), next(n)
        {
        }
    };
 
    node *head;
};
 
int main()
{
    MinStack a;
    a.push(3);
    a.push(2);
    a.push(1);
    a.push(4);
 
    cout << "min:" << a.getMin();
    cout << "top" << a.top();
    a.pop();
    a.pop();
    cout << "min:" << a.getMin();
    cout << "top" << a.top();
}
1
7 / 7 / 3
Регистрация: 24.09.2012
Сообщений: 231
11.10.2015, 19:08  [ТС]
Спасибо, но я не могу понять как Ваши изменения повлияли на позитивный результат?
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
11.10.2015, 19:17
главное - наличие конструктора(строки 9-11), которого у вас не было. без него даже в пустом стеке всегда head != NULL (там будет мусор), а значит первая же запись в него будет нелегальна => вылет. ну а далее - устранение утечки памяти и слегка косметики. если хотите, совершенствуйте дальше
0
7 / 7 / 3
Регистрация: 24.09.2012
Сообщений: 231
11.10.2015, 21:02  [ТС]
ясно. а еще такой вопрос, зачем функция empty(), можно просто приравнять к нал или ноль? и что значит конста после объявления функции?
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
11.10.2015, 21:16
Цитата Сообщение от Drulya Посмотреть сообщение
зачем функция empty(), можно просто приравнять к нал или ноль?
просто для наглядности. не нравится - убери и проверяй head на 0. но по мне "не пустой" воспринимается при чтении легче, чем "голова не равна 0"
Цитата Сообщение от Drulya Посмотреть сообщение
что значит конста после объявления функции?
гарантирует, что функция-член не должна изменять состояние объекта(читай в любых книгах по с++)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.10.2015, 21:16
Помогаю со студенческими работами здесь

Подгон очереди к стеку
Доброго времени суток форумчане. Есть код написанный под C++ Builder 6, формирующий каркас приложения, с дополнительными немодальными...

Ликбез по стеку прошу
На скрине 1 пример с известного сайта. Из того куда указывает SP заключаю, что в качестве значения счетчика PC для возврата по RET будет...

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

Функция поиска по стеку
Здравствуйте, помогите написать функцию, которая будет искать, заданный с клавиатуры, элемент стека. Вот сам код с парой стандартных...

Как создать индексатор к стеку
Есть код, помогите создать индексатор на чтение. class Program { static void Main(string args) { ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в конфигурации КА2. Данные берутся из регистра сведений, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru