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

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

Войти
Регистрация
Восстановить пароль
 
Algiz
160 / 160 / 13
Регистрация: 23.02.2011
Сообщений: 347
#1

Динамический список - C++

09.08.2011, 01:30. Просмотров 938. Ответов 7
Метки нет (Все метки)

Пытаюсь реализовать стек. Не работает, вылетает при вызове процедуры pop. Я запутался. Помогите.
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
struct _stack
{
    int num;
    _stack* next;
};
 
void push(_stack** stack, int number)
{
    _stack* el=new _stack;
    el->num=number;
    el->next=*stack;
    stack=⪙
}
 
void pop(_stack** stack,int* num)
{
    _stack* temp=(*stack)->next;
    *num=(*stack)->num;
    delete stack;
    stack=&temp;
    
}
 
int main(int argc, char** argv)
{
    _stack* head=new _stack;
    int num=1;
    head->next=NULL;
    head->num=0;
    while (num!=0){ 
        scanf("%d",&num);
        push(&head,num);
    }
    while (head->next!=NULL){
        pop(&head,&num);
        printf("%d\n",num);
    }
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.08.2011, 01:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Динамический список (C++):

Динамический список - C++
Ребят нужна помощь создал список, вывод его на экран. Теперь нужно реализовать дополнение списка после элемента с заданным номером,...

Динамический список - C++
Здравствуйте. получил задание создать динамический список и методы работы со списком создать список, удалить список, добавить в список,...

Динамический список - C++
Составить программу которая выполняет следующие действия: 1. Создает динамический список 2. Выполняет поиск в списке 3. Вывод на...

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

Динамический список - C++
пожалуйста если можно подскажите как создать динамический список в классе C++ (если можно с примером хотя бы маленьким)

динамический список - C++
Всем здраствуйте . В проге надо создать динамический список и реализовать всякие функции для редактирования и преобразования элементов...

7
Jupiter
Каратель
Эксперт С++
6556 / 3977 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
09.08.2011, 01:50 #2
C++
1
2
3
4
5
6
7
8
void pop(_stack** stack,int* num)
{
    _stack* temp = (*stack)->next;
    *num = (*stack)->num;
    delete *stack; //<-
    stack = &temp;
        
}
0
Algiz
160 / 160 / 13
Регистрация: 23.02.2011
Сообщений: 347
09.08.2011, 02:07  [ТС] #3
Maxwe11, не помогло.
0
xAtom
915 / 740 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
09.08.2011, 03:41 #4
Даже мельком посмотрел увидел ошибки, вот накидал рабочий вариант.
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
#include <iostream>
using namespace std;
 
struct _stack {
  int      num;
  _stack*  next;
};
 
void push(_stack** st, int num) {
  _stack* ns = new _stack();
  ns->next   = *st;
  ns->num   = num;
  *st   = ns;
}
 
void pop(_stack** st, int*  num) {
  _stack* tmp = *st;
  *num   = tmp->num;
  *st   = (*st)->next;
  delete tmp;
  tmp   = NULL;
}
 
int main(void){
 
   _stack*  stk = NULL;
   int      num = 0;
 
   while(cin >> num && num != 0)
       push(&stk, num);
 
   while(stk) {
       pop(&stk, &num);
       cout << '\t' << num << endl;
   }
   stk = NULL;
 
   system("pause");
   return 0;
}
1
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
09.08.2011, 04:22 #5
Цитата Сообщение от Maxwe11
C++
1
2
3
4
5
6
7
8
void pop(_stack** stack,int* num)
{
    _stack* temp = (*stack)->next;
    *num = (*stack)->num;
    delete *stack; //<-
    stack = &temp;
        
}
Цитата Сообщение от Algiz
Maxwe11, не помогло.
C++
1
2
3
4
5
6
7
8
void pop(_stack **stack, int *num)
{
    _stack *temp = (*stack)->next;
    
    *num = (*stack)->num;
    delete *stack; //<-
    *stack = temp;
}
0
mac_alleb
7 / 7 / 0
Регистрация: 05.08.2011
Сообщений: 54
09.08.2011, 05:24 #6
Судя по всему, ошибка не в процедуре pop, а в процедуре push. В строке 2 должно быть наоборот
*stack->next = e1
Кроме того, перед применением процедуры push не худо бы найти начало списка, а это означает,
что список должен быть двусторонним (т.е. содержать еще и элемент previous).
0
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
09.08.2011, 06:06 #7
Цитата Сообщение от mac_alleb
Судя по всему, ошибка не в процедуре pop
функция pop() у него неправильная

а функция push() неправильно сохраняет указатель
C++
1
2
3
4
5
6
7
8
9
void push(_stack **stack, int number)
{
    _stack *el = new _stack;
    
    el->num = number;
    el->next = *stack;
    *stack = el;    
    //stack=&el;
}
Добавлено через 4 минуты
и из названия типа надо убрать подчёркивание
подчёркивания делаются у служебных типов, которые программист потом не использует
они делаются для типов, которые используются в программе внутренне

C++
1
_stack*  stk = NULL;
вот ты сделал этот стек - использовал служебный тип
такого не должно быть
0
Olga_
842 / 184 / 16
Регистрация: 01.08.2011
Сообщений: 502
09.08.2011, 08:14 #8
После минимальных исправлений, рабочий код:

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
struct _stack
{
        int num;
        _stack* next;
};
 
void push(_stack** stack, int number)
{
        _stack* el=new _stack;
        el->num=number;
        el->next=*stack;
        *stack=el;
}
 
void pop(_stack** stack,int* num)
{
        _stack* temp=(*stack)->next;
        *num=(*stack)->num;
        delete *stack;
        *stack = temp;
 
}
 
int main(int argc, char** argv)
{
        _stack* head=new _stack;
        int num=1;
        head->next=NULL;
        head->num=0;
        while (num!=0){
                scanf("%d",&num);
                push(&head,num);
        }
        while (head->next!=NULL){
                pop(&head,&num);
                printf("%d\n",num);
        }
 
        return 0;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.08.2011, 08:14
Привет! Вот еще темы с ответами:

Динамический список - C++
Вот есть класс..совсем не замысловатый! //=============================================================================...

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

Динамический список - C++
помогите пожалуйста решить задачу: Динамический список (2 класса: элемент списка и список, которые находятся в отношении агрегации) ...

Динамический список - C++
Камнем преткновения стали динамические списки. Никак понять не могу. Уже спрашивал, но в основном используют встроенные функции. А я не...


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

Или воспользуйтесь поиском по форуму:
8
Yandex
Объявления
09.08.2011, 08:14
Ответ Создать тему
Опции темы

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