Стек работает некорректно - 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;
}

Объяснение кода листинга программы

  1. Включаются заголовочные файлы stdio.h и stdlib.h
  2. Определяется структура node, которая содержит значение и указатель на следующий элемент
  3. Определяется функция print, которая выводит значения элементов стека
  4. Определяется функция push, которая добавляет элемент в стек
  5. Определяется функция pop, которая удаляет элемент из стека
  6. В функции main создается экземпляр стека, инициализируется начальным значением
  7. В цикле создаются и добавляются 10 элементов в стек
  8. Вызывается функция print для вывода содержимого стека
  9. В цикле, пока стек не пуст, вызывается функция pop для удаления элемента из стека
  10. Вводится значение w с помощью функции scanf
  11. Программа возвращает 0, завершая свою работу

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.091 из 5
Похожие ответы