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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.11.2008, 23:05   #1
snusnu
Новичок
Джуниор
 
Регистрация: 13.11.2008
Сообщений: 2
По умолчанию реализация стека через односвязный список

вот что я накалякал...
должно по идее выводить первый элемент стека (ну лн в принципе пока тут и единственный), но вылетает либо 0 либо адрес памяти ли ещё что то)) не могу понять в чем дело..помогите, пожалуйста!
п.с. компилятор BC31
Код:
#include <stdio.h>
#include <iostream.h>
#include <math.h>
#include <conio.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>

//stek
struct stek {int value; struct stek *next;};

//pushing
stek *pushing(stek *st, int val){
 stek *f, *g = new stek;
  g->value = val;
  g->next = NULL;
  if (st->next == NULL) {st = g;}
  else{
   for (f = st; f->next != 0; f = f->next){
	f->next = g;
	}
   }
 return st;
  }

//popping
stek *popping(stek *st){
 stek *s, *q = new stek;
 int i;
 i = 0;
 if (st == NULL) {cout<<"\n Error: stek pust";}
 else {
  for (q = st; i != 1; q = q->next){
   if (q->next == NULL) {
    i = 1;
    s = q;
    delete st;
    }
   else {break;}
  }
 }
 return s;
}

////////////////
//prosmotr spiska
void scan (stek *st) // zagolovok spiska
{
	stek *p = new stek;
for (p = st; p != NULL; p = p->next)
	 printf ("%d ", *p);
		printf ("\n");
}
////////////////

void main(){
 int n;
 stek *ST = new stek;
 cout<<"\nEnter pls. : ";
 cin>>n;
 pushing(ST, n);
 cout<<"\n N ="<<n;
 scan(ST);

}
snusnu вне форума Ответить с цитированием
Старый 14.11.2008, 00:27   #2
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,619
По умолчанию

Помоему ты неправильно добавляешь в стек. В стеке добавление идет в начало. Тоесть вот так
Код:
void push(stack *top)
{
     stack *tmp=new stack();
         int value;
         cout<<"Enter the value: ";
         cin>>value;
         tmp->value=value;
     if(!top)
         top=tmp;
     else
     {
         tmp->next=top;
         top=tmp;
     }
}
Вот так вот. Почитай в инете про структуры данных.
MaTBeu вне форума Ответить с цитированием
Старый 14.11.2008, 02:10   #3
snusnu
Новичок
Джуниор
 
Регистрация: 13.11.2008
Сообщений: 2
По умолчанию

Цитата:
Сообщение от MaTBeu Посмотреть сообщение
Помоему ты неправильно добавляешь в стек. В стеке добавление идет в начало. Тоесть вот так
Код:
void push(stack *top)
{
     stack *tmp=new stack();
         int value;
         cout<<"Enter the value: ";
         cin>>value;
         tmp->value=value;
     if(!top)
         top=tmp;
     else
     {
         tmp->next=top;
         top=tmp;
     }
}
Вот так вот. Почитай в инете про структуры данных.
использовал ваш пример..стек к сожалению так и не заполняется элементами((
snusnu вне форума Ответить с цитированием
Старый 15.11.2008, 00:24   #4
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,619
По умолчанию

Ну тогда ты не так что-то делаешь. Блин, тебе что, так тяжело скачать книгу по структурам данных и посмотреть простейший пример стека на С++?
Я тебе это говорю, потому, что мой пример на 100% рабочий.
MaTBeu вне форума Ответить с цитированием
Старый 06.12.2008, 12:40   #5
(CTUDEHT)
Новичок
Джуниор
 
Регистрация: 06.12.2008
Сообщений: 1
По умолчанию

А как это же реализовать в виде шаблонного класса?
(CTUDEHT) вне форума Ответить с цитированием
Старый 06.12.2008, 13:13   #6
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,619
По умолчанию

Тема: "Литература по С++".
Книга: Х.Дейтел и П.Дейтел "Как программировать на С++"
Глава 17 "Структуры данных"
Там есть реализация шаблонного стека.
MaTBeu вне форума Ответить с цитированием
Старый 06.12.2008, 18:28   #7
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

а вот так попробуй
Код:
void scan (stek *st) // zagolovok spiska
{
stek *p = new stek;
for (p = st; !p; p=p->next)
{
  printf ("%d ", *p);
  printf ("\n");
}
}
counter вне форума Ответить с цитированием
Старый 06.04.2014, 23:59   #8
Swamp_Dok
Новичок
Джуниор
 
Регистрация: 06.04.2014
Сообщений: 1
По умолчанию Стек через список

Автор, если уж ты решил реализовать стек в С++, то правильнее делать это через класс, ибо С++ язык ООП в первую очередь.
Вот статейка про стек через односвязный список классом - http://73-it.ru/programmirovanie/str...kh/stek-3.html
Swamp_Dok вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Линейный односвязный список Absinth Помощь студентам 4 11.11.2008 20:29
КОЛЬЦЕВОЙ ОДНОСВЯЗНЫЙ СПИСОК __FIRST__ Помощь студентам 0 01.11.2008 17:16
Помогите пож-та.Паскаль. Линейный односвязный список (ЛОС) tonich Паскаль, Turbo Pascal, PascalABC.NET 1 25.02.2008 21:55
C: односвязный список в файле getfear Помощь студентам 7 04.01.2008 19:26
Кольцевой односвязный список jukk Общие вопросы Delphi 3 22.12.2006 12:10