Объясните как работает функция добавления в односвязный список - 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.