Jak zaalokować pamięć dla nowego elementu listy jednokierunkowej?

0

Mamy daną strukturę:

struct element {
    int liczba;
    struct element *nastepny;
};

Polecenie brzmi:
Napisz funkcję, która doda liczbę jako i-ty element listy , np. dla listy 4->2->1->3 i i=1, nowa liczba zostanie dodana pomiędzy 4 (pozycja 0) a 2 (pozycja 1): 4->nowa->2->1->3.

I tutaj pojawia się moje pytanie: czy w takiej funkcji należy użyć polecenia malloc() aby przydzielić pamięć dla pierwszego elementu listy? Czy może mam założyć że lista ma już przydzieloną pamięć (bo przecież funkcja musi dopisać liczbę do już istniejącej listy ???)

1

Ale masz zrobić to od zera, czy zmodyfikować istniejący kod?

Bo jak od zera, to sam powinieneś wiedzieć, czy przydzieliłeś pamięć. A jeśli przydzielisz pamięć dla pierwszego elementu listy, to do każdego nowego będziesz musiał osobno przydzielać.

czy w takiej funkcji należy użyć polecenia malloc() aby przydzielić pamięć dla pierwszego elementu listy?

A jak deklarujesz zmienną reprezentującą pierwszy element? Jako wskaźnik?

0

Załóżmy że masz takie funkcje, które dodają element do listy:

void add_at1(struct element** head, size_t at, struct element* v);
void add_at2(struct element** head, size_t at, int v);
  1. do add_at1 przekazujesz wcześniej zaalokowany element, więc tam malloc nie jest potrzebny
  2. w add_at2 przekazujesz int-a, wtedy alokacja pamięci dla elementu listy jest konieczna

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