Hello world!(内含自己编写的C语言二叉树同学录)

  在同学的推荐下,来到博客园来找志同道合的人交流代码。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\n");
 30     scanf("\n%c",&t);
 31     if(t==‘0‘)
 32         *stu=NULL;
 33     else if(t==‘1‘)
 34     {
 35         *stu=(student)malloc(sizeof(student_node));
 36         printf("输入学号\n");
 37         scanf("\n%c",&t);
 38         (*stu)->number[0]=t;
 39         for(i=1;t!=‘\n‘;i++)
 40         {
 41             scanf("%c",&t);
 42             (*stu)->number[i]=t;
 43         }
 44         t=‘\0‘;
 45         printf("输入名字\n");
 46         for(i=0;t!=‘\n‘;i++)
 47         {
 48             scanf("%c",&t);
 49             (*stu)->name[i]=t;
 50         }
 51         t=‘\0‘;
 52         printf("输入性别\n");
 53         for(i=0;t!=‘\n‘;i++)
 54         {
 55             scanf("%c",&t);
 56             (*stu)->sex[i]=t;
 57         }
 58         t=‘\0‘;
 59         printf("输入电话\n");
 60         for(i=0;t!=‘\n‘;i++)
 61         {
 62             scanf("%c",&t);
 63             (*stu)->telephone[i]=t;
 64         }
 65         t=‘\0‘;
 66         printf("输入兴趣、爱好\n");
 67         for(i=0;t!=‘\n‘;i++)
 68         {
 69             scanf("%c",&t);
 70             (*stu)->interest[i]=t;
 71         }
 72         t=‘\0‘;
 73         printf("输入座右铭\n");
 74         for(i=0;t!=‘\n‘;i++)
 75         {
 76             scanf("%c",&t);
 77             (*stu)->favourite_sentence[i]=t;
 78         }
 79         t=‘\0‘;
 80         k--;
 81         make_student(&((*stu)->left));
 82         make_student(&((*stu)->right));
 83     }
 84     return 0;
 85 }
 86 int show_student(student stu)
 87 {
 88     int i;
 89     if(k==0)
 90         return 0;
 91     if(stu!=NULL)
 92     {
 93         if(stu->number[0]!=‘\0‘)
 94         {
 95             for(i=0;stu->number[i]!=‘\n‘;i++)
 96                 printf("%c",stu->number[i]);
 97             printf("\n");
 98             for(i=0;stu->name[i]!=‘\n‘;i++)
 99                 printf("%c",stu->name[i]);
100             printf("\n");
101             for(i=0;stu->sex[i]!=‘\n‘;i++)
102                 printf("%c",stu->sex[i]);
103             printf("\n");
104             for(i=0;stu->telephone[i]!=‘\n‘;i++)
105                 printf("%c",stu->telephone[i]);
106             printf("\n");
107             for(i=0;stu->interest[i]!=‘\n‘;i++)
108                 printf("%c",stu->interest[i]);
109             printf("\n");
110             for(i=0;stu->favourite_sentence[i]!=‘\n‘;i++)
111                 printf("%c",stu->favourite_sentence[i]);
112             printf("\n");
113             printf("-----------------\n");
114         }
115         k--;
116         show_student(stu->left);
117         show_student(stu->right);
118     }
119     return 0;
120 }
121 int find(student stu)
122 {
123     int i,flag=0;
124     if(k==0)
125         return 0;
126     if(stu!=NULL)
127     {
128         k--;
129         for(i=0;stu->number[i]!=‘\n‘||findnumber[i]!=‘\n‘;i++)
130         {
131             if(findnumber[i]!=stu->number[i])
132             {
133                 flag=1;
134                 break;
135             }
136         }
137         if(!flag&&stu->number[i]==findnumber[i])
138         {
139             flagf=0;
140             for(i=0;stu->number[i]!=‘\n‘;i++)
141                 printf("%c",stu->number[i]);
142             printf("\n");
143             for(i=0;stu->name[i]!=‘\n‘;i++)
144                 printf("%c",stu->name[i]);
145             printf("\n");
146             for(i=0;stu->sex[i]!=‘\n‘;i++)
147                 printf("%c",stu->sex[i]);
148             printf("\n");
149             for(i=0;stu->telephone[i]!=‘\n‘;i++)
150                 printf("%c",stu->telephone[i]);
151             printf("\n");
152             for(i=0;stu->interest[i]!=‘\n‘;i++)
153                 printf("%c",stu->interest[i]);
154             printf("\n");
155             for(i=0;stu->favourite_sentence[i]!=‘\n‘;i++)
156                 printf("%c",stu->favourite_sentence[i]);
157             printf("\n");
158             printf("-----------------\n");
159             return 0;
160         }
161         else
162         {
163             find(stu->left);
164             find(stu->right);
165         }
166     }
167     return 0;
168 }
169 int delete_student(student *stu)
170 {
171     int i,flag=0;
172     if(k==0)
173         return 0;
174     if((*stu)!=NULL)
175     {
176         k--;
177         for(i=0;(*stu)->number[i]!=‘\n‘||findnumber[i]!=‘\n‘;i++)
178         {
179             if(findnumber[i]!=(*stu)->number[i])
180             {
181                 flag=1;
182                 break;
183             }
184         }
185         if(!flag&&(*stu)->number[i]==findnumber[i])
186         {
187             flagd=0;
188             (*stu)->number[0]=‘\0‘;
189             return 0;
190         }
191         else
192         {
193             delete_student(&((*stu)->left));
194             delete_student(&((*stu)->right));
195         }
196     }
197     return 0;
198 }
199 int add_student(student *stu)
200 {
201     int i;
202     char t;
203     if(k==0)
204         return 0;
205     if((*stu)!=NULL)
206     {
207         if((*stu)->number[0]==‘\0‘)
208         {
209             flaga=0;
210             printf("输入学号\n");
211             scanf("\n%c",&t);
212             (*stu)->number[0]=t;
213             for(i=1;t!=‘\n‘;i++)
214             {
215                 scanf("%c",&t);
216                 (*stu)->number[i]=t;
217             }
218             t=‘\0‘;
219             printf("输入名字\n");
220             for(i=0;t!=‘\n‘;i++)
221             {
222                 scanf("%c",&t);
223                 (*stu)->name[i]=t;
224             }
225             t=‘\0‘;
226             printf("输入性别\n");
227             for(i=0;t!=‘\n‘;i++)
228             {
229                 scanf("%c",&t);
230                 (*stu)->sex[i]=t;
231             }
232             t=‘\0‘;
233             printf("输入电话\n");
234             for(i=0;t!=‘\n‘;i++)
235             {
236                 scanf("%c",&t);
237                 (*stu)->telephone[i]=t;
238             }
239             t=‘\0‘;
240             printf("输入兴趣、爱好\n");
241             for(i=0;t!=‘\n‘;i++)
242             {
243                 scanf("%c",&t);
244                 (*stu)->interest[i]=t;
245             }
246             t=‘\0‘;
247             printf("输入座右铭\n");
248             for(i=0;t!=‘\n‘;i++)
249             {
250                 scanf("%c",&t);
251                 (*stu)->favourite_sentence[i]=t;
252             }
253             t=‘\0‘;
254             return 0;
255         }
256         else
257         {
258             add_student(&((*stu)->left));
259             add_student(&((*stu)->right));
260         }
261     }
262     return 0;
263 }
264 int can_insert(student stu)
265 {
266     if(stu!=NULL)
267     {
268         c++;
269         if(stu->left==NULL||stu->right==NULL)
270         {
271             printf("%d ",c);
272             can_insert(stu->left);
273             can_insert(stu->right);
274         }
275         else
276         {
277             can_insert(stu->left);
278             can_insert(stu->right);
279         }
280     }
281     return 0;
282 }
283 void creat(student *stu)
284 {
285     int i;
286     char t;
287     *stu=(student)malloc(sizeof(student_node));
288     n++;
289     printf("输入学号\n");
290     scanf("\n%c",&t);
291     (*stu)->number[0]=t;
292     for(i=1;t!=‘\n‘;i++)
293     {
294         scanf("%c",&t);
295         (*stu)->number[i]=t;
296     }
297     t=‘\0‘;
298     printf("输入名字\n");
299     for(i=0;t!=‘\n‘;i++)
300     {
301         scanf("%c",&t);
302         (*stu)->name[i]=t;
303     }
304     t=‘\0‘;
305     printf("输入性别\n");
306     for(i=0;t!=‘\n‘;i++)
307     {
308         scanf("%c",&t);
309         (*stu)->sex[i]=t;
310     }
311     t=‘\0‘;
312     printf("输入电话\n");
313     for(i=0;t!=‘\n‘;i++)
314     {
315         scanf("%c",&t);
316         (*stu)->telephone[i]=t;
317     }
318     t=‘\0‘;
319     printf("输入兴趣、爱好\n");
320     for(i=0;t!=‘\n‘;i++)
321     {
322         scanf("%c",&t);
323         (*stu)->interest[i]=t;
324     }
325     t=‘\0‘;
326     printf("输入座右铭\n");
327     for(i=0;t!=‘\n‘;i++)
328     {
329         scanf("%c",&t);
330         (*stu)->favourite_sentence[i]=t;
331     }
332     t=‘\0‘;
333     init(&((*stu)->left));
334     init(&(*stu)->right);
335 }
336 int creat_student(student *stu)
337 {
338     int x;
339     if(stu!=NULL)
340     {
341         c++;
342         if(c==insert)
343         {
344             if((*stu)->left==NULL&&(*stu)->right==NULL)
345             {
346                 printf("插入左节点请输入0,插入右节点请输入1\n");
347                 scanf("%d",&x);
348                 if(!x)
349                 {
350                     creat(&((*stu)->left));
351                     return 0;
352                 }
353                 else
354                 {
355                     creat(&((*stu)->right));
356                     return 0;
357                 }
358             }
359             else if((*stu)->left==NULL)
360             {
361                 printf("插入左节点\n");
362                 creat(&((*stu)->left));
363                 return 0;
364             }
365             else if((*stu)->right==NULL)
366             {
367                 printf("插入右节点\n");
368                 creat(&((*stu)->right));
369                 return 0;
370             }
371         }
372         else
373         {
374             if((*stu)->left!=NULL)
375             creat_student(&((*stu)->left));
376             if((*stu)->right!=NULL)
377             creat_student(&((*stu)->right));
378         }
379     }
380     return 0;
381 }
382 int main()
383 {
384     char x;
385     int i,key=0;
386     student stu;
387     printf("***************************创建同学录***************************\n");
388     printf("学生个数\n");
389     scanf("%d",&n);
390     k=n;
391     make_student(&stu);
392     system("pause");
393     while(key!=5)
394     {
395         system("cls");
396         printf("|***********************************************************|\n");
397         printf("|**************************同学录***************************|\n");
398         printf("|***********************************************************|\n\n\n");
399         printf("1、遍历输出  2、查找  3、删除  4、增加  5、退出程序\n");
400         scanf("%d",&key);
401         if(key==1)
402         {
403             k=n;
404             printf("学号、姓名、性别、电话、爱好、座右铭\n-----------------\n");
405             show_student(stu);
406         }
407         if(key==2)
408         {
409             printf("请输入要查找的学生的学号\n");
410             k=n;
411             scanf("\n%c",&x);
412             findnumber[0]=x;
413             for(i=1;x!=‘\n‘;i++)
414             {
415                 scanf("%c",&x);
416                 findnumber[i]=x;
417             }
418             printf("学号、姓名、性别、电话、爱好、座右铭\n-----------------\n");
419             find(stu);
420             if(flagf)
421                 printf("查无此人!\n");
422             flagf=1;
423         }
424         if(key==3)
425         {
426             printf("请输入要删除的学生的学号\n");
427             k=n;
428             scanf("\n%c",&x);
429             findnumber[0]=x;
430             for(i=1;x!=‘\n‘;i++)
431             {
432                 scanf("%c",&x);
433                 findnumber[i]=x;
434             }
435             delete_student(&stu);
436             if(flagd)
437             printf("输入学号不正确,删除失败!\n");
438             else
439             printf("删除成功!\n");
440             flagd=1;
441         }
442         if(key==4)
443         {
444             k=n;
445             add_student(&stu);
446             if(flaga)
447             {
448                 c=0;
449                 printf("以下节点可供插入\n");
450                 can_insert(stu);
451                 printf("\n");
452                 printf("插入到哪个节点之下?\n");
453                 scanf("%d",&insert);
454                 c=0;
455                 creat_student(&stu);
456             }
457             flaga=1;
458         }
459         if(key==5)
460         {
461             exit(0);
462         }
463         system("pause");
464     }
465     return 0;
466 }
时间: 2024-11-05 22:43:43

Hello world!(内含自己编写的C语言二叉树同学录)的相关文章

Java编写的C语言词法分析器

这是java编写的C语言词法分析器,我也是参考很多代码,然后核心代码整理起来,放在QQ空间和博客上,目的是互相学习借鉴,希望可以得到高手改进.这个词法分析器实现的功能有打开文件.保存文件.打开帮助文档.文本域内容的剪切和复制和黏贴.进行词法分析 程序的项目结构如图,Word类和Unidentifiable类是两个JavaBean类,存放的参数有两个row(整型).word(String),row用于获取行数,word用于获取标识符,LexerFrame是词法分析器的界面类,Analyze封装了进

编写一个C语言函数,要求输入一个url,输出该url是首页、目录页或者其他url

编写一个C语言函数,要求输入一个url,输出该url是首页.目录页或者其他url 首页.目录页或者其他url 如下形式叫做首页: militia.info/ www.apcnc.com.cn/ http://www.cyjzs.comwww.greena888.com/ www.800cool.net/ http://hgh-products.my-age.net/ 如下形式叫做目录页: thursdaythree.net/greenhouses--gas-global-green-house-

visual studio 2019安装配置可编写c/c++语言的IDE环境

IDE的下载和安装: 首先,到visual studio官网下载vs2019的安装程序. 学生.或个人开发者免费下载第一个community版本. 下载完成后双击进行安装.安装时要选择安装工作负载.可根据需要勾选相应的负载.因为我们要写c/c++程序,所以勾选了这个使用c++的桌面开发,然后点击右下角安装按钮继续安装. 如果安装的时候忘记选择工作负载,或者安装完成后需要更改工作负载,可以在此打开vs2019的安装程序,然后在点击已安装程序中的修改按钮进行修改: 进入工作负载配置界面做好勾选后点击

【Ubuntu】编写一个c语言代码

安装 sudo apt-get  build-depgcc coding:http://www.cnblogs.com/zero1665/archive/2009/11/03/1595510.html 简单来说 gedit 1.c          ///创建 gcc 1.c -o 1     ////编译 ./1                 ////运行rm 1.c           ////删除 i进入编辑模式

VSCode编写C/C++语言,配置文件和注意事项

前言 主要是自己先下载好VSCode,然后在自己电脑上安装好就行了,但是VSCode是编辑器,不是IDE,所以需要自己配置文件,主要有四个都是以.json结尾的文件,这里默认已经装过C/C++的编辑器,也就意味着电脑上有MINGW64,也就说明你自己先要找到他们的路径为后续配置做好准备. 把gcc.exe,gdb.exe的路径添加到环境变量里面,也就是MINGW64的bin目录. 开始打开一个文件夹,在VSCode中打开一个文件夹,然后创建一个cpp程序.再点开调试栏,然后生成文件.或者自己创建

C语言 二叉树顺序存储结构的先序遍历算法

#include <stdio.h> #include <stdlib.h> #include <string.h> #define __MAX_LENGTH__ 20 typedef struct SqStack{//调用栈     int data[__MAX_LENGTH__];     int top; }SqStack; typedef struct SqBiTree{//顺序存储二叉树     elemType data[__MAX_LENGTH__];  

编写最简单的二叉树

二叉树结构 源码 -swift- // // Node.swift // swift-TreeStructure // // Created by YouXianMing on 15/10/19. // Copyright © 2015年 ZiPeiYi. All rights reserved. // import UIKit class Node: NSObject { /// 节点名字 var nodeName : String? /// 左节点 var leftNode : Node?

c语言二叉树的递归建立

#include <stdio.h> #include <string.h> #include <stdlib.h> #include <malloc.h> typedef struct node{ TYPE data; struct node *leff; struct node *right; }Node,*pNode; typedef char TYPE; typedef struct node{ TYPE data; struct node *lef

C语言二叉树的建立与遍历

二叉树的建立和遍历都要用到递归,先暂时保存一下代码,其中主要是理解递归的思想,其它的就都好理解了.这里是三种遍历方式,其实理解一种,其它的几个就都理解了,就是打印出来的顺序不一样而已.建立和遍历的方式差不多.也分好几种方式建立,这里 就写一种,就是先序建立 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 typedef struct TreeNode{ 5 char ch; 6 struct TreeNode *lchild, *rch