z listy 2 kierunkowej zrobic liste cykliczną

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

z listy 2 kierunkowej zrobic liste cykliczną

Post autor: flowers_evil »

witam
mam taką treść zadania :

wiedząc, że zmienna wskaźnikowa o nazwie ptr wskazuje na adres dowolnego elementu listy dwukierunkowej , napisz procedurę która utworzy z istniejącej listy, liste cykliczną. Określ typ elementu listy. Lista przechowuje wartosci typu float.Poprawnie sbudowana funkcja powinna zawierać tylko jeden argument-ptr.

Kod: Zaznacz cały


typedef struct Element_t
{
       float element;
       Element_t *next;
       Element_t *prev;
};

Element_t *ptr;

ptr->next=tail;
ptr->prev=head;
 
head=ptr;
tail=ptr;



ja to tak rozumiem ze ptr ma być i głową i ogonem ale nie wiem czy tak to zrobić.
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

z listy 2 kierunkowej zrobic liste cykliczną

Post autor: Crizz »

Czym są zmienne head i tail? Bo nie zostały nigdzie zadeklarowane...

Jeśli miały to być wskaźniki na ogon i głowę listy, to myślę, że nie możesz zakładać, że je posiadasz (tzn. "trzymasz" tę listę za element wskazywany przez ptr - gdybyś znała ogon i głowę, to wskaźnik ptr w ogóle nie byłby potrzebny).

Skopiuj wartość wskaźnika ptr do innej zmiennej (powiedzmy ptr2), a następnie pomyśl, co trzeba zrobić, żeby ptr zaczęła pokazywać na głowę listy, natomiast ptr2 na ogon. Co trzeba zrobić, jak już będziesz mieć wskaźniki na ogon i głowę?
flowers_evil
Użytkownik
Użytkownik
Posty: 87
Rejestracja: 8 mar 2009, o 09:27
Płeć: Kobieta
Podziękował: 41 razy

z listy 2 kierunkowej zrobic liste cykliczną

Post autor: flowers_evil »

Kod: Zaznacz cały

typedef struct s_element 
{ 
    float element; 
    struct s_element *next; 
    struct s_element *prev; 
} Element_t; 

void cykliczna( Element_t *ptr ) 
{ 
    Element_t *head, *tail; 
    Element_t *tmp; // zmienna wykorzystywana przez funkcję 

    if (ptr == NULL) 
    { 
        return; 
    } 

    tmp=ptr; 
    while (tmp->prev != NULL) 
    { 
           tmp=tmp->prev; 
    }      
    head=tmp; 
  
    
    tmp = ptr; 
    while (tmp->next != NULL) 
    { 
           tmp=tmp->next; 
    } 
    tail=tmp; 

   
    head->prev = tail; 
    tail->next=head; 
}
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

z listy 2 kierunkowej zrobic liste cykliczną

Post autor: Crizz »

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

z listy 2 kierunkowej zrobic liste cykliczną

Post autor: flowers_evil »

Dobra przyznam się ktoś mi z tym pomógł
ODPOWIEDZ