Wytłumaczenie działania kolejki na podstawie programu

0

Dzień Dobry.
Posiadam program, który pokazuje działanie kolejki:

 
#include <stdio.h>
#include <stdlib.h>

struct elem {
    int d;
    struct elem* n;
};

void attach(struct elem** kolejka, int d)
{
    struct elem* nowy = malloc(sizeof(struct elem));

    nowy->d = d;
    nowy->n = NULL;

    struct elem* p = NULL;
    struct elem* r = *kolejka;

    while (r != NULL)
    {
        p = r;
        r = r->n;
    }

    if (p == NULL)
    {
        *kolejka = nowy;
    }
    else
    {
        p->n = nowy;
    }
}

int detach(struct elem** kolejka)
{
    if (*kolejka == NULL)
        return -1;

    int wartosc = (*kolejka)->d;
    struct elem* act = *kolejka;
    *kolejka = act->n;
    free(act);

    return wartosc;
}

int main()
{
    struct elem* kolejka = NULL;

    srand(time(NULL));
    int i;
    for (i = 0; i < 10; i++)
        attach(&kolejka, i);

    int z;
    do
    {
        z = detach(&kolejka);
        printf("%d ", z);
    }
    while (z != -1);

    return 0;
}

Mam problem z jego zrozumieniem. Czy mógłby ktoś przetłumaczyć mi co oznaczają poszczególne frazy:
nowy->d = d;
nowy->n = NULL;
czym jest funkcja detach? (W skrócie)
free(act);

1

znajdź inny kod, ten jest słabo napisany

nowy->d = d;
nowy->n = NULL;

właśnie dlatego (że inna osoba ma problemy ze zrozumieniem) tak się nie powinno nazywać zmiennych
ale z kodu wynika że d to dane a n to następny (wskaźnik na kolejny element)
ustawienie NULL oznacza że nie ma kolejnego elementu (ten jest ostatni)

attach przypina, detach "odpina" dane - czyli zdejmuje element z kolejki - oprócz usunięcia elementu z kolejki zwraca wartość jaką miał ten element (w polu d)

free(act);

w act (aktualny element) to "wierzchołek" kolejki - element ten jest uwalniany z pamięci, a wskaźnik kolejki od tej pory będzie wskazywał na kolejny element po nim (act->n)
po zmianie pierwszego elementu, ten na który już nic nie wskazuje trzeba wyczyścić z pamięci

1 użytkowników online, w tym zalogowanych: 0, gości: 1