Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++]Lista wskaźnikowa

Ostatnio zmodyfikowano 2011-09-18 10:13
Autor Wiadomość
BlackDante
Temat założony przez niniejszego użytkownika
[C++]Lista wskaźnikowa
» 2011-09-18 09:58:54
Witam po dłuższej nieobecności na forum :) mam chyba szkolny problem ponieważ nie mogę napisać implementacji listy wskaźnikowej dwukierunkowej, mianowicie mam kłopoty z usuwaniem pierwszego elementu z listy, pomimo że wskaźnik next elementu następnego się nie zmienia to nagle zaczyna wskazywać na swój element i tworzy się taka nieskończona pętla:
klasa wygląda tak:
C/C++
class List {
private:
    static List * root;
    static int number;
    int value;
    List * next;
    List * prev;
public:
    List( void );
    ~List( void );
    bool empty( void );
    void insert( int value );
    void remove( int value );
    void print( void );
    bool search( int value );
};
 
sama funkcja remove wygląda następująco:

C/C++
//Begin of remove
void List::remove( int value ) {
    if( next->value == value ) {
        root->next = next->next;
        root->next->prev = NULL;
        number--;
    } else {
        List * pomoc;
        pomoc = next;
        while( pomoc->value != value && pomoc->next != NULL ) {
            pomoc = pomoc->next;
        }
        if( pomoc->value == value && pomoc->next == NULL ) {
            pomoc = pomoc->prev;
            pomoc->next = NULL;
            number--;
        }
        if( pomoc->value == value && pomoc->next != NULL ) {
            pomoc = pomoc->prev;
            pomoc->next = pomoc->next->next;
            pomoc->next->prev = pomoc;
            number--;
        }
    }
}
//End of remove

będę wdzięczny za każdą pomoc :)
P-41112
pekfos
» 2011-09-18 10:00:45
to się nazywa lista dwukierunkowa :P

C/C++
if( next->value == value ) {
    root->next = next->next;
    root->next->prev = NULL; //NULL? a nie root?
    number--;
}
dostrzegam tu problem
P-41113
BlackDante
Temat założony przez niniejszego użytkownika
» 2011-09-18 10:13:46
to jest chyba bez różnicy czy będzie się kończyć na głowie czy pierwszym elemencie, szczególnie że nie mam później nic co wykorzystuje pierwszy prev :)
może bardziej zobrazuje mój problem, mianowicie jeśli wrzucimy do tej listy elementy 3,5,7 wszystko się ładnie tam doda, jeśli usuniemy 5, wszystko ładnie działa nadal, jeśli usuniemy 7 wszystko nadal ładnie działa... jeśli usuniemy 3.... wtedy funkcja print wypisuje mi wszystkie pozostałe elementy listy w kółko(po zmianie na root, też) aż do zabicia procesu. 


Edit: problem rozwiązany temat zamykam :)
P-41114
« 1 »
  Strona 1 z 1