Не выводится первый элемент списка - 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, который реализует простую односвязную стековую структуру данных.
#include <stdio.h>
- подключает стандартную библиотеку для работы с файлами ввода-вывода.#include <stdlib.h>
- подключает стандартную библиотеку для работы с памятью.typedef struct st
- объявляет структуру данных с именемSTACK
, которая содержит один элемент типаint
и указатель на следующий элемент структуры (илиNULL
, если структура пуста).int main()
- функцияmain()
, являющаяся точкой входа в программу.STACK *p,*q;
- объявляет две переменные типаSTACK*
для работы со связным списком.p=NULL;
- инициализирует переменную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;
- завершает работу программы. Таким образом, код создает стек из трех элементов, вводит значения для каждого элемента, выводит значения стека, а затем освобождает память, выделенную под каждый элемент. Если вы введете значения 1, 2, 3, то выведет 1, 2, 3.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д