Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
mouserman
0 / 0 / 0
Регистрация: 23.08.2017
Сообщений: 23
Завершенные тесты: 2
1

Удаление элементов стека через массив

10.03.2018, 12:30. Просмотров 129. Ответов 1

Имеется код:

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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#include <iostream>
#include <limits>
#include <conio.h>
using namespace std;
struct stack {
    int inf;
    stack *head, *next;
};
void addElements(stack *&stack1);
void showStack(stack *stack1);
void clearStack(stack *stack1);
int menu();
void input(int &a);
void searchMaxValue(stack *stack1);
int main() {
    stack *stack1 = new stack;
    stack1->head = NULL;
    while (true) {
        switch (menu())
        {
        case 1:
            cout << "Enter the element:" << endl;
            addElements(stack1);
            cout << "Element added" << endl;
            break;
        case 2:
            showStack(stack1);
            break;
        case 3:
            clearStack(stack1);
            break;
        case 4:
            searchMaxValue(stack1);
            break;
        case 0:
            cout << "Press Enter if you want to exit" << endl;
            if (_getch() == 13) {
                delete stack1->head;
                delete stack1->next;
                delete stack1;
                return 0;
            }
            break;
        default:
            cout << "Choose 1-4 or 0" << endl;
            break;
        }
    }
}
void addElements(stack *&stack1) {
    int inf;
    input(inf);
    stack *temp = new stack;
    temp->inf = inf;
    temp->next = stack1->head;
    stack1->head = temp;
}
void showStack(stack *stack1) {
    cout << "Stack:" << endl;
    stack *temp = stack1->head;
    while (temp != NULL) {
        cout << temp->inf << " ";
        temp = temp->next;
    }
    cout << endl;
}
void clearStack(stack *stack1) {
    while (stack1->head != NULL) {
        stack *temp = stack1->head->next;
        delete stack1->head;
        stack1->head = temp;
    }
    cout << "Stack cleared" << endl;
}
int menu() {
    cout << "1 - add element" << endl;
    cout << "2 - show stack" << endl;
    cout << "3 - clear stack" << endl;
    cout << "4 - delete max element" << endl;
    cout << "0 - exit" << endl;
    int choise;
    input(choise);
    return choise;
}
void input(int &a) {
    while (true)
    {
        cin >> a;
        if (cin.good()) {
            break;
        }
        cout << "Wrong input" << endl;
        cin.clear();
        cin.ignore(numeric_limits<streamsize>::max(), '\n');
    }
}
void searchMaxValue(stack *stack1) {
    stack *temp = stack1->head;
    int i = 0, n = 0;
    while (temp != NULL) {
        temp = temp->next;
        n++;
    }
    int *arr = new int[n];
    while (temp != NULL) {
        arr[i] = temp->inf;
        temp = temp->next;
        i++;
    }
    for (int i = 0; i < n; i++) {
        cout << arr[i] << " ";
    }
    cout << endl;
}
Задача - удаление максимального элемента из стека. Еще не доделал, но представляю это следующим образом: переносим весь стек в массив, ищем и удаляем максимальный элемент и возвращаем все назад в стек. Но в функции
C++
1
searchMaxValue(stack *stack1)
почему-то при выводе элементов массива на экран получаю -842150451. Понимаю, что это происходит из-за того, что в массиве ничего не содержится, но не понимаю почему, ибо вроде как элементы в него добавляю. Если есть другие варианты реализации данного задания, буду рад услышать, т.к. кажется, что это все можно и без массива сделать, но не очень это представляю.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.03.2018, 12:30
Ответы с готовыми решениями:

Удаление элементов из стека
Задание: 10. В созданном списке определить количество элементов, имеющих...

Удаление элементов из стека
Удалить из созданного списка(стек) отрицательные элементы.

Удаление элементов из стека
Создать стек содержащий целые числа. Из стека удалить элементы каратные 5....

Удаление элементов стека
В созданном списке определить максимальное значение и удалить его

Удаление элементов из стека
Здравствуйте. Посмотрите, пожалуйста мой код. Это не совсем обычная реализация...

1
nmcf
6515 / 5744 / 2617
Регистрация: 14.04.2014
Сообщений: 24,494
10.03.2018, 12:55 2
Цитата Сообщение от mouserman Посмотреть сообщение
переносим весь стек в массив, ищем и удаляем максимальный элемент и возвращаем все назад в стек
Нет. Ищешь прямо по списку и удаляешь на месте. Эту задачу уже решали сотню раз.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.03.2018, 12:55

Удаление из стека отрицательных элементов
Здравствуйте,необходима помощь со стеками.нужно создать стек и удалить из него...

Не работает реализация стека через массив
Реализация стека через массив но почему то не работает. #include &lt;iostream&gt;...

Запись элементов стека через рекурсию
#include &lt;iostream&gt; #include &lt;stdlib.h&gt; using namespace std; /*НАША...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru