修改:刷了一段时间的题,水平渐涨,发现同学录真的要做成市面可行的应用的话,应该按学号建立二叉平衡树,红黑树是一个可行的选择。
在同学的推荐下,来到博客园来找志同道合的人交流代码。3个月后参加蓝桥杯比赛,报名的是C语言组,所以接下来3个月我会在此发布刷题时的心得与原创代码。
以下代码是我的课程设计自己花12小时编写的二叉树同学录。
反思一下自己的代码,删除节点用了取巧的办法,并没有完全删除节点内信息,仅仅是将学号数组第一个字符设为空,没有释放节点与接下来的连接节点。
为什么用二叉树,并没有掌握精髓,应该是要用二叉排序树按学号排序,这样搜索起来就快了。不过因为仅仅是课程设计,也没心思真的去做一个很完美的程序。
另外代码中有一段重复使用率比较高,也没去单独编一个函数,没有使用用C语言中字符串相关的函数,初学者也能弄懂。有兴趣的同学可以交流一下。
最后庆祝一下!第一次开通博客园账户,第一次写博客,感觉还是挺新奇的哈哈。
1 #include<stdio.h> 2 #include<stdlib.h> 3 typedef struct Student_node 4 { 5 char number[20]; 6 char name[20]; 7 char sex[20]; 8 char telephone[20]; 9 char interest[100]; 10 char favourite_sentence[1000]; 11 struct Student_node *left; 12 struct Student_node *right; 13 }student_node,*student; 14 int n,k,flagf=1,flagd=1,flaga=1,c=0,insert; 15 char findnumber[20]; 16 void init(student *stu) 17 { 18 *stu=NULL; 19 } 20 int make_student(student *stu) 21 { 22 int i; 23 char t; 24 if(k==0) 25 { 26 *stu=NULL; 27 return 0; 28 } 29 printf("当前节点有值则输入1,无值则输入0 "); 30 scanf(" %c",&t); 31 if(t=='0') 32 *stu=NULL; 33 else if(t=='1') 34 { 35 *stu=(student)malloc(sizeof(student_node)); 36 printf("输入学号 "); 37 scanf(" %c",&t); 38 (*stu)->number[0]=t; 39 for(i=1;t!=' ';i++) 40 { 41 scanf("%c",&t); 42 (*stu)->number[i]=t; 43 } 44 t='