Объясните как работает функция добавления в односвязный список - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Программа полностью рабочая. Я просто не могу понять 1 момент в функции показанной ниже. часть файла .h
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;
вот функция в файле .c реализующая добавления элементов в список
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;
}
Опишите пожалуйста что происходит при создании первых 3 элементов в списке. З.Ы. Я не понимаю каким образом происходит присвоение адреса указателю plist->head->next

Решение задачи: «Объясните как работает функция добавления в односвязный список»

textual
Листинг программы
void add(elem *tmp)
{
tmp->next = plist->head;
plist->head = tmp;
}

Объяснение кода листинга программы

  1. В данной функции присутствует только один аргумент типа elem *tmp, который передается в функцию по значению.
  2. Внутри функции происходит запись в указатель tmp адреса первого элемента списка plist.
  3. Затем в поле next текущего элемента списка plist записывается адрес tmp, то есть адрес начала списка.
  4. И в конце в head списка plist записывается адрес tmp.
  5. В итоге, новый элемент списка tmp добавляется в начало списка plist.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.769 из 5