Hello world!(内含自己编写的C语言二叉树同学录)
修改:刷了一段时间的题,水平渐涨,发现同学录真的要做成市面可行的应用的话,应该按学号建立二叉平衡树,红黑树是一个可行的选择。
在同学的推荐下,来到博客园来找志同道合的人交流代码。3个月后参加蓝桥杯比赛,报名的是C语言组,所以接下来3个月我会在此发布刷题时的心得与原创代码。
以下代码是我的课程设计自己花12小时编写的二叉树同学录。
反思一下自己的代码,删除节点用了取巧的办法,并没有完全删除节点内信息,仅仅是将学号数组第一个字符设为空,没有释放节点与接下来的连接节点。
为什么用二叉树,并没有掌握精髓,应该是要用二叉排序树按学号排序,这样搜索起来就快了。不过因为仅仅是课程设计,也没心思真的去做一个很完美的程序。
另外代码中有一段重复使用率比较高,也没去单独编一个函数,没有使用用C语言中字符串相关的函数,初学者也能弄懂。有兴趣的同学可以交流一下。
最后庆祝一下!第一次开通博客园账户,第一次写博客,感觉还是挺新奇的哈哈。
#include<stdio.h>
#include<stdlib.h>
typedef struct Student_node
{
char number[];
char name[];
char sex[];
char telephone[];
char interest[];
char favourite_sentence[];
struct Student_node *left;
struct Student_node *right;
}student_node,*student;
int n,k,flagf=,flagd=,flaga=,c=,insert;
char findnumber[];
void init(student *stu)
{
*stu=NULL;
}
int make_student(student *stu)
{
int i;
char t;
if(k==)
{
*stu=NULL;
return ;
}
printf("当前节点有值则输入1,无值则输入0\n");
scanf("\n%c",&t);
if(t=='')
*stu=NULL;
else if(t=='')
{
*stu=(student)malloc(sizeof(student_node));
printf("输入学号\n");
scanf("\n%c",&t);
(*stu)->number[]=t;
for(i=;t!='\n';i++)
{
scanf("%c",&t);
(*stu)->number[i]=t;
}
t='\0';
printf("输入名字\n");
for(i=;t!='\n';i++)
{
scanf("%c",&t);
(*stu)->name[i]=t;
}
t='\0';
printf("输入性别\n");
for(i=;t!='\n';i++)
{
scanf("%c",&t);
(*stu)->sex[i]=t;
}
t='\0';
printf("输入电话\n");
for(i=;t!='\n';i++)
{
scanf("%c",&t);
(*stu)->telephone[i]=t;
}
t='\0';
printf("输入兴趣、爱好\n");
for(i=;t!='\n';i++)
{
scanf("%c",&t);
(*stu)->interest[i]=t;
}
t='\0';
printf("输入座右铭\n");
for(i=;t!='\n';i++)
{
scanf("%c",&t);
(*stu)->favourite_sentence[i]=t;
}
t='\0';
k--;
make_student(&((*stu)->left));
make_student(&((*stu)->right));
}
return ;
}
int show_student(student stu)
{
int i;
if(k==)
return ;
if(stu!=NULL)
{
if(stu->number[]!='\0')
{
for(i=;stu->number[i]!='\n';i++)
printf("%c",stu->number[i]);
printf("\n");
for(i=;stu->name[i]!='\n';i++)
printf("%c",stu->name[i]);
printf("\n");
for(i=;stu->sex[i]!='\n';i++)
printf("%c",stu->sex[i]);
printf("\n");
for(i=;stu->telephone[i]!='\n';i++)
printf("%c",stu->telephone[i]);
printf("\n");
for(i=;stu->interest[i]!='\n';i++)
printf("%c",stu->interest[i]);
printf("\n");
for(i=;stu->favourite_sentence[i]!='\n';i++)
printf("%c",stu->favourite_sentence[i]);
printf("\n");
printf("-----------------\n");
}
k--;
show_student(stu->left);
show_student(stu->right);
}
return ;
}
int find(student stu)
{
int i,flag=;
if(k==)
return ;
if(stu!=NULL)
{
k--;
for(i=;stu->number[i]!='\n'||findnumber[i]!='\n';i++)
{
if(findnumber[i]!=stu->number[i])
{
flag=;
break;
}
}
if(!flag&&stu->number[i]==findnumber[i])
{
flagf=;
for(i=;stu->number[i]!='\n';i++)
printf("%c",stu->number[i]);
printf("\n");
for(i=;stu->name[i]!='\n';i++)
printf("%c",stu->name[i]);
printf("\n");
for(i=;stu->sex[i]!='\n';i++)
printf("%c",stu->sex[i]);
printf("\n");
for(i=;stu->telephone[i]!='\n';i++)
printf("%c",stu->telephone[i]);
printf("\n");
for(i=;stu->interest[i]!='\n';i++)
printf("%c",stu->interest[i]);
printf("\n");
for(i=;stu->favourite_sentence[i]!='\n';i++)
printf("%c",stu->favourite_sentence[i]);
printf("\n");
printf("-----------------\n");
return ;
}
else
{
find(stu->left);
find(stu->right);
}
}
return ;
}
int delete_student(student *stu)
{
int i,flag=;
if(k==)
return ;
if((*stu)!=NULL)
{
k--;
for(i=;(*stu)->number[i]!='\n'||findnumber[i]!='\n';i++)
{
if(findnumber[i]!=(*stu)->number[i])
{
flag=;
break;
}
}
if(!flag&&(*stu)->number[i]==findnumber[i])
{
flagd=;
(*stu)->number[]='\0';
return ;
}
else
{
delete_student(&((*stu)->left));
delete_student(&((*stu)->right));
}
}
return ;
}
int add_student(student *stu)
{
int i;
char t;
if(k==)
return ;
if((*stu)!=NULL)
{
if((*stu)->number[]=='\0')
{
flaga=;
printf("输入学号\n");
scanf("\n%c",&t);
(*stu)->number[]=t;
for(i=;t!='\n';i++)
{
scanf("%c",&t);
(*stu)->number[i]=t;
}
t='\0';
printf("输入名字\n");
for(i=;t!='\n';i++)
{
scanf("%c",&t);
(*stu)->name[i]=t;
}
t='\0';
printf("输入性别\n");
for(i=;t!='\n';i++)
{
scanf("%c",&t);
(*stu)->sex[i]=t;
}
t='\0';
printf("输入电话\n");
for(i=;t!='\n';i++)
{
scanf("%c",&t);
(*stu)->telephone[i]=t;
}
t='\0';
printf("输入兴趣、爱好\n");
for(i=;t!='\n';i++)
{
scanf("%c",&t);
(*stu)->interest[i]=t;
}
t='\0';
printf("输入座右铭\n");
for(i=;t!='\n';i++)
{
scanf("%c",&t);
(*stu)->favourite_sentence[i]=t;
}
t='\0';
return ;
}
else
{
add_student(&((*stu)->left));
add_student(&((*stu)->right));
}
}
return ;
}
int can_insert(student stu)
{
if(stu!=NULL)
{
c++;
if(stu->left==NULL||stu->right==NULL)
{
printf("%d ",c);
can_insert(stu->left);
can_insert(stu->right);
}
else
{
can_insert(stu->left);
can_insert(stu->right);
}
}
return ;
}
void creat(student *stu)
{
int i;
char t;
*stu=(student)malloc(sizeof(student_node));
n++;
printf("输入学号\n");
scanf("\n%c",&t);
(*stu)->number[]=t;
for(i=;t!='\n';i++)
{
scanf("%c",&t);
(*stu)->number[i]=t;
}
t='\0';
printf("输入名字\n");
for(i=;t!='\n';i++)
{
scanf("%c",&t);
(*stu)->name[i]=t;
}
t='\0';
printf("输入性别\n");
for(i=;t!='\n';i++)
{
scanf("%c",&t);
(*stu)->sex[i]=t;
}
t='\0';
printf("输入电话\n");
for(i=;t!='\n';i++)
{
scanf("%c",&t);
(*stu)->telephone[i]=t;
}
t='\0';
printf("输入兴趣、爱好\n");
for(i=;t!='\n';i++)
{
scanf("%c",&t);
(*stu)->interest[i]=t;
}
t='\0';
printf("输入座右铭\n");
for(i=;t!='\n';i++)
{
scanf("%c",&t);
(*stu)->favourite_sentence[i]=t;
}
t='\0';
init(&((*stu)->left));
init(&(*stu)->right);
}
int creat_student(student *stu)
{
int x;
if(stu!=NULL)
{
c++;
if(c==insert)
{
if((*stu)->left==NULL&&(*stu)->right==NULL)
{
printf("插入左节点请输入0,插入右节点请输入1\n");
scanf("%d",&x);
if(!x)
{
creat(&((*stu)->left));
return ;
}
else
{
creat(&((*stu)->right));
return ;
}
}
else if((*stu)->left==NULL)
{
printf("插入左节点\n");
creat(&((*stu)->left));
return ;
}
else if((*stu)->right==NULL)
{
printf("插入右节点\n");
creat(&((*stu)->right));
return ;
}
}
else
{
if((*stu)->left!=NULL)
creat_student(&((*stu)->left));
if((*stu)->right!=NULL)
creat_student(&((*stu)->right));
}
}
return ;
}
int main()
{
char x;
int i,key=;
student stu;
printf("***************************创建同学录***************************\n");
printf("学生个数\n");
scanf("%d",&n);
k=n;
make_student(&stu);
system("pause");
while(key!=)
{
system("cls");
printf("|***********************************************************|\n");
printf("|**************************同学录***************************|\n");
printf("|***********************************************************|\n\n\n");
printf("1、遍历输出 2、查找 3、删除 4、增加 5、退出程序\n");
scanf("%d",&key);
if(key==)
{
k=n;
printf("学号、姓名、性别、电话、爱好、座右铭\n-----------------\n");
show_student(stu);
}
if(key==)
{
printf("请输入要查找的学生的学号\n");
k=n;
scanf("\n%c",&x);
findnumber[]=x;
for(i=;x!='\n';i++)
{
scanf("%c",&x);
findnumber[i]=x;
}
printf("学号、姓名、性别、电话、爱好、座右铭\n-----------------\n");
find(stu);
if(flagf)
printf("查无此人!\n");
flagf=;
}
if(key==)
{
printf("请输入要删除的学生的学号\n");
k=n;
scanf("\n%c",&x);
findnumber[]=x;
for(i=;x!='\n';i++)
{
scanf("%c",&x);
findnumber[i]=x;
}
delete_student(&stu);
if(flagd)
printf("输入学号不正确,删除失败!\n");
else
printf("删除成功!\n");
flagd=;
}
if(key==)
{
k=n;
add_student(&stu);
if(flaga)
{
c=;
printf("以下节点可供插入\n");
can_insert(stu);
printf("\n");
printf("插入到哪个节点之下?\n");
scanf("%d",&insert);
c=;
creat_student(&stu);
}
flaga=;
}
if(key==)
{
exit();
}
system("pause");
}
return ;
}
Hello world!(内含自己编写的C语言二叉树同学录)的更多相关文章
- Java编写的C语言词法分析器
Java编写的C语言词法分析器 这是java编写的C语言词法分析器,我也是参考很多代码,然后核心代码整理起来,放在QQ空间和博客上,目的是互相学习借鉴,希望可以得到高手改进.这个词法分析器实现的功能有 ...
- 编写一个C语言函数,要求输入一个url,输出该url是首页、目录页或者其他url
编写一个C语言函数,要求输入一个url,输出该url是首页.目录页或者其他url 首页.目录页或者其他url 如下形式叫做首页: militia.info/ www.apcnc.com.cn/ htt ...
- 一篇文章带你编写10种语言HelloWorld
0,编程语言排行榜 计算机编程语言众多,世界上大概有600 多种编程语言,但是流行的也就几十种.我们来看下编程语言排行榜,下面介绍两种语言排行榜. Ⅰ TIOBE 指数 该指数每月更新一次,它监控了近 ...
- 七周七语言之用Io编写领域特定语言
如果你想获得更好的阅读体验,可以前往我在 github 上的博客进行阅读,http://lcomplete.github.io/blog/2013/06/05/sevenlang-io/. Io 语言 ...
- 如何用visual studio2013编写简单C语言程序
vc++6.0 作为经典版本,虽然已经几乎淘汰,但还是有很多的初学者在使用.但当他们使用vs2013时会发现界面和操作和vc++6.0有了极大的不同,不知该如何 操作.随着vs2013的普及,更多人使 ...
- 【Ubuntu】编写一个c语言代码
安装 sudo apt-get build-depgcc coding:http://www.cnblogs.com/zero1665/archive/2009/11/03/1595510.html ...
- VSCode编写C/C++语言,配置文件和注意事项
前言 主要是自己先下载好VSCode,然后在自己电脑上安装好就行了,但是VSCode是编辑器,不是IDE,所以需要自己配置文件,主要有四个都是以.json结尾的文件,这里默认已经装过C/C++的编辑器 ...
- c语言二叉树基本操作
编译器为vs2013 #include "stdafx.h" #include<malloc.h> #include<stdlib.h> #define O ...
- c语言二叉树
Department of Computing and Information SystemsCOMP10002 Foundations of AlgorithmsSemester 2, 2014As ...
随机推荐
- monit安装配置
环境centos5(32bit),monit-5.17.1,下载地址 https://bitbucket.org/tildeslash/monit/downloads/ 1.tar zxvf moni ...
- Chap5:操作文件和目录[The Linux Command Line]
Wildcards Wildcard Meaning * Matches any characters ? Matches any single character [characters] Matc ...
- git忽略UserInterfaceState.xcuserstate
使用sourceTree, 忽略
- Go-学习之路
Go学习之路 环境搭建 基础知识 类型与变量 常量与运算符 控制语句 Array数组 slice切片 function函数 ...持续更新中
- es内部的多线程异步并发控制
version元数据(1)第一次创建一个document的时候,它的_version版本号是1:以后,每次对这个document执行修改或者删除操作,都会对这个_version版本号自动加1(2)在删 ...
- 催希凡javaweb 学习28天
看到这样的博客,自己也在看传智播客的视频,收藏一下 催希凡javaweb 学习28天 http://www.cnblogs.com/Prozhu/category/824899.html
- IIS下实现帝国CMS搜索页伪静态
前面ytkah讲了apache下帝国CMS搜索页伪静态实现方法,网友说服务器是用IIS,那么IIS下如何实现帝国CMS搜索页伪静态呢?首先得先有URL重写插件,下载地址:http://www.iis. ...
- error: Microsoft Visual C++ 14.0 is required(line_profiler模块安装失败的解决办法)
一.我的安装环境: 1.系统:win10,64位 2.python版本:python3.6.4 二.遇到的问题: 1.cmd黑屏终端下输入命令:pip install line_profiler(安装 ...
- Caffe上用SSD训练和测试自己的数据
学习caffe第一天,用SSD上上手. 我的根目录$caffe_root为/home/gpu/ljy/caffe 一.运行SSD示例代码 1.到https://github.com ...
- react 首屏加载优化
react 首屏加载优化,原本是在入口HTML文件中加载loading动画,但是部署在测试环境上的时候一直无法显示loading的部分,也是奇怪了,我们测试环境的部署一直跟本地的都不太一样,内外网的转 ...