Стек работает некорректно - 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, завершая свою работу
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д