2016-04-11 26 views
0

Ich habe Probleme zu verstehen, wie eine verkettete Liste von Strukturen, die einen Namen und BST enthält, funktioniert. Ein Beispiel für mein mangelndes Verständnis ist, wie ich eine Funktion schreiben möchte, um einen Knoten aus der Liste zu entfernen; Ich kann nicht herausfinden, wie Benutzereingaben an den spezifischen Knoten verbinden i löschen möchten:Zugriff auf Strukturen in einer verknüpften Liste

char courseName[100]; 
printf("Enter name of course to remove\n"); 
scanf("%s", &courseName); 
Course *deleteCourse = courseName; //definitely wrong, assuming something here to connect the input to the struct node goes here 
delete_from_list(&listcourses, Whatgoeshere); //I already have code for delete function 
//set bst of course to null 

Header-Datei für KURS

typedef struct course{ 
char *name; 
BST students; 
} Course; 

typedef struct courseNode { 
Course data; 
struct courseNode *next; 
} *CourseList; 

Header-Datei für BST

typedef struct bstNode { 
long student_id; 
struct bstNode *left; 
struct bstNode *right; 
} *BST; 

ich habe Standard-Einfüge- und Löschfunktionen bereits eingerichtet.

Zweitens, wie gehe ich über den Zugriff auf die BST innerhalb der Struktur natürlich? Zum Beispiel, eine Studenten ID in den Kurs "Mathematik" einfügen. Ich bin nur im Umgang mit Ints und Zeichen im Datenbereich von Knoten gewohnt. Bitte versuchen Sie nicht nur Wände von Code auf mich zu werfen, ich würde lieber lernen und nicht noch einmal fragen müssen. Vielen Dank für Ihre Zeit

Antwort

1

1) Zum Löschen bestimmter Knoten basierend auf Kursname müssen Sie nicht neue Course Art Objekt erstellen (nur Verschwendung von Speicher), können Sie einen weiteren Wrapper zu Ihrem löschen Knoten Funktion schreiben, wo es wird Iteriere über jeden Knoten und vergleiche die Benutzerzeichenfolge courseName mit currentCourseNode->data.name.

2) können Sie STUDENT_ID so einfach zugreifen wie (currentCourse.students)->student_id=xyz

auch beachten, während der Knoten zu löschen vergessen Sie nicht, Speicher von Course.name, Course.students zeigte auf dealloc sonst kann es Speicherleck erstellen.

+0

auch für Ihre Zeile 'Kurs * deleteCourse = Kursname' kann es geschrieben werden als' Kurs deleteCourse = {Kursname, null} 'aber keine Notwendigkeit wie erklärt –

+0

ja Meine Löschfunktion braucht Arbeit: strcmp zu tun, aber es wird nicht dauern strcmp (current-> data, data), da der erste Parameter vom Typ "Course" und nicht char ist. Danke für den Input-Kumpel, gab mir etwas, worüber ich nachdenken konnte, habe heute Nacht einen harten Riss und sehe, wo ich –

+0

oooooh current-> data.name finde, das ist der richtige Weg, es zu tun? –

Verwandte Themen