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

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

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

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

15.12.2009, 00:24. Просмотров 491. Ответов 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.12.2009, 00:24     Уничтожить стек
Посмотрите здесь:

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

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

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

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

Не могу уничтожить все нечетные элементы. При этом использовать динамический массив - 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++
В линейном массиве уничтожить все элементы находящиеся между наибольшим и наименьшим элементом помогите пожалуйсто, очень нужно

Разработать средства динамического сохранения деревьев и уничтожить заданный элемент в бинарном дереве - C++
Разработать средства динамического сохранение деревьев и уничтожить заданный элемент в бинарном дереве. Буду благодарна)

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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;
}
elvizz
3 / 3 / 0
Регистрация: 27.05.2009
Сообщений: 21
15.12.2009, 01:13  [ТС]     Уничтожить стек #3
Сейчас попробую, а собственно ip это что у вас?
Vladimir.
155 / 155 / 10
Регистрация: 24.11.2009
Сообщений: 375
15.12.2009, 01:20     Уничтожить стек #4
iteration_pointer. вспомогательная переменная.
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;
       }
    }
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...

обратите внимание: обязательно нужно уничтожать стек для корректного выхода из программы.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.12.2009, 03:12     Уничтожить стек
Еще ссылки по теме:

Односвязный список: уничтожить н-ный эл-т и на его место поместить эл-т, нр которого хранится в н-ном эл-те - C++
Написать функцию, которая уничтожает n-ный элемент в списке и на его место помещает элемент, номер которого хранится в n-ном элементе....

Напечатать все слова, которые отличаются от последнего, но предварительно надо уничтожить из них все последующие вхождения первой буквы - C++
Дано рядок символів,який складається з окремих слів,відокремлених пробілом. Після останнього слова стоїть крапка. Надрукувати всі слова,які...

Стек - C++
Ребят, объясните один момент если не сложно. Программа делает 3 операции со стеком, запоминает значение в стеке, показывает их и...

Стек - C++
Как сделать чтобы стек заполнялся в диапазоне -50..+50 , размерность вводится с клавиатуры? Помогите пожалуйста добавить в этот код. ...

Стек - C++
Помогите сделать программу.Создать стек с числами в диапазоне от –50 до +50.Подсчитать, сколько элементов стека имеют значение, которое...


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

Или воспользуйтесь поиском по форуму:
elvizz
3 / 3 / 0
Регистрация: 27.05.2009
Сообщений: 21
15.12.2009, 03:12  [ТС]     Уничтожить стек #7
Спасибо Владимир, прям разжевали подробно, все заработало.
Yandex
Объявления
15.12.2009, 03:12     Уничтожить стек
Ответ Создать тему
Опции темы

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