Прокомментировать код заполнения списка - C (СИ)
Формулировка задачи:
Помогите, пожалуйста, разобраться со списками. Завал с ними был ещё в мае, после лета в голове вообще одна каша, и никаких умных мыслей. вот пример простой задачи, прошу, чтобы описали, что именно творится в каждой строчке. ну или хотя бы в заполнении списка
#include <stdio.h> #include <stdlib.h> #include <conio.h> typedef struct st { char ch; struct st *next; } stack; main() { stack *p,*q; char a; p=NULL; system (“CLS”); // заполнение стека do { a=getchar(); q=(stack *)malloc(sizeof(stack)); q->next=p; p=q; q->ch=a; } while(a!='.'); // печать стека c освобождением памяти do { p=q->next; free(q); q=p; printf("%c",p->ch); } while(p->next!=NULL); getch(); return 0; }
Решение задачи: «Прокомментировать код заполнения списка»
textual
Листинг программы
typedef struct st { // одна ячейка списка char ch; // хранит один байт struct st *next; // и ссылку на предыдущую ячейку } stack; stack *q, *p; char a; p=NULL; // заполнение стека do { q=(stack *)malloc(sizeof(stack)); // выделяется память под ячейку q->ch= getchar(); // ячейка заполняется символом из stdin q->next=p; // и ссылкой на предыдущую ячейку (для первой ячейки - NULL) p=q; } while(q->ch!='.'); // полледним в стек заносится символ '.'
Объяснение кода листинга программы
- В первой строке объявляется структура данных
st
для представления одной ячейки в списке. Она содержит один символ и указатель на следующую ячейку. - Затем объявляются две переменные типа
stack
-p
иq
, а также переменнаяa
типаchar
. Переменнаяp
инициализируется значением NULL. - В цикле
do-while
выделяется память под новую ячейкуq
, заполняется её полеch
символом, считываемым из стандартного ввода, и создается ссылка на предыдущую ячейкуp
. Значениеp
обновляется, указывая на новую ячейкуq
. Цикл продолжается, пока не будет считан символ '.' - После окончания цикла, последняя ячейка списка указывает на саму себя, так как
p
не обновляется, когда считывается символ '.'
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д