Стек работает некорректно - C (СИ)
Формулировка задачи:
Почему он не прорабатывает до конца?
#include <stdio.h>
#include <stdlib.h>
struct node
{
int value;
node *next;
};
void print(node *p)
{
if(p == NULL) return;
while((p->next) != NULL)
{
printf("%d ", p->value);
p = p->next;
}
printf("\n");
}
node push(node **p, int val)
{
node *t;
t = (node*)malloc(sizeof(struct node));
t->next = *p;
t->value = val;
*p = t;
return **p;
}
node pop(node **p)
{
if(((*p)->next) == NULL)
{
printf("stack pust\n");
*p = NULL;
return **p;
}
else
{
printf("pop... %d\n", (*p)->value);
*p = (*p)->next;
return **p;
}
}
int main()
{
int i;
int w;
node *p;
p = (node*)malloc(sizeof(struct node));
p->next = NULL;
p->value = 0;
for(i = 0; i < 10; i++)
push(&p, i);
print(p);
while(p)
pop(&p);
scanf("%d", &w);
return 0;
}Решение задачи: «Стек работает некорректно»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
struct node
{
int value;
struct node *next;
};
void print(struct node *p)
{
if(p == NULL) return;
while((p->next) != NULL)
{
printf("%d ", p->value);
p = p->next;
}
printf("\n");
}
struct node **push(struct node **p, int val)
{
struct node *t;
t = (struct node*)malloc(sizeof(struct node));
t->next = *p;
t->value = val;
*p = t;
return p;
}
struct node **pop(struct node **p)
{
if(((*p)->next) == NULL)
{
printf("stack pust\n");
*p = NULL;
return p;
}
else
{
printf("pop... %d\n", (*p)->value);
*p = (*p)->next;
return p;
}
}
int main()
{
int i;
int w;
struct node *p;
p = (struct node*)malloc(sizeof(struct node));
p->next = NULL;
p->value = 0;
for(i = 0; i < 10; i++)
push(&p, i+1);
print(p);
while(p)
pop(&p);
scanf("%d", &w);
return 0;
}
Объяснение кода листинга программы
- Включаются заголовочные файлы stdio.h и stdlib.h
- Определяется структура node, которая содержит значение и указатель на следующий элемент
- Определяется функция print, которая выводит значения элементов стека
- Определяется функция push, которая добавляет элемент в стек
- Определяется функция pop, которая удаляет элемент из стека
- В функции main создается экземпляр стека, инициализируется начальным значением
- В цикле создаются и добавляются 10 элементов в стек
- Вызывается функция print для вывода содержимого стека
- В цикле, пока стек не пуст, вызывается функция pop для удаления элемента из стека
- Вводится значение w с помощью функции scanf
- Программа возвращает 0, завершая свою работу