Не выводится первый элемент списка - 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.