Lineare geordnete verkettete Liste
-
Hallo,
ich hab folgendes Problem, ich will mehrere durch einen Nomenklaturschlüssel unterscheidbare Einträge ordnen und dies mit einer linearen geordneten verketteten Liste realisieren, um damit dann weiter zu arbeiten.
Dazu habe ich die folgende Funktion zur Erstellung und Belegung der Liste geschrieben:void VerketteteLineareListe::suchEinfuegElement(ZBibInhEl &listKopf, ZBibInhEl einfueEl){ if(listKopf==NULL) //Liste ist leer, Anfang mit einfueEl belegen listKopf=einfueEl; else if(vergleichKennzahl(einfueEl, listKopf)){ //einfueEl amAnfang einfügen einfueEl->weiter=listKopf; listKopf=einfueEl; } else{ //Liste durchsuchen, bis richtiger Platz für einfueEl gefunden ZBibInhEl p1, p2; //Hilfs-/Laufzeiger bzw. Kamm für Suche;p2 läuft p1 um 1Element hinterher p1=listKopf; do{ p2=p1; p1=p1->weiter; }while(p1!=NULL && !vergleichKennzahl(einfueEl,p1)); p2->weiter=einfueEl; einfueEl->weiter=p1; } }Die Funktion vergleichKennzahl sieht wie folgt aus:
bool VerketteteLineareListe::vergleichKennzahl(ZBibInhEl einfuegendeBiInEl, ZBibInhEl bezugBiInEl){ const int arrayLaengeKennza=7; bool elKleinerBezug=false; for(int i=0;i<=arrayLaengeKennza-1;i++){ int einfueEl=einfuegendeBiInEl->kennza[i]; //Kennzahl des einzufügenden BiInhEl int bezugEl=bezugBiInEl->kennza[i]; //Kennzahl des bezugs BiInhEl if(einfueEl<bezugEl){ elKleinerBezug=true; i=arrayLaengeKennza-1; } if(einfueEl>bezugEl){ elKleinerBezug=false; i=arrayLaengeKennza-1; } } return elKleinerBezug; }Meine Liste wird auch soweit, wie ich es möchte erstellt, nur bei den Einträgen
1.2.0.0.0.0, 1.3.0.0.0.0, 1.4.0.0.0.0 usw. werden diese nicht richtig einsortiert. Diese werden nach 1.1.0.0.0.0 in umgekehrter Reihenfolge und vor 1.1.1.0.0.0 eingefügt. Hat jemand eine Idee woran es liegen kann?
-
Das
i=arrayLaengeKennza-1sieht etwas gekünstelt aus (und bewirkt nebenbei noch einen zusätzlichen Schleifendurchlauf) - wenn du aus der Schleife raus willst, nimm lieberbreak;(in deinem Fall ginge auch ein return).(außerdem wäre es eventuell hilfreich zu wissen, was sich hinter 'ZBibInhEl' etc verbirgt)
-
Danke für den Tipp mit dem Schleifenabruch, funktioniert.
'ZBibInhEl' isttypedef Bibelinhaltsverzeichniselement *ZBibInhEl;Und das Bibelinhaltsverzeichniselement ist ein Objekt, das verschiedene Einträge enthält, wie z.B. int kennza[7] , einen Zeiger *weiter und verschiedene CStrings.