Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.09.2011, 14:35   #1
Lodas
Пользователь
 
Регистрация: 20.05.2010
Сообщений: 61
Сообщение Динамический стек с++

Здравствуйте уважаемые программисты. Столкнулся с такой задачей, нужно создать динамический стек без использования классов. Вот что у меня получилось. Чувствую что функция добавления работает неправильно а функция вывода на экран вообще не получилась. Как примерно нужно сделать в этом случае?
Код:
 
#include <vcl.h>
#include <conio.h>
#include <iostream.h>
#pragma hdrstop
 
//-------------------------------------------------------------------
 
#pragma argsused
//------------------------------
struct St//структура со значениями стека
{
 int value;
} ;
//------------------------------
struct Push//структура с количеством и верхушкой стека
{
St  *S;
int kol;
};
//------------------------------

void Add_stek(Push *top,int &a)// функция добавления
{
 St *elem=new St[top->kol];
 St *temp=new St[top->kol];
 elem->value=a;
 top->kol++;
 top->S=elem;
 
 for(int u=0; u<top->kol; u++)
 {
  temp->value=elem->value;
 }
 top->S=temp;
 delete[] elem;
 
 St *elem1=new St[top->kol+1];
 
 for(int u=0; u<top->kol+1; u++)//kol++
 {
  elem1->value=temp->value;
  top->S=elem1;
 }
 elem1->value=a;
 
 }
//------------------------------
void read(Push* top)//функция вывода на экран
{
 for(int i=0; i!=top->kol; i++)
 {
 cout<<"-"<<;
 }
}
//------------------------------
int main(int argc, char* argv[])
{
         int i,a;
         Push* top=new Push;
         top->kol=0;
         do
         {
         cout<<"------------------------------------------\n";
         cout<<"1.Proverka steka\n";
         cout<<"2.Add_stek\n";
         cout<<"3.Vivod_stek\n";
         cout<<"7.Exit\n";
         cout<<"-->";
         cin>>i;
         switch(i)
         {
         case 1:{proverka_stek(top);
                 break;
                }
         case 2:{
                cout<<"\nAdd:\n";
                cout<<"-->";
                cin>>a;
                Add_stek(top, a);
                break;
                 }
         case 3:{
                read(top);
                break;
                }
         }
         }while(i!=7);
        getch();
        return 0;
}
Lodas вне форума Ответить с цитированием
Старый 29.09.2011, 19:02   #2
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
По умолчанию

блин ничего не понял почти тут . всё же проще.
http://www.programmersforum.ru/showthread.php?t=166757
вот тут я в конце выложил код .

да, кстати, количество kol тебе вообще не нужно.
ну то есть можно оставить, но незачем.
а вывод очень просто делается.
Код:
void print(list* cur) { // указатель на голову
while (cur) {
cout << cur->info; // любое инфо
cur=cur->next;
}
}
onewho вне форума Ответить с цитированием
Старый 30.09.2011, 06:14   #3
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

у ТС не стек, а массив
Цитата:
Код:
 St *elem1=new St[top->kol+1];
когда добавляется элмент массив вы создаете новый массив с размером на единицу больше, копируете в него содержимое предыдущего и дописываете в конец новый элемент - это не правильно.
Стек - это разновидность связного списка, т.е. каждый элемент хранит информацию о соседнем узле. Вот тут у вас уже неправильно:
Цитата:
Код:
struct St//структура со значениями стека
{
 int value;
} ;
//------------------------------
struct Push//структура с количеством и верхушкой стека
{
St  *S;
int kol;
};
где же ссылка на соседний элемент?

дарю вам вывод:
Цитата:
Код:
void out( const Node *top ) {
	if( 0 == top )
		return;
	
	std ::cout << top ->data << " ";

	out( top ->p );
}

Последний раз редактировалось Stilet; 30.09.2011 в 08:30.
rrrFer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамический стек динамических очередей Silence255 Помощь студентам 4 29.08.2011 15:12
динамический стек klentan Помощь студентам 0 01.06.2011 19:40
динамический стек. удаление элемента alex(21) Помощь студентам 2 01.11.2010 20:22
создать динамический Стек через класс шаблон Petruha-nsk Общие вопросы C/C++ 1 08.11.2009 12:41