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

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

Войти
Регистрация
Восстановить пароль
 
elvizz
3 / 3 / 0
Регистрация: 27.05.2009
Сообщений: 21
#1

Уничтожить стек - C++

15.12.2009, 00:24. Просмотров 504. Ответов 6
Метки нет (Все метки)

Не могу сделать уничтожение стека, стек по шаблону делал:
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
144
145
146
#include <vcl.h>
#pragma hdrstop
#include <iostream.h>
#pragma argsused
#include <iostream>
#include <windows.h>
using namespace std;
    class Stek
{
public:
    int number;
    Stek* last;
};
void vibor (const char*);
void main()
{   Stek*ptrLast=NULL;
    Stek* top=NULL;
    short action= -1;
    int numb = -1;
 
     while(1)
     {
      vibor("1.Построение пустого стека\n");
      vibor("2.Добавление элемента\n");
      vibor("3.Удаление элемента\n");
      vibor("4.Уничтожение стека\n");
      vibor("5.Просмотр стека\n");
      vibor("0.ВЫХОД\n\n");
      vibor("Ваш выбор: ");
      cin>>action;
 
      if (action == 0)
      {
        system("CLS");
        break;
      }
 
      if (action == 1)
      system("CLS");
      {
      Stek* ptr = new Stek;
      ptr->number = numb;
      }
 
      if (action == 2)
      {
       system("CLS");
       int numb = -1;
       vibor("Введите число: ");
       cin>>numb;
       Stek* ptr = new Stek;
       ptr->number = numb;
       if (top == NULL)
       {
        ptr->last = NULL;
        top = ptr;
        ptrLast = ptr;
        system("CLS");
        continue;
       }
        top = ptr;
        ptr->last = ptrLast;
        ptrLast = ptr;
        system("CLS");
        continue;
 
      }
 
      if (action == 3)
      {
       system("CLS");
       Stek* ptrDelete = NULL;
       if (top == NULL)
       {
        vibor("\t!!! Стек пуст !!!\n\n");
        system("PAUSE");
        system("CLS");
        continue;
       }
       ptrDelete = top;
       if (ptrDelete->last == NULL)
       {
        top = NULL;
        delete ptrDelete;
        system("CLS");
        continue;
       }
       top = ptrDelete->last;
       ptrLast = top;
       delete ptrDelete;
       continue;
 
      }
 
      if (action == 4)
      {
        
 
      }
 
      if (action == 5)
      {
      system("CLS");
      Stek* ptr = NULL;
      if (top == NULL)
      {
      vibor("\t!!! Стек пуст !!!\n\n");
      system("PAUSE");
      system("CLS");
      continue;
      }
      vibor("* * * * * Содержимое стека * * * * *\n\n");
      ptr = top;
      while (1)
      {
      cout<<ptr->number<<endl;
      if (ptr->last == NULL)
      {
      system("PAUSE");
      system("CLS");
      break;
      }
      ptr = ptr->last;
            }
 
      }
 
 
      if (action > 5)
      {
      system("CLS");
      vibor("\t!!! Неверно. Повоторите ввод !!!\n\n");
      system("PAUSE");
      system("CLS");
      continue;
      }
     }
 
 }
 
void vibor(const char* vib)
{
 char word[100];
 CharToOem(vib, word);
 cout<<word;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.12.2009, 00:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Уничтожить стек (C++):

Используя стек, описать функцию проверяющую, является ли стек пустым - C++
Используя стек, описать функцию проверяющую, является ли стек пустым

Программа добавляет введенный массив 5*5 в стек и выводит полученный стек двумя столбцами - C++
Программа добавляет введенный массив 5*5 в стек и выводит полученный стек двумя столбцами #include &lt;iostream&gt; #include &lt;stdlib.h&gt; ...

Уничтожить вектор - C++
После работы остается вектор с ненужными более данными. Нужно его удалить совсем. Может какая функция есть?

Переменные в стеке. Где хранятся? Как обрабатываются? Есть ли программный стек или только стек процессора? - C++
Есть у меня пробелы в познаниях, хотел бы их устранить. 1. Что такое стек в самом языке С++ ? 2. В какой памяти он хранится и почему...

Как уничтожить переменную? - C++
как уничтожить переменную?помогите. и перейдите сюда(буду благодарен):cut

В линейном динамическом массиве уничтожить все совершенные числа - C++
В линейном динамическом массиве уничтожить все совершенные числа. Совершенное число (сумма делителей = самому числу) Например 6 = 1 +2 +3 ...

6
Vladimir.
155 / 155 / 10
Регистрация: 24.11.2009
Сообщений: 375
15.12.2009, 01:09 #2
так пробывали??
C++
1
2
3
4
5
6
7
8
9
10
11
Stack* ip = top;
if (ip != NULL)
{
       while(ip->last != NULL)
       {
                ip = ip->last;
                delete top;
                top = ip;
        }
        delete top;
}
0
elvizz
3 / 3 / 0
Регистрация: 27.05.2009
Сообщений: 21
15.12.2009, 01:13  [ТС] #3
Сейчас попробую, а собственно ip это что у вас?
0
Vladimir.
155 / 155 / 10
Регистрация: 24.11.2009
Сообщений: 375
15.12.2009, 01:20 #4
iteration_pointer. вспомогательная переменная.
0
elvizz
3 / 3 / 0
Регистрация: 27.05.2009
Сообщений: 21
15.12.2009, 01:53  [ТС] #5
Что-то оно некорректно получается, вроди как и удаляеи стек, но при просмотре стека какоето непонятное число и ошибку кидает, может я чтото не так делал, закинул ваш пример в 4 пункт проги:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
if (action == 4)
      {
        Stek* ip = top;
        if (ip != NULL)
       {
       while(ip->last != NULL)
       {
         ip = ip->last;
         delete top;
         top = ip;
        }
        delete top;
       }
    }
0
Vladimir.
155 / 155 / 10
Регистрация: 24.11.2009
Сообщений: 375
15.12.2009, 02:28 #6
Что-то оно некорректно получается, вроди как и удаляеи стек, но при просмотре стека какоето непонятное число и ошибку кидает, может я чтото не так делал, закинул ваш пример в 4 пункт...
это происходит оттого, что при просмотре стека, сам стек уже уничтожен (то есть он не пуст, его вообще не существует) указатель обращается к какому-то участку памяти и тащит оттуда всякий мусор...
Подразумевается, что после уничтожения стека будет выход из программы.

что сделать:
после delete top; добавить:
C++
1
2
3
4
top =NULL; 
ptrLast=NULL;
int numb = -1;
continue;
почитать об операторах new и delete...

обратите внимание: обязательно нужно уничтожать стек для корректного выхода из программы.
1
elvizz
3 / 3 / 0
Регистрация: 27.05.2009
Сообщений: 21
15.12.2009, 03:12  [ТС] #7
Спасибо Владимир, прям разжевали подробно, все заработало.
0
15.12.2009, 03:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.12.2009, 03:12
Привет! Вот еще темы с ответами:

Уничтожить все элементы больше среднего арифметического элементов массива - C++
1. Уничтожить все элементы больше среднего арифметического элементов массива. 2. Сдвинуть циклически на M элементов вправо.

при работе рекурсивной функции заканчивается стек и программа соответственно; как сделать так, чтобы она писала "стек закончился"? - C++
Сабж g++ 4.5.0

Не могу уничтожить все нечетные элементы. При этом использовать динамический массив - C++
#include &lt;iostream&gt; #include &lt;ctime&gt; #include &lt;windows.h&gt; using namespace std; void Reshape(int *&amp;Array, int &amp;Size){ int...

В линейном массиве уничтожить все элементы находящиеся мие наибольшим и наименьшим элементом - C++
В линейном массиве уничтожить все элементы находящиеся между наибольшим и наименьшим элементом помогите пожалуйсто, очень нужно


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

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

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