doppelt verkettete liste



  • Hi leute, ich weiss, dass des eine blöde frage isch, aber kann mir jemand den fehler in meinem programm zeigen?

    das soll eine sortierte doppelt verkettete liste werden!

    die header datei

    class element{
        friend class slist;
    private:
        int entry;
        element *next;
        element *prev;
    };
    
    class slist{
    public:
        slist();                 // construct empty list
        ~slist();                // destruct list
        void insert(int value);  // insert element with entry value
                                 // such that list remains sorted 
    ...
    

    und meine insert funktion sie funkt!!! jedoch bei der print funktion, welche rückwärts die liste durchtgeht funkt nit!!

    void slist::insert(int value)
    {
        element *nelement = new element;
        nelement->entry = value;
        nelement->next = 0;
        nelement->prev = 0;
    
        if (start == 0)
            start = nelement;
        else
            if (start->entry > value)
            {
                nelement->next = start;
                start = nelement;
            }
            else
            {
                element *help1 = start;
                element *help2 = start->next;
    
                while ((help2 != 0) && (help2->entry < value))
                {
                    help1 = help2;
                    help2 = help2->next;
                }
    
                help1->next = nelement;
                nelement->prev = help1;  //und hier sollte der zeiger auf das vordere element gelegt werden!
                nelement->next = help2;
            }
    
        return;
    }
    

    und dann noch die print funktion, die von hinten her abliest

    void slist::print(){
        element *help = start;
        //element *temp = start->next;
    
        while (help->next != 0){
                //help = temp;
                help = help->next;
                //cout <<help->nextentry<<endl;  
        }
    
        //cout <<" test"<<help->entry<<endl;
    
        while (help->prev != 0){
            cout << help->entry;
    
            help = help->prev;
    
            cout <<"prev  "<< help->entry;
        }
    
        cout <<endl;}
    

    ich sage dank!!



  • Ich frag:
    Was genau klappt net?

    DgM



  • also die print funktion!
    er geht zwar ans ende der liste! gibt dann aber nur die ersten 2 elemente (bzw letzten der liste aus!

    void slist::print(){
        element *help = start;
    //  element *temp = start->next;
    
        while (help->next != 0){
                //help = temp;
                help = help->next;
            //  cout <<help->nextentry<<endl;    
        }
    
        //cout <<" test"<<help->entry<<endl;
    
        while (help->prev != 0){
    
            cout << help->entry<<endl;
            help = help->prev;
    
        //  cout <<"prev  "<< help->entry;
        }
    
        cout <<endl;
    
    }
    


  • Pseudocode:

    void list::print()
    {
      if(numofelements != 0)
      {
        element* current = start;
        do
        {
          cout << current->value;
        }
        while((++current)->next != 0);
      }
    }
    

    [ Dieser Beitrag wurde am 05.05.2003 um 20:50 Uhr von Lars editiert. ]


Anmelden zum Antworten