Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Nullik
43 / 12 / 1
Регистрация: 13.03.2013
Сообщений: 300
Завершенные тесты: 1
#1

Объясните, как происходит вывод элемента из "стека", списки\структуры - C++

29.05.2013, 15:22. Просмотров 438. Ответов 2
Метки нет (Все метки)

Таааак, разобравшись со списками, найдя неплохой стек, реализацию через списки, динамический стек, возник вопрос по поводу вывода:
Т.е., если мы будем вводить числа: 23,24,25,26 и сделаем запрос на вывод всего стека. то вывод будет 26,25,24,23.
Почему именно так? Почему не начинается с головы? Как такое случилось, что идём в обратную сторону? Пожалуйста, подскажите как это работает.


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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#include "stdafx.h"
#include <iostream>
 
using namespace std;
 
struct Stack
{
    int info; // some info
    Stack *next;
};
 
Stack* push(Stack *tos, int info);
Stack* pop(Stack *tos);
void print(Stack *tos);
Stack* deleteAll(Stack *tos);
 
 
void main()
{
    setlocale(0,"");
    int a,info;
 
    Stack *head=NULL;
 
    
    
    
    do
    {
        cout << "Что будем делать со стеком?\n1 - Добавим элемент в стек.\n2 - Удалим элемент из стека.\n3 - Выведем стек на экран.\n0 - Выход.\n\n";
        cin >> a;
        switch (a) 
        {
            case 1: 
            {
                cin >> info;
                head=push(head,info);
                break;
            }
            case 2: 
            {
                 head=pop(head);
                break;
            }
            case 3: 
            {
                print(head);
                break;
            }
            default:
            {
                system("cls");
                cout << "ERROR!";
                break;
            }
        }
 
    cout << "\n\n";
    system("PAUSE");
    system("cls");
    }
    while (a!=0);
 
    cin.get();
    cin.get();
}
 
 
Stack* push(Stack *tos, int info)
{
    // передаем указатель на голову стека tos 
    Stack *newCell;
 
    if (tos == NULL) // если ничего нет (стек пуст)
    {
        tos = new Stack();// захватываем память под новый элемент.
        tos->next = NULL; 
        tos->info= info; 
        return tos; // и возвращаем голову.
    }
 
    // иначе
    newCell = new Stack(); // захватываем память под новый элемент
    newCell->next = tos; //  указателю next присваиваем адрес уже имеющегося стека (новый элемент становится головой)
    newCell->info = info;
 
    return newCell; // и возвращаем новую голову стека.
    
}
 
 
Stack* pop(Stack *tos)
{
    Stack *cell;
 
    if (tos == NULL) // если стек пуст
    {
        cout << "   Stask is empty" << endl;
        return tos;
    }
    cell = tos->next; // сохраняем в переменную cell следующий, после головы элемент.
 
    delete tos; // удаляем голову стека
 
    return cell; // возвращам сell - новая голова стека.
}
 
 
void print(Stack *tos)
{
    Stack *current; // указатель на текущую ячейку
 
    if (tos == NULL)
    {
        cout << "   Stask is empty" << endl;
        return;
    }
 
    current = tos;
 
    while (current != NULL) // пока не конец стека (не достигнуто NULL)
    {
        cout << "   " << current->info << endl; //  выводим информацию
        current = current->next;  //  переходим к след элементу
    }
}
 
 
Stack* deleteAll(Stack *tos)
{
    Stack *current = tos;
 
    while (current != NULL)
    {
        current  = tos->next;
 
        delete tos; //  аналогично выводу, только удаляем каждый элемент
 
        tos = current;
    }
 
    return current;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.05.2013, 15:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Объясните, как происходит вывод элемента из "стека", списки\структуры (C++):

Объясните программу по теме "Структуры" - C++
Добрый день. Необходима ваша помощь в решении задачи по теме &quot;Структуры&quot;. Есть структура, элементы которой мы заполняем данными о людях. У...

Объясните программу по теме "Структуры" - C++
Добрый день. Необходима ваша помощь в решении задачи по теме &quot;Структуры&quot;. Есть структура, элементы которой мы заполняем данными о людях. Не...

Чтения структуры из файла (описать структуру с именем "ORDER": "счет плательщика"; "счет получателя"; "сумма, переводится банковской операцией") - C++
Описать структуру с именем &quot;ORDER&quot;, содержащий следующие поля: &quot;Счет плательщика&quot;; &quot;Счет получателя&quot;; &quot;Сумма, переводится банковской...

Написать программу что меняло слово "кукушка" на "груша", с помощью стека - C++
Написать программу что меняло слово кукушка на груша , с помощью стека(1 программа) и очередь(2 программа) Помогите пожалуйста очень...

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно" - C++
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить погоду &quot;тепло&quot;, &quot;жарко&quot;, &quot;холодно&quot;, &quot;очень холодно&quot;. Я так...

Структуры данных "Книги", вывод нужной информации - C++
Всем привет. Есть проблемка-надо написать структуру данных про книги в библиотеке - год издан, автор и т.п С этим проблем нет...Проблема...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BAADF00D
Заблокирован
29.05.2013, 15:32 #2
Цитата Сообщение от Nullik Посмотреть сообщение
Почему именно так?
это суть стека. То же что автоматный магазин. Закладываешь патроны, а потом извлекаешь (стреляешь) начиная с последнего заложенного.

Цитата Сообщение от Nullik Посмотреть сообщение
Почему не начинается с головы?
Именно что с головы. По аналогии с оружейным магазином -- голова это последний заложенный патрон. При выстреле из головы извлекается патрон и так до тех пор пока стек магазин не пуст.
Nullik
43 / 12 / 1
Регистрация: 13.03.2013
Сообщений: 300
Завершенные тесты: 1
29.05.2013, 16:57  [ТС] #3
BAADF00D, хм, а я думала, что это уже другие указатели, типа идут они в обратном порядке. Т.е., односвязный и двусвязный список.))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.05.2013, 16:57
Привет! Вот еще темы с ответами:

Что происходит когда например "char* g="fdgag";"? - C++
Сабж. Я понял создается динамический массив с помощью malloc() и поэтому к нему не обратится таким образом: g. Я прав?

Вывод на экран "структуры" - C++
Здравствуйте, Друзья. Вот код: #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;string.h&gt; #include &lt;stdio.h&gt; using namespace...

Создание структуры "префиксное дерево". Ошибка "Access violation writing location". - C++
Есть структура данных - бор или префиксное дерево. class trie { char value; // символ узла trie** pointers; // ссылки на...

Заполнить структуры "Прямоугольник" и "Треугольник" и найти площади и периметры фигур - C++
Доброго времени суток! Начали изучать структуры, сижу над задачкой, да вот не идет она у меня. Нужно создать две структуры : -...


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

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

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