Не выводится первый элемент списка - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Пишу стек. При вводе все ок, в теории все ок, но при выводе он не выводит первый элемент, и закрывает консоль. что не так?
#include <stdio.h>
#include <stdlib.h>
 
typedef struct st          
    { 
      int data;
      struct st *next;   } STACK;
 
  int main()
  {   
      STACK *p,*q;
      int a;
      p=NULL;
 
      for(int i=0; i<3; ++i)                     
      {
          printf("enter element:"); scanf("%d",&a);
          q=(STACK*)malloc(sizeof(STACK));
          q->next=p; p=q;
          q->data=a;
      }
 
       for(int i=0; i<3; ++i)                      
 
      {
          printf("%d",p->data);
          q=p; p=p->next; free(q);
 
      }
  }

Решение задачи: «Не выводится первый элемент списка»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
 
typedef struct st          
    { 
      int data;
      struct st *next;   } STACK;
 
  int main()
  {   
      STACK *p,*q;
      p=NULL;
 
      for(int i=0; i<3; ++i)                     
      {
          q=(STACK*)malloc(sizeof(STACK));
          printf("enter element:"); scanf("%d",&q->data);
          q->next=p;
          p=q;
      }
 
       for(int i=0; i<3; ++i)                      
      {
          printf("%d\n",p->data);
          q=p;
          p=p->next;
          free(q);
      }
      return 0;
  }

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

Выше представлен код на языке C, который реализует простую односвязную стековую структуру данных.

  1. #include <stdio.h> - подключает стандартную библиотеку для работы с файлами ввода-вывода.
  2. #include <stdlib.h> - подключает стандартную библиотеку для работы с памятью.
  3. typedef struct st - объявляет структуру данных с именем STACK, которая содержит один элемент типа int и указатель на следующий элемент структуры (или NULL, если структура пуста).
  4. int main() - функция main(), являющаяся точкой входа в программу.
  5. STACK *p,*q; - объявляет две переменные типа STACK* для работы со связным списком.
  6. p=NULL; - инициализирует переменную p значением NULL, что означает пустой стек.
  7. for(int i=0; i<3; ++i) - цикл, который выполняется три раза.
  8. q=(STACK*)malloc(sizeof(STACK)); - выделяет память под новый элемент связного списка.
  9. printf(enter element:); scanf(%d,&q->data); - запрашивает у пользователя ввод элемента и сохраняет его в новом элементе.
  10. q->next=p; - устанавливает ссылку на следующий элемент в новом элементе.
  11. p=q; - обновляет верхушку стека.
  12. for(int i=0; i<3; ++i) - цикл, который выполняется три раза.
  13. printf(%d\n,p->data); - выводит значение верхушки стека.
  14. q=p; - сохраняет ссылку на верхушку стека.
  15. p=p->next; - обновляет верхушку стека.
  16. free(q); - освобождает память, выделенную под элемент стека.
  17. return 0; - завершает работу программы. Таким образом, код создает стек из трех элементов, вводит значения для каждого элемента, выводит значения стека, а затем освобождает память, выделенную под каждый элемент. Если вы введете значения 1, 2, 3, то выведет 1, 2, 3.

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


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

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

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