Объясните как работает функция добавления в односвязный список - C (СИ)
Формулировка задачи:
Программа полностью рабочая. Я просто не могу понять 1 момент в функции показанной ниже.
часть файла .h
вот функция в файле .c реализующая добавления элементов в список
Опишите пожалуйста что происходит при создании первых 3 элементов в списке.
З.Ы. Я не понимаю каким образом происходит присвоение адреса указателю plist->head->next
struct film { wchar_t title[TSIZE]; int rating; }; // определение обобщенного типа typedef struct film Item; typedef struct node { Item item; struct node *next; } Node; typedef struct list { Node *head; Node *end; } List;
bool AddItem(Item item, List *plist) { Node *pnew; // создание указателя на 1 запись в списке(или на 1 узел) pnew = (Node*) malloc(sizeof(Node)); if(pnew == NULL) return false; // выход из фукнции при неудаче CopyToNode(item, pnew); // функция копирует ввод пользователя item в узел pnew pnew->next = NULL; // указатель на следующий узел обнулен if(plist->head && plist->end) // если первый узел и последний имеют записи работает { plist->end->next = pnew; plist->end = pnew; } else plist->head = plist->end = pnew; return true; }
Решение задачи: «Объясните как работает функция добавления в односвязный список»
textual
Листинг программы
void add(elem *tmp) { tmp->next = plist->head; plist->head = tmp; }
Объяснение кода листинга программы
- В данной функции присутствует только один аргумент типа elem *tmp, который передается в функцию по значению.
- Внутри функции происходит запись в указатель
tmp
адреса первого элемента спискаplist
. - Затем в поле
next
текущего элемента спискаplist
записывается адресtmp
, то есть адрес начала списка. - И в конце в
head
спискаplist
записывается адресtmp
. - В итоге, новый элемент списка
tmp
добавляется в начало спискаplist
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д