Ce este o listă multiplă?

Am fost cu ochii la această imagine și să încercăm să înțelegem ce este multispisok, dar încă nu înțeleg cum să-l pună în aplicare.

Iată încercările mele de a implementa o listă multiplă.







Vă rugăm să furnizați un exemplu de exemplu în mai multe liste + în introducerea elementelor.

Cel mai simplu mod de a implementa acest lucru în C ++ - să utilizeze shared_ptr pentru stocarea datelor A, B, C, D (shared_ptr - este un pointer de numărare de referință), și le leagă în lista obișnuită:

Astfel, toate resursele vor fi publicate corect, când listele vor fi șterse, iar listele pot fi orice cantitate (în general, este posibil să se construiască un grafic).

Dar, în același timp, memoria din cadrul datelor în sine este alocată dinamic și, în același timp, memoria pentru fiecare nod este alocată dinamic. Numărul de referință poate fi, de asemenea, creat în memorie dinamică dacă nu utilizați make_shared.







Puteți încerca să simplifice de numărare de referință (de fapt, destul de un steag boolean - dacă nodul este un element de două liste, sau doar unul), dar întrebarea este cum să ștergeți nodurile, astfel încât să nu pentru a elimina de două ori la fel, și cum să adăugați un nod ambele liste.

Am o astfel de listă (c ++ 14):

Nodurile sunt adăugate în partea de sus a listei. el este unidirecțională, nu a implementat un insert într-un loc arbitrar și eliminând orice nod (pentru a elimina necesitatea de a apela next1.release () și next2.release (). care resetează un pointer, dar nu elimină obiectul, dar mai întâi trebuie să găsiți elementele anterioare în ambele liste)

EDIT: Ștergerea listei a fost făcută inițial incorect, aparent. Acum ar trebui să funcționeze bine.







Articole similare

Trimiteți-le prietenilor: