2016-04-11 14 views
0

名前とBSTを含む構造体のリンクリストがどのように機能するのか理解できません。私の理解の欠如の例は、リストからノードを削除する関数を書く方法です。私が持っているコースのリンクリスト内の構造体へのアクセス

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 

ヘッダファイル

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; 

:私は私が削除したい特定のノードへのユーザー入力を接続する方法を見つけ出すカント標準の挿入および削除機能が既に設定されています。

第2に、構造コース内でBSTにアクセスするにはどうすればよいですか?たとえば、学生IDをコース「数学」に挿入します。 私はノードのデータセクションのintとcharを扱うことに慣れています。ちょうど私のコードの壁を投げないようにしてください、私はむしろ学び、再度尋ねる必要はありません。ありがとうございました

答えて

1

1)コース名に基づいて特定のノードを削除する場合、新しいCourseタイプのオブジェクト(メモリが浪費される)を作成する必要はありません。削除ノード関数にもう1つのラッパーを書き込むことができます各ノードで反復処理を行い、ユーザー文字列courseNamecurrentCourseNode->data.nameを比較します。ノードを削除すると、それはメモリリークを作成することができ、他のCourse.name, Course.studentsが指すメモリをDEALLOCすることを忘れないでくださいしているときに(currentCourse.students)->student_id=xyz

ような単純なようSTUDENT_IDにアクセスすることができます

2)にも注意してください。

+0

あなたの行 'Course * deleteCourse = courseName'にも' Course deleteCourse = {courseName、null} 'と書くことができますが、説明は不要です –

+0

yea私のdelete関数は仕事が必要です:strcmpを実行しようとしますが、 strcmp(current-> data、data)。最初のパラメータはchar型ではなく "Course"型です。入力メイトのおかげで、私は病気について考えるために何かを与え、今夜はそれにハードクラックを持ってどこを参照してください –

+0

oooooh current-> data.nameは、それを行う正しい方法thats? –

関連する問題