Sortierfunktion für doppelt verkettet Liste will einfach nicht ....

Tutorial empfehlen kann ich keins, sorry.

Und das Beitrags-Bearbeiten ist theoretisch schon möglich, nur ist das absichtlich nach einer bestimmten Frist nach dem Beitragsschreiben nicht mehr möglich (nötig wurde das uA. wegen einem massiven Werbungsproblem vor nicht all zu langer Zeit: Viele Accounts, die halbwegs sinnvolle Beiträge schreiben und Tage/Wochen später Listen von Werbelinks reineditieren. Teilweise sicher auch automatisiert)

Schreib den Code einfach noch einmal drunter (oder was sonst noch geändert werden soll), ich fügs dann oben ein.
Ab 100 (nicht gelöschten) Beiträgen ist die zeitliche Sperre dann weg (ist gar nicht soo schwer zu erreichen :p,
nur für die Werbungsschreiber ist das viel zu anstrengend)
 
Zuletzt bearbeitet:
Alles klar, ich schreibe hier jetzt einfach nochmal die ganze Funktion rein, die funktioniert nun definitiv:

C++:
int x,i,j,z,change_current2;
item_content *content1;
item_content *content2;
item_content *tmp_content;
item *help;
item *help2;
item *current2;

if (LIST.head == NULL)
{
  show_information_no_data();
  return;
}
if (LIST.head->next == NULL || LIST.head == NULL)             // keine Sortierung notwendig bei nur einem Datensatz
{
  return;
}
reset_current();
for (i=0; i<count; i++)               // 1. Schleife: für jeden Datensatz eine eigene Schleife
{
if (LIST.current->next == NULL)             // wenn es kein nächstes Element mehr gibt: fertig
{
  break;
}
current2=LIST.current->next;             // current2 ist der Vergleichspartner, vor dem ersten Durchlauf ist er das next von current
for (j=0; j<(count-1); j++)              // Start 2. Schleife
{
  help2=LIST.current;
  if ((j != 0) && (change_current2==1) )         // current 2 nur dann weiterschalten, wenn nicht schon vorher und auch nicht im 1. Durchlauf
  {
  current2=LIST.current->next;
  }
  content1=LIST.current->pdata;             // Inhalt auslesen
  content2=current2->pdata;
  //printf("Vergleiche nun %s und %s\n",content1->Deutsch,content2->Deutsch);
  if (strcasecmp(content1->Deutsch,content2->Deutsch) > 0)     // Vergleich, keine Beachtung von Groß- und Kleinschreibung
  {
  //printf("Änderung erforderlich");
  help=LIST.current;               // Daten der Knoten austauschen und Stand von List.current speichern  
  tmp_content=content1;
  content1=content2;
  content2=tmp_content;
  LIST.current->pdata=content1;
  LIST.current=current2;
  LIST.current->pdata=content2;
  change_current2=1;               // current2 muss nun geändert werden
  LIST.current=help2;               // LIST.current zurücksetzen auf help2, um restliche Durchläufe zu gewährleisten
  }
  else                   // bei keiner Änderung der Daten:
  {
  //printf("Keine Änderung erforderlich");
  if (current2->next == NULL)
  break;
  current2=current2->next;             // Änderung von current2
  change_current2=0;
  }
  if (LIST.current->next==NULL)             // LIST.current auf alten Stand zurücksetzen, falls es nun das letzte Element sein sollte
  LIST.current=help;
}
if (LIST.current->next == NULL)
{
  //printf("Das waren alle Durchläufe\n");
  break;
}
LIST.current=LIST.current->next;             // LIST.current weiterschalten nach jedem Ende der 2. Schleife
}

show_content();
}

Danke nochmal für deine bzw. eure Hilfe !
 
Zurück