Sortierte Eingabe in doppelt Verkettete Liste einlesen.

OK, leider kann ich das nicht vereinfachen, sonst würde der sinn verloren gehen.

Eine andere Frage, Wenn ich so ein rotierende Liste habe, wie kann ich vom aktuelen Element auf den inhalt der Nachbarelemente zugreifen?

so: char* string2 = (char*) aktl_Elem -> right = list -> content; für den Inhalt auf den rechtennachbarn und
char* string2 = (char*) aktl_Elem -> left = list -> content; auf den Inhalt des linken Nachbarn?

Ich verfolge jetzt die Idee, erst meine liste zu befüllen, und dann erst zu sortieren (s. Funktion Sort)

aus der Liste.h
Java:
typedef struct node
{
	struct node* right; // Zeiger auf das Nachfolgerelement
	struct node* left;  // Zeiger auf das Vorgängerelement
	void* content;      // Für den Dateninhalt
	int lineCounter;
	int nodeCounter;	
} node;

aus der Liste.c
Java:
void sort(node* list)
{
	node* kopf      = list;
	node* aktl_Elem = list; 
		
	//Sortieren der Liste
        while(kopf != (aktl_Elem = aktl_Elem -> left))
	{
		char* string1 = (char*) aktl_Elem -> content;
		char* string2 = (char*) list -> content = aktl_Elem -> right;
		printf("%s string1\n", string1);
		printf("%s string2\n", string2);  					
		   
       		if(strcmp(string1, strin2) < 0)
                {
                 .....
                }
            .....
	}
Gruß.
 
Zuletzt bearbeitet:
Ok ich bin schon mal weiter gekommen.

Ich verwende hier ein Bubblesort-Algorithmus. Das Programm schiebt mir schon einige Wörter in meiner Liste hin und her, aber noch nocht so, wie ich mir das vorgestellt habe.

Java:
void sort(node* list)
{
	node* kopf      = list;
	node* aktl_Elem = list; 
	
	char* string1 = NULL;
	char* string2 = NULL;
	void* tmpString = NULL; // für Bubblesort -> Dreieckstausch
	int tmpZahl = 0;

	//Sortiert Listeneingabe
	while(kopf != (aktl_Elem = aktl_Elem -> left) && aktl_Elem -> left -> content != NULL)
	{
		string1 = (char*) aktl_Elem -> content;
		string2 = (char*) aktl_Elem -> left -> content;
		printf("String1: %s \n", string1);
		printf("String2: %s \n\n", string2); 
      		
		if(strcmp(string1, string2) < 0)
		{
			printf("%s < %s\n\n", string1, string2);
		}
		if(strcmp(string1, string2) == 0)
		{
			printf("%s = %s\n\n", string1, string2);
		}
		if(strcmp(string1, string2) > 0)
		{
			printf("%s > %s\n\n", string1, string2);
			//Inhalt aus Knoten sichern
			tmpString = aktl_Elem -> content;
			tmpZahl = aktl_Elem -> lineCounter;
			//Inhalt des rechten Nachbarn noch vorne schieben
			aktl_Elem -> content = aktl_Elem -> left -> content;
			aktl_Elem -> lineCounter = aktl_Elem -> left -> lineCounter;
			// gesicherten Inhalt im rechten Nachbar platzieren
			aktl_Elem -> left -> content = tmpString;
			aktl_Elem -> left -> lineCounter = tmpZahl;
		}			
	}	
}

*.Txt
Java:
sehr sehr geehrte damen und und herren,

hier erfand der erfinder konstantin ein mobilen stuhl, den man ausklappen konnte.
hier mal die veranschaul.ichung->zum thema_ klapp_stuhl oder klapp.stuhl

viel spaß damit, wüÜnsch ich euch!


Ausgabe
Java:
0. sehr 1
1. geehrte 1
2. damen 1
3. sehr 1
4. herren 1
5. hier 3
6. erfand 3
8. der 3
9. erfinder 3
10. konstantin 3
11. ein 3
...
34. ich 6
35. euch 6
36. zum 4.
 
Zuletzt bearbeitet:
Zurück