C++ dodawanie elem. do listy wytluamczenie kodu

flowers_evil
Użytkownik
Użytkownik
Posty: 87
Rejestracja: 8 mar 2009, o 09:27
Płeć: Kobieta
Podziękował: 41 razy

C++ dodawanie elem. do listy wytluamczenie kodu

Post autor: flowers_evil »

witam mam pewien problem.. chciałabym aby ktoś wytłumaczył mi co dzieje się w każdej linijce kodu :

Kod: Zaznacz cały

Element_t *nowy = (Element_t *) malloc ( sizeof (Element_t) ); ////  (szczególnie tutaj nie wiem o co chodzi z tym malloc i innymi)
 
 if (!head)                      ///(o co chodzi  w tym warunku)
 {
            nowy->next = NULL;//tutaj rozumiem ze tworzy się miejsce i nastepny element jest null
            nowy->prev = NULL;// i poprzedni jest null czyli zostaje miejsce pomiędzy 
            nowy->element = x;  // x to jest nowy element kotry dodajemy.. ale tego nie rozumiem.
            head = nowy;      
            tail = nowy;        
 }
  else
   {
            Element_t *tmp;
            tmp = head;          // wskaźnik na głowę 
            nowy->next = head;
            nowy->prev = NULL;
            nowy->element = x;
            (tmp->prev)=nowy;
            head = nowy;


czy moze ktoś mi napisać po kolei co się dzieje w tym programie.
Ostatnio zmieniony 22 wrz 2010, o 08:30 przez scyth, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
Morgus
Użytkownik
Użytkownik
Posty: 224
Rejestracja: 28 sty 2007, o 10:28
Płeć: Mężczyzna
Lokalizacja: Lublin/Warszawa
Podziękował: 4 razy
Pomógł: 55 razy

C++ dodawanie elem. do listy wytluamczenie kodu

Post autor: Morgus »

Nie jestem mistrzem w programowaniu, ale postaram się pomóc...

malloc dynamicznie alokuje pamięć. Jednak funkcja ta zwraca wartość typu void*. Takiego wskaźnika nie da się przypisać do żadnego innego, więc od razu wykonywane jest rzutowanie, w efekcie w pierwszej linijce otrzymujemy wskaźnik na obiekt typu Element_t. W jeżyku C++ polecam jednak dynamiczną alokację przez polecenie new.

Warunek !head jest chyba równoważny warunkowi head==0. Odczytuje to tylko z kontekstu. Wówczas element nowy staje się głową i ogonem listy (początkiem i końcem).

W przeciwnym razie nowy element jest dopisywany do head. Ta lista wygląda mi na LIFO
Ostatnio zmieniony 22 wrz 2010, o 13:12 przez Morgus, łącznie zmieniany 1 raz.
flowers_evil
Użytkownik
Użytkownik
Posty: 87
Rejestracja: 8 mar 2009, o 09:27
Płeć: Kobieta
Podziękował: 41 razy

C++ dodawanie elem. do listy wytluamczenie kodu

Post autor: flowers_evil »

hymm czyli pierwszy przypadek (!head) to kiedy lista jest pusta i powstaje wtedy lista jednoelementowa czyli głowa=ogon .

a drugi przypadek to taki kiedy w liście już coś było tak ?
Morgus
Użytkownik
Użytkownik
Posty: 224
Rejestracja: 28 sty 2007, o 10:28
Płeć: Mężczyzna
Lokalizacja: Lublin/Warszawa
Podziękował: 4 razy
Pomógł: 55 razy

C++ dodawanie elem. do listy wytluamczenie kodu

Post autor: Morgus »

Tak sądzę.
Crizz
Użytkownik
Użytkownik
Posty: 4094
Rejestracja: 10 lut 2008, o 15:31
Płeć: Mężczyzna
Lokalizacja: Łódź
Podziękował: 12 razy
Pomógł: 805 razy

C++ dodawanie elem. do listy wytluamczenie kodu

Post autor: Crizz »

A ja mogę potwierdzić z całą pewnością. Tak na marginesie - nie można stwierdzić, czy lista będzie służyła jako LIFO, bo to zależy od tego, w jaki sposób będziemy z niej korzystać.
ODPOWIEDZ