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 ...
随机推荐
- Hive中的窗口函数
简介 本文主要介绍hive中的窗口函数.hive中的窗口函数和sql中的窗口函数相类似,都是用来做一些数据分析类的工作,一般用于olap分析 概念 我们都知道在sql中有一类函数叫做聚合函数,例如su ...
- 安装和配置hive
1.上传hive.mysql.mysql driver到服务器/mnt目录下: [root@chavin mnt]# ll mysql-5.6.24-linux-glibc2.5-x86_64.tar ...
- sql 一对多查询最近一条
感谢 http://bbs.csdn.net/topics/391048578?page=1 create table A ( [Id] [uniqueidentifier] NOT NULL, ) ...
- inotifywait实现目录监控--http://man.linuxde.net/inotifywait
sudo apt install inotify-tools while inotifywait -q -r -e create,delete,modify,move,attrib --exclude ...
- 常用css属性
一.常用css属性 (1) *block(区块) 行高 line-height:数值 | inherit | normal;字间距 letter-spacing: 数值 | inherit | nor ...
- LeetCode 463 Island Perimeter 解题报告
题目要求 You are given a map in form of a two-dimensional integer grid where 1 represents land and 0 rep ...
- 使用U盘为虚拟机安装系统
前提:使用虚拟机安装WIN8系统时,由于WIN8镜像文件大于4G无法使用虚拟安装,所以使用U盘安装. 1.装有U盘启动的WINPe系统 (1)下载 老毛桃U盘启动盘制作工具 (2)U盘清空 2.虚拟机 ...
- BOM简单总结
先来说一下BOM,什么是BOM?BOM就是浏览器对象模型,大家都知道,ECMAScript是JavaScript的核心,但如果要在WEB中使用JavaScript,那么BOM则无疑才是真正的核心,BO ...
- 程序------>数据结构
一程序概念: 1.对身边的任何一个事物进行认知和分类,从而得到一些信息: 2.在得到的信息基础之上建立了概念模型: 3.根据概念模型将我们生活中的实际问题转换成计算机能理解的形式: 4.用户通过人机交 ...
- Spring JPA实现逻辑源码分析总结
1.SharedEntityManagerCreator: entitymanager的创建入口 该类被EntityManagerBeanDefinitionRegistrarPostProcesso ...