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 ...
随机推荐
- vue 静态资源 压缩提交自动化
需要安装co和child_process模块,co可以执行多个promise,child_process可以执行命令行的库(cmd命令) 配置winrar(压缩包)坏境变量,参考资料https://j ...
- [cipher][archlinux][disk encryption][btrfs] 磁盘分区加密 + btrfs
科普链接:https://wiki.archlinux.org/index.php/Disk_encryption 前面的链接关于硬盘加密,讲了几种,基本上就是选dm-crypt with LUKS ...
- Idea下载安装
安装 下载 下载地址:http://www.jetbrains.com/idea/#chooseYourEdition,选择付费版的zip格式的下载 安装过程中除了勾选64版本之外其他一路next,直 ...
- nmap常用参数
总结: 主机发现 -sn 防止NMAP端口扫描 -SP TCP 半连接扫描,默认是通过80端口来发现主机的 -SA ACK ping 扫描 -SU UDP ping 扫描 不好 ...
- net use共享文件访问
NET USE "\\xxx.xxx.xxx.xxx\vms\Application Files" "password123" /USER:"ap\1 ...
- c#中base64编码解码
//编码: byte[] bytes = Encoding.Default.GetBytes("要转换的字符"); string str = Convert.ToBase64Str ...
- es6 学习二 Generator
安装babel的拓展包(Polyfill) ,对Generator的转义 这是一个补完babel支持es6的拓展包,配置步骤为3个: 打开命令行键入 npm install --save-dev ba ...
- vue指令v-html中使用过滤器filters功能
Vue 2.0 不再支持在 v-html 中使用过滤器 解决方法: 1:全局方法(推荐) 2:computed 属性 3:$options.filters(推荐) 1:使用全局方法: 可以在 Vue ...
- IAM:亚马逊访问权限控制
IAM的策略.用户->服务器(仓库.业务体) IAM:亚马逊访问权限控制(AWS Identity and Access Management )IAM使您能够安全地控制用户对 AWS 服务和资 ...
- python-面向对象-12_模块和包
模块和包 目标 模块 包 发布模块 01. 模块 1.1 模块的概念 模块是 Python 程序架构的一个核心概念 每一个以扩展名 py 结尾的 Python 源代码文件都是一个 模块 模块名 同样也 ...