Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Liste ordnen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 <
010
12.06.2006, 20:46 Uhr
(un)wissender
Niveauwart


verwirrend
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
12.06.2006, 20:58 Uhr
Pler
Einer von Vielen
(Operator)


Sag mal, wie bist du denn heute drauf?
Mir hast du (wahrscheinlich - habs immer noch nicht geschafft zu testen) auch so gut geholfen.

Ist dir eine Laus über die Leber gelaufen?
(Weis nicht wie das in Österreich heißt - bedeuted soviel wie: Hast du schlechte Laune)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
12.06.2006, 21:38 Uhr
Karldin Shinowa
Professional Noob



Zitat von Pler:
Sag mal, wie bist du denn heute drauf?

Ka. mich nervt nur das sort weil ichs fertig bekommen will. Vllt war ich auch noch ein bisschen down. habe heute meiener Schwester Java-Nachhilfe gegeben


Zitat von Pler:
Mir hast du (wahrscheinlich - habs immer noch nicht geschafft zu testen) auch so gut geholfen.

COOOOOL. Ich dachte ich bin noch immer ein noob


Zitat von Pler:
Ist dir eine Laus über die Leber gelaufen?

Stimmt schon. Sagt man auch bei uns. Wir sprechen ja schließlich beide die gleiche Sprache obwohls nicht immer so scheint


Zitat von (un)wissender:
verwirrend

Ich werd jetzt mal analysieren was ich mir gedacht habe. Ich will die Liste wie ein Array behandeln da ich ja mit get jedes element einzeln bekomme. Ich verwende den Bubble sort. Dann habe ich 3 Fälle

1)null <- element1 -> element2->element.......

C++:

if(k1->prev==0)
{
   Knoten*after=k2->next;//element  nach k2

   first=k2;// k2 wird nach vor geschoben und ist dadurch das 1. element
   k1->next=after;//k1 hat nun das after element als nachfolger
   k2->next=k1;//k2 steht vor k1-> k1 ist nachfolger von k2
   k1->prev=k2;//k2 steht vor k1-> k2 ist vorgänger von k1
   k2->prev=0;//k2 ist erstes-> hat keinen vorgänger
}



2)...element<- element1 -> element2->null

C++:
else if(k2->next=0)
{
   Knoten*previous=k1->prev;//element vor k1
    
   previous->next=k2;//k2 kommt nach vor hat als vorgänger previous
   k2->prev=previous;
   k2->next=k1;//k2 hat als nachfolger k1
   k1->prev=k2;
   k1->next=0;//k1 ist nun letztes objekt
   last=k1;
}


3)...element<- element1 -> element2->element.......

C++:
else
{
   Knoten*previous=k1->prev;
   Knoten*after=k2->next;

   previous->next=k2;//k2 nach vor
   k2->prev=previous;
   k2->next=k1;//k1 ist nach k2
   k1->prev=k2;
   k1->next=after;//k1 hat nun den ehemaligen nachfolger von k2 als nachfolger
   after->prev=k1;
}


--
Ich will die Welt verbessern, doch Gott gibt mir nicht den Code.

Dieser Post wurde am 12.06.2006 um 21:38 Uhr von Karldin Shinowa editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
12.06.2006, 23:09 Uhr
(un)wissender
Niveauwart


@Karldin
Ich glaube Pler meint mich.

@Pler
Mi geht es gut, ich finde den Code nur halt verwirrend (Wo ist swap?). Ich habe Sortieralgorithmen immer anderes gesehen. Und die Fehlerbeschreibung ist auch sehr dünn. Gegen das schließen des Fenster kann man was machen und dann? Was passiert, wo ist der Fehler? Wurde nicht gesagt.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
13.06.2006, 09:53 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)



Zitat von (un)wissender:

Mi geht es gut, ich finde den Code nur halt verwirrend (Wo ist swap?). Ich habe Sortieralgorithmen immer anderes gesehen. Und die Fehlerbeschreibung ist auch sehr dünn. Gegen das schließen des Fenster kann man was machen und dann? Was passiert, wo ist der Fehler? Wurde nicht gesagt.

Seh ich genausso und ich sehs nicht ein die Arbeit für jemand anderen zu machen. Ich wette debuggt hat er immer noch nicht...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
13.06.2006, 11:12 Uhr
(un)wissender
Niveauwart


So, sollte jetzt laufen.


C++:
#include <algorithm>
#include <iostream>
#include <cassert>

struct Knoten;

struct Knoten
{
    int a;
    Knoten*next;
    Knoten*prev;
  
    Knoten(int a)
    {
        this->a = a;
        next = 0;
        prev = 0;
    }
  
    void chain(Knoten & other)
    {
        next = &other;
        other.prev = this;
    }
  
    bool operator<(Knoten const& other) const
    {
        return a < other.a;
    }  
    
    void swap(Knoten &other)
    {
        std::swap(a, other.a);  
    }        
};

class Liste
{
   private:
      Knoten*first;
      Knoten*last;

      int number;
      
      Knoten* internal_get(int index) const;

   public:
      Liste();
      ~Liste();
      
      void pushFront(int a);
      void pushBack(int a);
      
      void popFront();
      void popBack();
      
      Knoten* get(int index);
      Knoten const* get(int index) const;
      
      int size() const;

      bool isEmpty() const;
      void sort();  
        
};

std::ostream & operator<<(std::ostream &out, Knoten const& knoten)
{
   return  
    out << "this: " << &knoten << ", a: " << knoten.a << ", prev: "
    << knoten.prev << ", next: " << knoten.next;      
}

std::ostream & operator<<(std::ostream &out, Liste const& list)
{
    for(int i = 0; i < list.size(); ++i)
    {
        out << "\nKnoten " << i << '\n' << *list.get(i);
    }
    return out;    
}

Liste::Liste()
{
    number=0;
    first=0;
    last=0;
}

Liste::~Liste()
{
    Knoten * current = first;
    while(current)
    {
        Knoten * temp = current->next;
        delete current;
        current = temp;      
    }    
}    

void Liste:: pushFront(int a)
{
    if(isEmpty())
    {
        pushBack(a);    
    }
    else
    {
        Knoten*p= new Knoten(a);
        p->chain(*first);
        first = p;
        number++;
    }
}
  
void Liste:: pushBack(int a)
{
   if(isEmpty())
   {
        first=new Knoten(a);
        last=first;
   }
   else
   {
        assert(last);
        Knoten*p= new Knoten(a);
        last->chain(*p);
        last = p;    
   }
   number++;
}
      
void Liste::popFront()
{
   if(isEmpty() || !first->next) return;
   Knoten*p=first->next;
   delete first;
   first=p;
   p->prev=0;
   number--;
}

void Liste::popBack()
{
   if(isEmpty()) return;
   Knoten* p =last->prev;
   delete last;
   p->next=0;
   last = p;  
   number--;
}

Knoten* Liste::internal_get(int index) const
{
    if(index >= number) return 0;
    Knoten * p = 0;
    if(index > number/2)
    {
        p = last;
        for(int i = number - 1; i != index; i--)
        {
            p = p->prev;
        }    
    }
    else
    {
        p=first;
        for(int i = 0; i != index; i++)
        {
            p=p->next;
        }
    }
    assert(p);
    return p;
}

Knoten* Liste::get(int index)
{
   return internal_get(index);
}

Knoten const* Liste::get(int index) const
{
    return internal_get(index);
}

int Liste::size() const
{
    assert(number >= 0);
    return number;
}      

bool Liste::isEmpty() const
{
    return first==0;
}

void Liste::sort()
{
    for(int i = 0; i < number - 1; ++i)
    {
        for(int j = 0; j < number - 1; ++j)
        {
            Knoten* k1=get(j);
            Knoten* k2=get(j+1);    
            assert(k1);
            assert(k2);    
            if(*k2 < *k1)
            {
                k1->swap(*k2);
            }
        }
    }
}

int main()
{
    Liste MyListe;
    MyListe.pushBack(3);
    MyListe.pushBack(7);
    MyListe.pushBack(1);
    MyListe.pushBack(8);
    MyListe.pushBack(3);
    MyListe.pushBack(2);
    std::cout << "Before sort: " << MyListe;  
    MyListe.sort();
    std::cout << "\nAfter sort: " << MyListe;
}


--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
13.06.2006, 16:15 Uhr
Pler
Einer von Vielen
(Operator)



Zitat:

Seh ich genausso und ich sehs nicht ein die Arbeit für jemand anderen zu machen. Ich wette debuggt hat er immer noch nicht...


Also ich glaube das wird dem Karldin hier zu unrecht unterstellt.
Grundsätzlich bräuchten die meisten Fragen hier nicht gestellt zu werden, mit Sicherheit habe ich auch schon viele solche Fragen gestellt.
Das wurde aber alles schon tausend mal ausdiskutiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: