Hallo erstmal!
Ich stehe vor dem Problem, dass ich in meiner verketteten Liste ein Element, welches ich vorher eingegeben habe, wieder löschen kann. Und zwar steht in der Aufgabenstellung, dass das zu löschende Element von dem Benutzer abgefragt werden soll. Ich schaffe es nicht, dass ich den Namen des zu löschenden Elements eingeben kann. Das Programm löscht mir immmer nur das erste Element der Liste.
Würde mich über jede Hilfe freuen.
Ich stehe vor dem Problem, dass ich in meiner verketteten Liste ein Element, welches ich vorher eingegeben habe, wieder löschen kann. Und zwar steht in der Aufgabenstellung, dass das zu löschende Element von dem Benutzer abgefragt werden soll. Ich schaffe es nicht, dass ich den Namen des zu löschenden Elements eingeben kann. Das Programm löscht mir immmer nur das erste Element der Liste.
Würde mich über jede Hilfe freuen.
Code:
//------------------------------------------------------------------------
//
// Datei: programmname.cpp
//
// Name:
// Matr.-Nr.: 123456
// Datum: xx.xx.2009 V1.0
// geaendert: xx.xx.2009
//
/*Schreiben Sie ein Programm, das eine Wörterliste verwaltet. Die Wörter, die z. B. Namen,
Orte oder Gegenstände bezeichnen, werden in einer verketteten Liste gespeichert. Mit Hilfe
eines Menüs sollen folgende Funktionen gewählt werden können:
a) Liste erstellen
der Speicherplatz für einen neues Wort wird erstellt und das Wort eingegeben. Die
Eingabe wird so lange wiederholt, bis "ENDE" eingegeben wird.
b) Element hinzufügen
der Speicherplatz für ein neues Wort wird erstellt und das Wort eingegeben. Es wird
gefragt, vor welchem Element das neue Wort eingefügt werden soll.
c) Element löschen
Das zu löschende Wort wird abgefragt. Es wird gelöscht und sein Speicherplatz
wieder freigegeben.
Nach jeder Bearbeitung wird die aktuelle Wortliste vor dem Hauptmenue wieder auf dem
Bildschirm angezeigt. */
// Eingabe: Angabe der erforderlichen Eingaben (Benutzer / Datei)
//
// Ausgabe: Angabe der vom Programm generierten Ausgaben
//
//------------------------------------------------------------------------
#include <stdio.h> // Bibliothek fuer printf, scanf, ...
#include <conio.h> // Bibliothek fuer getch, gets, ...
#include <string.h>
#include <stdlib.h>
struct eintrag { // Deklaration eines Listenelements
char wort[20];
struct eintrag *next;
};
typedef struct eintrag element; // Typedef -> typedef ist eine Deklaration, wird zunächst kein Programmcode vom Compiler erzeugt
struct eintrag *liste; //Zeiger auf den Anfang der Liste
//Die Funktion "erstellen" wird zunächst mit dem Zeiger auf den Listenanfang aufgerufen,
//dann rekursiv jeweils mit dem Zeiger auf das nächste Element.
void erstellen (element* ptr){
printf ("Wort eingeben 'ENDE' fuer Ende der Liste: ");
scanf("%s", ptr->wort);
if (strcmp(ptr->wort,"ENDE")==0) ptr->next=NULL;
else {
ptr->next = (element*) malloc(sizeof(element));
erstellen (ptr->next);
}
return;
}
void hinzufügen (element* ptr) {
}
//Das letzte Element der Liste enthält so das Wort "ende" und den Zeiger next = NULL. Die
//Funktion "anzeigen" wird auch mit dem Zeiger auf das erste Element aufgerufen, dann
//rekursiv mit dem next-Zeiger auf das jeweils nächste Element.
void anzeigen (element* ptr){
if (ptr->next != NULL) {
printf ("%s\n",ptr->wort);
anzeigen (ptr->next);
}
return;
}
/*void loeschen (element*ptr, char *loeschen) {
// Dazu muss man den next-Zeiger der Liste auf das neue Element setzen, und den next-Zeiger des neuen Element
// auf den alten Wert des next-Zeigers der Liste
liste=ptr->next;
//printf ("Geben Sie das zu loeschende Wort ein: ");
//scanf("%s", ptr->wort);
//ptr = liste ->next;
//liste->next =liste->next->next;
free(ptr);
system("cls");
}
*/
void loeschen(element *ptr) {
printf("%s wurde geloescht", ptr->wort);
liste->next = liste->next->next;
free(ptr);
getch();
system ("cls");
}
int main () {
int z;
do {
char eingabe[20];
printf("HAUPTMENUE:\n1 - Liste erstellen\n2 - Element hinzufuegen\n3 - Element loeschen\n4 - Liste anzeigen\n5 - Programm beenden\n\nBitte waehlen Sie: ");
z=getche();
printf ("\n\n");
if (z=='1') {
//Beim Erstellen einer neuen Liste muss im Hauptprogramm zunächst der Speicherplatz für
//das Anfangselement mit der Adresse "liste" reserviert werden. Die Speicherreservierung
//für die folgenden Elemente erfolgt in der Funktion erstellen.
liste = (element*)malloc(sizeof(element));
erstellen(liste);
}
system("cls");
if (z=='2') {
}
if (z=='3') {
printf("Zu loeschendes Wort eingeben: ");
scanf("%s", eingabe);
loeschen(liste);
}
if (z=='4') {
printf("Der Inhalt ihrer gespeicherten Liste:\n");
anzeigen(liste);
getch();
system ("cls");
}
} while (z!='5');
}