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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Составить программу имитирующую пользовательский интерфейс http://www.cyberforum.ru/cpp-beginners/thread883614.html
Составить программу имитирующую пользовательский интерфейс с использованием меню, переключателей и радио кнопок.
C++ Нарисовать блок схему по готовой пограмме #include <iostream> #include <ctime> using namespace std; int main() { setlocale(LC_ALL, "Russian"); //устанавливаем русский язык в консоли srand (time(NULL)); http://www.cyberforum.ru/cpp-beginners/thread883601.html
C++ Метод конечных разностей для краевой задачи
Помогите пожалуйста. Надо написать программу, которая решает краевую задачу для ОДУ 2 порядка методом конечных разностей. Никак не могу разобраться, подскажите хотя бы, с чего начать? Или может у кого-то есть уже готовая, поделитесь, если не жалко.. Добавлено через 2 часа 55 минут Ну что, никто не может подсказать чтоли?
Дан файл, содержащий сведения об игрушках (название, стоимость, возрастные границы). Получить сведения: C++
народ помогите пожалуйста написать программу на с++ Дан файл , содержащий сведения об игрушках: указывается название игрушки (например, кукла, кубики, мяч, конструктор и т.д.), ее стоимость в копейках и возрастные границы детей, для которых игрушка предназначена (например, для детей от двух до пяти лет). Получить следующие сведения: а) названия игрушек, цена которых не превышает 4 руб. и...
C++ Создание таблиц меток http://www.cyberforum.ru/cpp-beginners/thread883548.html
Здравствуйте.Надо составить программу таблиц меток из текста программы. В тексте программы есть метки и составляется программа в которой для каждой метки указывается название,номер строки,имя процедуры,в которую она входит.Помогите плиз
C++ Вычислить среднее геометрическое пяти вводимых чисел Вычислить среднее геометрическое пяти вводимых чисел подробнее

Показать сообщение отдельно
Nullik
 Аватар для Nullik
43 / 12 / 1
Регистрация: 13.03.2013
Сообщений: 297
Завершенные тесты: 1
29.05.2013, 15:22     Объясните, как происходит вывод элемента из "стека", списки\структуры
Таааак, разобравшись со списками, найдя неплохой стек, реализацию через списки, динамический стек, возник вопрос по поводу вывода:
Т.е., если мы будем вводить числа: 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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 20:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru