我很难理解包含名称和BST的结构链表是如何工作的。我缺乏理解的一个例子是,我试图编写一个函数来从列表中删除一个节点;我不知道如何将用户输入连接到我想删除的特定节点:
char courseName[100];
printf("Enter name of course to removen");
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
课程的头文件
typedef struct course{
char *name;
BST students;
} Course;
typedef struct courseNode {
Course data;
struct courseNode *next;
} *CourseList;
BST-的头文件
typedef struct bstNode {
long student_id;
struct bstNode *left;
struct bstNode *right;
} *BST;
我已经设置了标准的插入和删除功能。
其次,如何访问结构课程中的BST?例如,在"数学"课程中插入学生ID。我只习惯于在节点的数据部分处理int和chars。请尽量不要把代码墙扔给我,我宁愿学习,也不必再问了。感谢您抽出时间
1)为了根据课程名称删除特定节点,您不需要创建新的Course
类型对象(只是浪费内存),您可以在delete node函数中再写一个包装器,它将遍历每个节点,并将用户字符串courseName
与currentCourseNode->data.name
进行比较。
2) 您可以像(currentCourse.students)->student_id=xyz
一样简单地访问student_id
还要注意,在删除节点时,不要忘记释放Course.name, Course.students
指向的内存,否则可能会造成内存泄漏。