目前正试图弄清楚要在main.c文件中写什么。给我的程序有一个BST来存储长数据,而有一个存储字符串的链表。到目前为止,数据结构是具有节点的二叉搜索树,并且这些节点中的每一个都包含空链表。
我的目标是通过用户输入在BST中找到一个节点,然后将字符串添加到链表中。到目前为止,这是我的代码,我现在卡住了,因为我不确定我将如何在main.c函数中实现它。
//list.h file
typedef struct bstNode { //pointer to the bst
long data; //storing long data types from -2,147,483,648 to 2,147,483,647
List courses; //this is the list of courses
struct bstNode *left; //left child of the tree
struct bstNode *right; //right child of the tree
} *BSTNodePtr;
typedef struct bst {
BSTNodePtr root; //points to the root of the tree
} BST;
BST new_bst();
BSTNodePtr find_bst_node(BSTNodePtr self, long n); //finds a student
void find_bst(BST *self, long n); //wrapper for finding a student
//bst.c file
BSTNodePtr find_bst_node(BSTNodePtr self, long n) {
if (self == NULL || (n == self->data)) {
return self;
}
else if (n < self->data) {
return find_bst_node(self->left, n);
}
else {
return find_bst_node(self->right, n);
}
}
void find_bst(BST *self, long n) { //wrapper function for find_bst_node
return find_bst_node(self->root, n);
}
// list.h file
typedef struct listNode {
char* data;
struct listnode *next;
} *ListNodePtr;
typedef struct list {
ListNodePtr head;
} List;
List new_list(); //creates a new list
void insert_at_front(List *self, char* data);
//main.c file
void option_enrol_student(BST *self) { //finds the student, and then adds the courses into the empty list.
long input = 0;
char course_input;
long result; //var result to return BSTNodePtr
printf("Enter the ID of the student you want to enrol\n");
scanf("%ld", &input);
result = find_bst_node(self, input); //looks for students in the BST this returns the result
printf("What course would you like to enrol this student into?");
scanf("%ld", &course_input);
//access the result and adds user input into linked list.
insert_at_front(self, course_input);insert_at_front
}
find_bst_node返回一个节点,我不知道如何获得该返回并将用户输入添加到该节点的链表中。
答案 0 :(得分:1)
以下是一些问题,但我不确定是否涵盖所有问题。
char course_input;
....
scanf("%ld", &course_input);
您将course_input
设为char,然后使用%ld
进行扫描。这对于char来说是不正确的。此外,我怀疑你想要一个炭。我想你想要一个字符串。像:
char course_input[64] = {0};
....
scanf("%63s", course_input);
另一个问题是result
long result; //var result to return BSTNodePtr
当你在评论中写下它应该是BSTNodePtr
所以为什么要这么长?此外,您根本不使用result
。也许你想要:
BSTNodePtr result;
....
result = find_bst(self, input);
....
insert_at_front(result, course_input);