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

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

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

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

15.12.2009, 00:24. Просмотров 469. Ответов 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++ Стек!
В линейном динамическом массиве уничтожить все совершенные числа C++
C++ Стек
Напечатать все слова, которые отличаются от последнего, но предварительно надо уничтожить из них все последующие вхождения первой буквы C++
Односвязный список: уничтожить н-ный эл-т и на его место поместить эл-т, нр которого хранится в н-ном эл-те 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++ Уничтожить вектор
C++ Как уничтожить переменную?
Не могу уничтожить все нечетные элементы. При этом использовать динамический массив C++
C++ Стек
C++ Разработать средства динамического сохранения деревьев и уничтожить заданный элемент в бинарном дереве

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

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

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