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 ]
000
12.06.2006, 13:08 Uhr
Karldin Shinowa
Professional Noob


Habe eine doppelt verkettete Liste die ich sortieren will:

C++:
struct Knoten
{
   int a;
   Knoten*next;
   Knoten*prev;
   Knoten(int a){this->a=a;}
};

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

      int number;

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

      bool isEmpty();
      void sort();

      
};



und hier der sortierer und die angewandte getfunktion

C++:
Knoten* Liste:: get(int index)
{
   index++;
   if(index>number) return 0;
   Knoten*p=0;
   if(index>number/2)
   {
      p=last;

      for(int i=number;i!=index;i--)
      {
         p=p->prev;
      }
      
   }
   else
   {
      p=first;

      for(int i=1;i!=index;i++)
      {
         p=p->next;
      }
   }
   return p;
}

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

void Liste::sort()
{
   for(int i=1;i<=number;++i)
   {
        for(int j=1;j<number;++j)
      {
         Knoten* k1=get(j+0);
         Knoten* k2=get(j+1);
        
         if(k1->a > k2->a)
         {
            if(k1->prev==0)
            {
               Knoten*after=k2->next;

               first=k2;
               k1->next=after;
               k2->next=k1;
               k1->prev=k2;
               k2->prev=0;
            }
            else if(k2->next=0)
            {
               Knoten*previous=k1->prev;
              
               previous->next=k2;
               k2->prev=previous;
               k2->next=k1;
               k1->prev=k2;
               k1->next=0;
               last=k1;
            }
            else
            {
               Knoten*previous=k1->prev;
               Knoten*after=k2->next;

               previous->next=k2;
               k2->prev=previous;
               k2->next=k1;
               k1->prev=k2;
               k1->next=after;
               after->prev=k1;
            }
         }
      }
   }
}




was mach ich falsch??? Fenster blitzt auf und schließt sich sofort(trotz getchar am ende)
--
Ich will die Welt verbessern, doch Gott gibt mir nicht den Code.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
12.06.2006, 13:22 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


warum debuggst du nicht einfach mal?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
12.06.2006, 13:57 Uhr
Pler
Einer von Vielen
(Operator)


Also erst mal sehe ich kein getchar. Naja, das wird wohl im main oder so sein.
Wenn sowas "nicht beachtet" wird, liegt es meist daran, dass noch Zeichen im Lesepuffer stehen.
Mach mal zuvor ein
fflush( stdin );
(Wenn du von stdin einliest.)
(Hab jetzt keine Zeit gehabt deinen Quellcode im Einzelnen durchzulesen)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
12.06.2006, 14:24 Uhr
(un)wissender
Niveauwart


fflush( stdin ) gibt es nur unter Windows.
Aber Leute, fragt doch nicht zum 10000000000000mal warum euer Konsolenfenster wieder zugeht. Das steht in ebensovielen Threads und in der FAQ, in der Hilfe von Dev-Cpp, google, ...
Ich kann es langsam nicht mehr hören!
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
12.06.2006, 14:42 Uhr
Karldin Shinowa
Professional Noob



Zitat von (un)wissender:

Aber Leute, fragt doch nicht zum 10000000000000mal warum euer Konsolenfenster wieder zugeht. Das steht in ebensovielen Threads und in der FAQ, in der Hilfe von Dev-Cpp, google, ...
Ich kann es langsam nicht mehr hören!

Hmm ich weiß aber nicht worans liegt. der fehler liegt in sort das weiß ich... ich kann nur beschreiben was ich sehe oder schreiben es funktioniert nicht. es dürfte also in sort einen so argen fehler geben dasss er das programm beendet. ich finde keinen.
Hier mal der GANZE Code:

C++:
//Liste.h
#ifndef Liste_h
#define Liste_h

struct Knoten
{
   int a;
   Knoten*next;
   Knoten*prev;
   Knoten(int a){this->a=a;}
};

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

      int number;

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

      bool isEmpty();
      void sort();

      
};
#endif




C++:
//Liste.cpp
#include"Liste.h"


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

void Liste:: pushFront(int a)
{
   if(isEmpty())
   {
      pushBack(a);
      
   }
   else
   {
      Knoten*p=first;
      first=new Knoten(a);
      first->next=p;
      first->prev=0;

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

void Liste::  popBack()
{
   if(isEmpty()) return;
   Knoten*p=last;
   delete last;
   last=p;
   p->next=0;
   number--;
}
    
Knoten* Liste:: get(int index)
{
   index++;
   if(index>number) return 0;
   Knoten*p=0;
   if(index>number/2)
   {
      p=last;

      for(int i=number;i!=index;i--)
      {
         p=p->prev;
      }
      
   }
   else
   {
      p=first;

      for(int i=1;i!=index;i++)
      {
         p=p->next;
      }
   }
   return p;

}

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

void Liste::sort()
{
   for(int i=1;i<=number;++i)
   {
        for(int j=1;j<number;++j)
      {
         Knoten* k1=get(j+0);
         Knoten* k2=get(j+1);
        
         if(k1->a > k2->a)
         {
            if(k1->prev==0)
            {
               Knoten*after=k2->next;

               first=k2;
               k1->next=after;
               k2->next=k1;
               k1->prev=k2;
               k2->prev=0;
            }
            else if(k2->next=0)
            {
               Knoten*previous=k1->prev;
              

               previous->next=k2;
               k2->prev=previous;
               k2->next=k1;
               k1->prev=k2;
               k1->next=0;
               last=k1;
            }
            else
            {
               Knoten*previous=k1->prev;
               Knoten*after=k2->next;

               previous->next=k2;
               k2->prev=previous;
               k2->next=k1;
               k1->prev=k2;
               k1->next=after;
               after->prev=k1;
            }
         }
      }
   }
}




C++:
//main.cpp]
#include"Liste.h"
#include<iostream>
#include<conio.h>

int main()
{
Liste MyListe;

MyListe.pushBack(3);
MyListe.pushBack(7);
MyListe.pushBack(1);
MyListe.pushBack(8);
MyListe.pushBack(3);
MyListe.pushBack(2);

MyListe.sort();

std:: cout<<(MyListe.get(1))->a;

getchar();
}


--
Ich will die Welt verbessern, doch Gott gibt mir nicht den Code.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
12.06.2006, 15:14 Uhr
Pler
Einer von Vielen
(Operator)



Zitat von (un)wissender:

fflush( stdin ) gibt es nur unter Windows.


Hä?


man 3 fflush:

CONFORMING TO
       The function fflush() conforms to ANSI X3.159-1989 (‘‘ANSI
       C'').

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
12.06.2006, 16:04 Uhr
Hans
Library Walker
(Operator)


@Pler: (un)wissender meint, das die Anwendung von fflush() auf die Standardeingabe stdin so nur unter Windows funktioniert. Das steht übrigens auch in mehreren Threads hier im Forum.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
12.06.2006, 16:48 Uhr
Pler
Einer von Vielen
(Operator)



Zitat:

Das steht übrigens auch in mehreren Threads hier im Forum.


Das ist mir neu. Kann ja passieren.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
12.06.2006, 17:27 Uhr
(un)wissender
Niveauwart


An. d. Red.
Hans hat recht!
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
12.06.2006, 19:37 Uhr
Karldin Shinowa
Professional Noob


Mag euch ja nicht stören aber schaut sich wer mal meinen code an und sagt was?
--
Ich will die Welt verbessern, doch Gott gibt mir nicht den Code.
 
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: