doppelt Verkettete Liste - Sortierungsproblem



  • Hallo alle miteinander, ich habe folgendes Problem:

    Adressenstruktur mit mehreren Elementen (Name, Vorname, Str., Hausnr. etc.)
    Alle Elemente der Struktur sind ein array vom Typen char
    Variable Anzahl an Objekten vom Typ dieser Struktur.
    Objekte untereinander verkettet (doppelt verkettete Liste) Kopf der Liste enthält _keine_ Adressdaten.

    Benutzer sagt: Sortiere Liste nach folgendem Kriterium: Str. (Wahl wird per switch ermittelt)
    Vorgehensweise beim Sortieren (selection sort):
    Suche Minimum aus allen Objekten heraus
    Verkette Objekte neu, aufsteigend nach Minima
    Kleinstes --> nächst größeres --> ...

    Jetzt zu meinem Problem:
    Adressstruktur vom Typ TAddr
    TAddr * pHead
    TAddr * pChild
    TAddr * pParent
    TAddr * pMin
    TAddr * pCurrentElement
    TAddr * pCopyCurrentElement

    Algo:

    1      pCurrentElement = pHead->pChild;
    2      while (pCurrentElement != NULL) {
    3        pCopyCurrentElement = pCurrentElement;
    4        pMin = pCopyCurrentElement;
    5        while(pCopyCurrentElement != NULL) {
    6          if(stricmp(&pCopyCurrentElement->Name[0], &pMin->Name[0]) < 0) {
    7            pMin = pCopyCurrentElement;
    8          }
    9          pCopyCurrentElement = pCopyCurrentElement->pChild;
    10        }
    11        if(pMin != pCurrentElement) {
    12          if(pMin->pChild == NULL) {
    13            pMin->pParent->pChild = NULL;
    14          } else {
    15            pMin->pParent->pChild = pMin->pChild;
    16          }
    17          if (pMin->pChild != NULL) {
    18            pMin->pChild->pParent = pMin->pParent;
    19          }
    20          pHead->pChild = pMin;
    21          pMin->pParent = pHead;
    22          pMin->pChild = NULL;
    23          pHead = pHead->pChild;
    24        } else {
    25          pHead->pChild = pMin;
    26          pCopyCurrentElement = pMin->pChild;
    27          pMin->pParent = pHead;
    28          pMin->pChild = NULL;
    29          pCurrentElement = pCopyCurrentElement;
    30          pHead = pHead->pChild;
    31        }
    32      }
    

    Wie kann ich diesen Algo in eine Funktion packen, sodass Zeile 6 des Algos weiß,
    welches Element der Struktur es zu vergleichen gilt (je nach Benutzerauswahl)?
    Irgendwie hänge ich da gerade dran...

    PS: Falls jmd. was gegen den Code hat, ist konstruktive Kritik willkommen,
    solange sie einen gewissen Freundlichkeitsgrad aufweist. 😉

    Danke im Voraus,

    - Gin -


Anmelden zum Antworten