Hallo...
ich bräuchte mal Eure Hilfe in Sachen "Doppelt verkettete Liste". Ich habe mir schon mal ein STruct in meiner Header-Datei angelegt mit Printfunktion und Einfügefunktion.
...nun will ich in einer weiteren Datei "Liste.c", zum Test ein Wort Hallo einfügen und anschließend ausgeben. Aber um das zu machen, weiß ich nicht, auf was ich die Zeiger in der Funktion "anhaengen" setzen muss. Da fehlt mir noch die passende verstäntliche Anleitung dazu. Im Internet bin ich bisher nicht so fündig geworden, Habe ich evetuell bei der Initialisierung schon Fehler gemacht? -> Compiler zeigt mir in init_Liste(){} und anhaengen(node* list, void* neuer_String, void* (*get)(void*)){} fehler an.
Also es geht mir nur um das prinzip der Zeigersetzung wenn ich Wörter hinzufüge!
Lieben Dank im Voraus, Davicito.
ich bräuchte mal Eure Hilfe in Sachen "Doppelt verkettete Liste". Ich habe mir schon mal ein STruct in meiner Header-Datei angelegt mit Printfunktion und Einfügefunktion.
Java:
// Dieses Objekt legt die einzelnen Listenknoten für die doppelt verkettete Liste an
typedef struct
{
struct node* right; // Zeiger auf das Nachfolgerelement
struct node* left; // Zeiger auf das Vorgängerelement
void* content; // Für den Dateninhalt
} node;
node* init_Liste();
// Diese Funktion fügt einzelne Stings in die Liste ein
void anhaengen(node* list, void* neuer_String, void* (*get)(void*));
// Ausgabe aller Listenelemente
void print_all(node* list);
...nun will ich in einer weiteren Datei "Liste.c", zum Test ein Wort Hallo einfügen und anschließend ausgeben. Aber um das zu machen, weiß ich nicht, auf was ich die Zeiger in der Funktion "anhaengen" setzen muss. Da fehlt mir noch die passende verstäntliche Anleitung dazu. Im Internet bin ich bisher nicht so fündig geworden, Habe ich evetuell bei der Initialisierung schon Fehler gemacht? -> Compiler zeigt mir in init_Liste(){} und anhaengen(node* list, void* neuer_String, void* (*get)(void*)){} fehler an.
Java:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "Liste.h"
node* init_Liste()
{
node* n = (node*) malloc(sizeof(node));
n -> right = NULL;
n -> left = NULL;
n -> content = NULL;
n -> counter = -1;
return n;
}
//************************************ Listenfunktionen ***********************************
void anhaengen(node* list, void* neuer_String, void* (*get)(void*))
{
node* neu_Elem = (node*) malloc(sizeof(node)); // Seicher neuen Konoten besorgen
// Überprüfen, ob Speicher übergeben worden ist
if(neu_Elem == NULL)
{
printf("Listenelement konnte nicht angelegt werden, da kein Speicher vorhanden ist!");
exit(1);
}
//String / Wort an die Funktion "copySting" übergeben, um Speicher für den Zeiger "content" zu besorgen
void* tmp = get(neuer_String);
//Speicher, in dem nun das Wort liegt, an content anfügen.
neu_Elem -> content = tmp;
// Zeiger neu setzten
neu_Elem -> left = list -> left;
neu_Elem -> right = list -> right;
list -> right = NULL;
neu_Elem->right->left = neu_Elem; //Probleme mit den Zeigern - nicht klar
neu_Elem -> counter++;
return neu_Elem;
}
void print_all(node* list)
{
node* kopf = list;
node* aktl_Elem = list;
printf("%s", kopf -> content);
while(kopf != (aktl_Elem = aktl_Elem -> right))
{
printf("%s", aktl_Elem -> content);
printf("\n");
}
}
//***************************** Funktionen für Funktionsvariablen *************************
void* copyString(void* stringUebergabe)
{
char* string = (char*) stringUebergabe;
char* speicher = (char*) malloc(sizeof(strlen(string)+1));
//Nach Speicher reservierung immer prüfen, ob auch Speicher vorhanden war!!
if(speicher == NULL)
{
printf("Programm wurde beendet, da kein Speicher vorhanden ist!");
return(EXIT_FAILURE);
}
strcpy(speicher, stringUebergabe);
return speicher;
}
//************************************** Main-Funktion *************************************
int main(int argc, char** argv[])
{
node* kopf = init__Liste();
node* aktl_Elem = kopf;
anhaengen(aktl_Elem, &"Hallo", copyString);
print_all(aktl_Elem);
return EXIT_SUCCESS;
}
Also es geht mir nur um das prinzip der Zeigersetzung wenn ich Wörter hinzufüge!
Lieben Dank im Voraus, Davicito.
Zuletzt bearbeitet: