Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
165 / 164 / 23
Регистрация: 23.02.2011
Сообщений: 347
1

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

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

Author24 — интернет-сервис помощи студентам
Пытаюсь реализовать стек. Не работает, вылетает при вызове процедуры 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.08.2011, 01:30
Ответы с готовыми решениями:

Динамический список
помогите пожалуйста решить задачу: Динамический список (2 класса: элемент списка и список,...

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

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

Динамический список
Камнем преткновения стали динамические списки. Никак понять не могу. Уже спрашивал, но в основном...

7
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
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
165 / 164 / 23
Регистрация: 23.02.2011
Сообщений: 347
09.08.2011, 02:07  [ТС] 3
Maxwe11, не помогло.
0
935 / 760 / 299
Регистрация: 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
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
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
9 / 8 / 1
Регистрация: 05.08.2011
Сообщений: 56
09.08.2011, 05:24 6
Судя по всему, ошибка не в процедуре pop, а в процедуре push. В строке 2 должно быть наоборот
*stack->next = e1
Кроме того, перед применением процедуры push не худо бы найти начало списка, а это означает,
что список должен быть двусторонним (т.е. содержать еще и элемент previous).
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
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
848 / 190 / 18
Регистрация: 01.08.2011
Сообщений: 505
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
09.08.2011, 08:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.08.2011, 08:14
Помогаю со студенческими работами здесь

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

Динамический список
пожалуйста если можно подскажите как создать динамический список в классе C++ (если можно с...

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

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


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru