Vermutlich nicht genau das was du machen musst, aber ich musste sowas ähnliches auch mal für die FH machen vllt kannst du damit ja was anfangen:
Code:
#include <stdio.h>
#include <stdlib.h>
struct eintrag // Deklaration eines Listenelements
{
char wort[20];
struct eintrag *next;
};
typedef struct eintrag element;
struct eintrag *liste; //Zeiger auf den Anfang der Liste
element *erstellen (element* ptr);
element *hinzufuegen (element* ptr);
element *loeschen (element* ptr);
void anzeigen (element* ptr);
int main (void)
{
char c;
do
{
printf ("\tHAUPTMENUE:\n\n\t1 - Liste erstellen\
\n\t2 - Element hinzufuegen\n\t3 - Element loeschen\
\n\t4 - Programm beenden\n");
c=getchar();
switch (c)
{
case '1': liste = (element*)malloc(sizeof(element));
getchar();
erstellen (liste);
anzeigen (liste);
break;
case '2': getchar();
anzeigen (liste);
hinzufuegen (liste);
anzeigen (liste);
break;
case '3': getchar();
anzeigen (liste);
loeschen (liste);
anzeigen (liste);
break;
}
}
while (c!='4');
}
element *erstellen (element* ptr)
{
printf ("Wort eingeben ('ENDE' fuer Ende der Liste): ");
scanf("%s", ptr->wort); //Wort einlesen
if (strcmp(ptr->wort,"ENDE")==0) ptr->next=NULL;
else
{
ptr->next = (element*) malloc(sizeof(element));
erstellen (ptr->next);
}
return;
}
void anzeigen (element* ptr)
{
if (liste==NULL)return;
if (ptr->next != NULL)
{
printf ("%s\n",ptr->wort);
anzeigen (ptr->next);
}
return;
}
element *hinzufuegen (element* ptr)
{
struct eintrag* ptrn;
struct eintrag* ptrv;
char d [20];
if (liste==NULL)
{
printf ("Es wurde noch keine Liste angelegt, sie muessen zuerst eine Liste anlegen\n");
return;
}
printf ("Vor welchem Element soll das Wort eingefuegt werden?:");
fflush (stdin);
gets (d);
do
{
if (strcmp(ptr->wort,d)==0)
{
ptrn=ptr;
ptr=(element*)malloc(sizeof(element));
printf ("Wort eingeben: ");
scanf("%s", ptr->wort);
ptr->next=ptrn;
if (ptrn!=liste)ptrv->next=ptr;
if (ptrn==liste)liste=ptr;
return;
}
ptrv=ptr;
ptr=ptr->next;
}
while (ptr->next!=NULL);
printf("Element nicht gefunden\n");
return;
}
element *loeschen (element* ptr)
{
struct eintrag* ptrn;
struct eintrag* ptrv;
char d [20];
if (liste==NULL)
{
printf ("Sie muessen zuerst eine Liste anlegen\n");
return;
}
printf ("Welches Element soll geloescht werden?:");
fflush (stdin);
gets (d);
ptrv=ptr;//ersten Zeiger in pointerv laden
do
{
if (strcmp(ptr->wort,d)==0)
{
ptrn=ptr->next;
if ((ptrv!=liste)||(strcmp(ptrv->wort,d)))ptrv->next=ptrn;
else liste=ptrn;
free (ptr);
ptr=liste;
if (strcmp(ptr->wort,"ENDE")==0)
{
liste=NULL;
free (ptrn);
fflush (stdin);
}
return;
}
ptrv=ptr;
ptr=ptr->next;
}
while (ptr->next!=NULL);
}
Anmerkung: Ich habe das a) unter Linux zusammengehackt und b) jetzt nicht noch mal geteste ob es sich fehlerfrei kompilieren lässt. Außerdem meine ich mich zu erinnern da das ein oder andere Problem mit ungewünschten ausgaben u.ä gehabt zu haben aber na ja
@PornoPenner war bei mir aber auch nicht anderst das ist in der Nacht vor der Abgabe entstanden