• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Tworzenie Listy

Object Storage Arubacloud
0 głosów
140 wizyt
pytanie zadane 24 sierpnia 2015 w C i C++ przez Iras Obywatel (1,800 p.)
Cześć, Mógłby mi ktoś wytłumaczyć jak tworzyć liste jednokierunkową żeby można było dodawać elementy na początku, na końcu, usuwać itd. Szukałem w necie ale wszystko to jakieś nie jasne dla mnie?Może dlatego że większość tych list pisana jest obiektowo a ja znam dopiero podstawy?

Z góry dziękuje

1 odpowiedź

+4 głosów
odpowiedź 24 sierpnia 2015 przez Szykem2 Nałogowiec (29,510 p.)

Lista to struktura danych, gdzie każdy element ma wskaźnik do kolejnego elementu lub NULL jak kolejnego już nie ma (opiszę jak się robi z funkcjami globalnymi żeby było łatwiej zrozumieć). Mamy w mainie zadeklarowany wskaźnik do klasy/struktury np. lista i wysyłamy ten wskaźnik do funkcji add_end. Musimy sprawdzić czy jest to NULL czy nie. Pierwszy musi być zainicjalizowany jako NULL więc tworzymy pierwszy element (new/malloc) ustawiamy w nim wskaźnik na NULL i dodajemy jakąś wartość. Teraz twożymy kolejny więcy wysyłamy znów ten sam wskaźnik do tej funkcji i sprawdzamy czy jest NULL a nie jest bo pokazuje na pierwszy element listy. Więc musimy znaleźć element listy, który nie pokazuje na nic(NULL) czyli pętlą

 while(wsk->next != NULL) // dopóki istnieje kolejny element
{
    wsk = wsk->next;  //przechodzimy do kolejnego
}

teraz jesteśmy w ostatnim elemencie więc robimy to co dla pierwszego tylko nie jako wsk = ... tylko wsk->next = new... wsk->next->next=NULL  i to już jest dodawanie na koniec.

Dodając na początek sprawdzamy czy są już jakieś elementy listy czyli czy wsk != NULL jeśli nie to tworzymy zwykły pierwszy element jeśli nie to twożymy tymczasowy wskaźnik na element listy i ustawiamy go na pierwszy element teraz dla wskaźnika z maina tworzymy nowy obiekt i dla jego pola next ustawiamy ten wskaźnik tymczasowy.

Usuwanie to znajdujemy element przed tym elementem, który chcemy usunąć i tworzymy wskaźnik tymczasowy który przechowa element następny po tym do usunięcia. Usówamy wks->next;(usuwamy kolejny) i wsk->next = tmp;(zamiast na kolejny pokazuje na jeden dalszy bo tmp= wsk->next->next) i to by było na tyle.

Podobne pytania

0 głosów
1 odpowiedź 1,537 wizyt
pytanie zadane 24 maja 2018 w C i C++ przez mIKY Nowicjusz (120 p.)
0 głosów
0 odpowiedzi 68 wizyt
pytanie zadane 6 stycznia 2018 w C i C++ przez k222 Nałogowiec (30,150 p.)
+2 głosów
1 odpowiedź 164 wizyt
pytanie zadane 15 marca 2022 w Java przez blofeld Użytkownik (700 p.)

92,568 zapytań

141,422 odpowiedzi

319,629 komentarzy

61,956 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...