Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Образовательный студенческий форум _ Информатика / Программирование _ Stack

Автор: Tur 11.10.2009, 17:06

dribble.gif Помогите! Не могу найти ошибку
Что-то с добавлением элементов,т.к. при выводе выводится только последний(повторяется взависимости от кол-ва введенных эл-тов)
Вот код

#include <iostream>
#include <conio.h>
using namespace std;
struct stack
{
int *dat;
stack *prev;
}*top;
stack *push (stack *to,int *data)
{
stack *uk=new stack;
uk->prev = to;
uk->dat = data;
return uk;
};
stack *pop(stack *to)
{int *inf;

inf=to->dat;
cout<<*inf;
stack *uk=to;
to = to->prev;
delete uk;
return to;
};
void *print(stack *to)
{
int *d;
stack *uk=to;
while (uk!=NULL)
{
d=uk->dat;
uk=uk->prev;
cout<<*d<<endl;
}
return d;
};

int main ()
{
int k;
int a;
int q;
top=NULL;
t:cout<<"Vvedite: 1-add;2-del;3-print"<<endl;cin>>k;
switch(k)
{
case 1:{
cout<<"Vvedite element"<<endl;
cin>>a;
top=push(top,&a);};break;
case 2:if (top==NULL) {cout<<"Stek pust"<<endl;getch();break;}
else top=pop(top);break;
case 3:if (top==NULL) {cout<<"Stek pust"<<endl;getch();break;} else print(top);
break;
}
cout<<"Prodolgim"<<endl;cin>>q;
if (q==2) goto t;
return 0;
}

Автор: Vago 12.10.2009, 6:52

Вообще-то, в информационной части элемента стека (элемента списка, узла дерева,..) принято хранить данные. Сами данные, а не адрес буфера ввода.

Автор: Tur 12.10.2009, 19:20

Спасибо за помощь! Попробую!

Автор: Vago 12.10.2009, 20:13

Удачи! Надеюсь, поняли, что сейчас у Вас uk->dat всех элементов стека указывают в одно место. На a. Ввели новое a и сразу потеряли предыдущее, потому что на стек его-то на самом деле не помещали...

Ещё по мелочам - пользователю непонятно, что вводить, чтобы продолжить, а что - чтобы закончить. Ну и этот goto... "Поручик!.. При дамах!.. Как можно?!.." wink.gif Есть же цикл do ... while ...

Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)