说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

C语言实现树的动态查找

HTML文档下载 WORD文档下载 PDF文档下载
本例演示一种树数据结构存储记录集合时的动态查找方法。

 

本例演示一种树数据结构存储记录集合时的动态查找方法。首先程序通过construct()函数,利用已经存在的结构体数组数据建立一个二叉树,建立树的过程中,要保证每个节点的值都大于它的左子树上节点的值而小于它右子树所有节点的值,该函数返回建立树的根指针;然后通过函数Search(root,name)查找,如果找到相应的数据,将其打印出来,如果没有找到,则用户可以选择是否将该数据插入到树中。

 

具体代码如下:

#include <stdio.h>#include <stdlib.h> #include <string.h>#define NUM 4struct tree{	char name[20];	char city[20];	char sex[10];	char age[10];	char job[10];	struct tree *left;	struct tree *right;};struct tree Datas[NUM]={	"Willing","Tianjing","Female","21","worker",NULL,NULL,	"Tom","Beijing","Male","31","doctor",NULL,NULL,	"Sun","Weifang","Male","24","student",NULL,NULL,	"Marry","Shanghai","Female","19","techer",NULL,NULL};struct tree *construct(	struct tree *root, 	struct tree *r, 	struct tree *Data){	if(!r)	{		r = (struct tree *)malloc(sizeof(struct tree));		if(!r)		{			printf("内存分配失败!");			exit(0);		}		r->left = NULL;		r->right = NULL;		strcpy(r->name,Data->name);		strcpy(r->city,Data->city);		strcpy(r->sex,Data->sex);		strcpy(r->age,Data->age);		strcpy(r->job,Data->job);		if(!root)			return r;		if(strcmp(Data->name,root->name)<0)			root->left = r;		else 			root->right = r;		return r;	}	if(strcmp(Data->name,r->name)<0)		construct(r,r->left,Data);	else		construct(r,r->right,Data);	return root;	}struct tree *Search(root,name)struct tree *root;char name[];{	struct tree *p;	if(root == NULL)		printf("该树为空\n");	p = root;	while(strcmp(p->name,name)!=0)	{		if(strcmp(p->name,name)>0)			p = p->left;		else			p = p->right;		if(p == NULL)			break;	}	return(p);}void print(struct tree *r){	if(!r)		return;	print(r->left);	printf("%s\n",r->name);	print(r->right);}void print_currentData(struct tree *point){	if(point == NULL)		return;	printf("	姓名:%s\n",point->name);	printf("	城市:%s\n",point->city);	printf("	性别:%s\n",point->sex);	printf("	年龄:%s\n",point->age);	printf("	工作:%s\n",point->job);}int main(void){	int i;	char c[10];	char swap[20];	char name[20];	struct tree *root,*p;	struct tree *temp;	p = NULL;	temp = NULL;	root = NULL;	for(i = 0;i<NUM;i++)		root =construct(root,root,&Datas[i]);	printf("现有人员资料:\n");	print(root);	printf("请输入要查找的人的名字\n");	scanf("%s",name);	p = Search(root,name);	if(p == NULL)	{		printf("没有该人资料\n");		printf("是否要插入该人资料[y/n]\n");		scanf("%s",c);		if(strcmp(c,"y")==0)		{			temp = (struct tree *)malloc(sizeof(struct tree));			if(!temp)			{				printf("内存分配失败!");				exit(0);			}			printf("请输入该人姓名:\n");			scanf("%s",swap);			strcpy(temp->name,swap);			printf("请输入该人所在城市:\n");			scanf("%s",swap);			strcpy(temp->city,swap);			printf("请输入该人性别[Male/Female]:\n");			scanf("%s",swap);			strcpy(temp->sex,swap);			printf("请输入该人年龄:\n");			scanf("%s",swap);			strcpy(temp->age,swap);			printf("请输入该人工作:\n");			scanf("%s",swap);			strcpy(temp->job,swap);			temp->left = NULL;			temp->right = NULL;			root =construct(root,root,temp);			print_currentData(temp);			printf("现有人员资料:\n");			root = root;			print(root);		}		else 			return 0;	}	print_currentData(p);	return 1;}

 

Android开发之模拟按下Home键的效果 Android AIDL全攻略一 Android Picture和PictureDrawable的用处 Android自定义View以及layout属性全攻略 Android通过Intent发送电子邮件含附件 Android调试技巧之Eclipse行号和Logcat Android Txt文本读写类源代码 Android游戏开发之旅20 双按事件捕获 Android游戏开发之旅19 分辨率大全 保护你的Android付费软件-LVL全攻略(二) 保护你的Android付费软件-LVL全攻略 android调试工具monkey压力测试实战 Android开发工具-App Inventor Android游戏开发之旅18 SoundPool类 Android多线程下载远程图片 Android读写Txt文本文件代码 Android游戏开发之旅17 图像渐变特效 Android游戏开发之旅16 异步音乐播放 Android游戏开发之旅15 按键中断处理 Android游戏开发之旅14 游戏开发实战一 Android游戏开发之旅13 Sensor感应示例 Android游戏开发之旅12 Sensor重力感应 Android游戏开发之旅11 View中手势识别 Android游戏开发之旅十 位图旋转 Android游戏开发之旅九 VideoView类剖析 Android游戏开发之旅八 SurfaceView类实例 Android游戏开发之旅七 自定义SurfaceView Android游戏开发之旅六 自定义View Android游戏开发之旅五 Path和Typeface Android游戏开发之旅四 Canvas和Paint实例 Android游戏开发之旅三 View类详解 js文件里如何使用另一个js文件里的函数30? 哪位大虾知道可以在哪里下载mpeg-1的codec,谁先告诉有效地址谁先得分!(不给分是小狗!) 可能很菜的问题,送分的问题!! 一个关于CDaoTableDefInfo的问题 ado的问题??求救!!!高分!!! 有关代码重用的问题,对Form的继承。 一个关于CString.Format的问题 学习编程时学图算法怎么学好? 一个很简单的CREATE TABLE语句为什么出错呢?向大家请教! jbuilder5运行需要最低配置 ,傻傻的问 Delphi6的盗版已经到了@_@ 喂,为什么我提问只能给最多37分,原先可比这要多的多 一个关于派生类的问题 关于页面关闭的问题 用new JTalbe(10, 20)创建了一个table,如何设置该table列(column)的宽度 请教一个关于用VC6开发outlook\exchange的问题。急!急! 时间服务器 请问一下,用DBM,如果用户注册的数量多了以后,程序的速度很一般的文本速度比较哪个快 纯数学问题:如何求模逆元? VB中实现进程间通信的方法?VB中的CallWindowProc的用法?VB中如何发送自定义的消息? 请问哪里能免费下载BCB5?下载多长时间没有关系,只要能够正确使用就可以了。 怎样得知CListCtrl中当前选项? 我想从WINME中自带的一个驱动程序提取出来在WIN97中安装,请问应如何做? 菜问题(2) 请教:为何数据库数据无法在网页上显示? CEditView 一定要override onChange function(ON_CONTROL_REFLECT(EN_CHANGE, OnChange))????;否则input 时不我待会错??? 请教:不通过页面,用VB如何得知来访者的IP? 如何将vcd转化为real的格式???????????急!!!!!!!!!!!!!! 对DMO播放内存MPEG2数据没有头绪,谁能给点提示? 支持bestbestbest!!!!!!!!!!!! 如何在win98下使用EJB? applet 可以打开到一个server的socket么 谁知道国内哪有下载jdk1.4,Thanks! 如何配置For Oracle8i 的ODBC? 请教如何动态改变窗口大小 弟兄们救命啊!!!rational rose中mdl的导出 Jbuilder5.rar的密码? 这条语句为何通不过?请指教! 各位大虾:一个WWW服务器,不通过页面,要得到访问者的IP怎么办? 劳改犯严正声明:支持3B、蝈蝈的正确领导,声讨"捣蛋杂碎"及"跳梁小丑".坚决维护水园的安定团结. 哪位高手能给我解释一下,关于Hook技术,谢谢 pcb板什么什么东东? 请问:malloc()函数的作用是什么? 关于TTS(vcmd.exe自动化服务器) to 斑竹 :::::::,为什么我提问给分怎么比以前少了许多 急急, 怎樣從在一個框架里放打印按鈕,但要打出來的是另外一個框架的東西? 我是一个初学者,要成为一名软件工程师,要学习哪些? ···基于水园各位GGJJDDMM的快乐着想,特别给大家一次浪漫的机会,以此缓解水园的紧张气氛··· 北京地区有ADSL了吗????? 新手向大家请教了关于jdk 请简单介绍一下developer 2000 在一个周长400米的圆形池塘周围植树,每隔4米栽一棵 ,一共可栽多少棵? 同学们在全长100米的小路一边植树,每隔5米栽一颗(两端都栽)一共需要多少树苗? 在一条马路一边从头到尾植树36棵,每相邻两棵树之间隔8米,这条马路有多长?快!算式?答案?有悬赏分! 在周长180米的池塘种树,每隔12米种一棵,要种几棵? 同学们在全长100米的小路一边植树,每隔5米栽一棵(两端要载).一共需要多少棵树苗? 在一条路的两旁共植树100课,每两棵树之间的间隔为3米,这条路至少长几米?小张家住11楼,他从一楼到五楼用了一百秒,他到家还需几秒?男子110米栏比赛共设10道栏,其中起跑线到第1道栏以 一个圆形的花坛,周长是120米,如果沿着花坛周围每隔5米种一棵杨树,每两棵杨树之间种一棵树,一共可种()棵树 同学们在全长100米的小路一边植树,每隔5米栽一棵(只栽一端).一共需要多少棵树苗 同学在街道两旁植树,两棵树之间的距离是5米,这条街道有多少米?如题!同学在街道两旁植树,两棵树之间的距离是5米,一共植了18棵,这条街道有多少米? 园林设计师傅打算在一个周长是150米的圆形花坛的周围每隔3米种一棵树,一共得准备多少棵树苗? 全长100米的小路植树,每隔5米栽一棵,两端要栽,一共要多少棵树苗 在一条长100米的公路两侧,从头到尾每隔2米栽一棵树,按3棵杨树、1棵柳树的规律栽.杨树、柳树各占植树总棵树的几分之几? 一花坛周长60米,每5米种一棵树,共种几棵树 同学们在全长100米的小路一边植树,每隔5米栽一棵(两端要栽).一共需要多少棵树苗?方法怎么写. 一条长2000米的公路两旁每隔10米种一棵杨树,每两颗杨树之间等距离种3颗枫树.这 一个周长是78.5的圆形花坛,每隔两米种一棵树,最多种多少树?再说一下39.25是肯定不对的!40也不对!最好是整数。 李红在乘长途汽车旅行时,注意观察平直公路旁边的里程碑,并把对应的时刻记录了下来,数据如下表:里程李红在乘长途汽车旅行时,注意观察平直公路旁边的里程碑,并把对应的时刻记录了下 一条102米长的公路两侧种树,从起点到终点共种树36棵,如果两棵树之间的距离相等,相邻两棵树之间有多少米今天一定要答案 一个圆形的花坛周长是20米,如果每隔5米种一棵树,那么一共可以种多少棵树? 某同学在乘长途汽车旅行时,注意观察公路旁的里程碑,并把观察的结果记录在下面表格中.表格如下:观察次数:1 2 3 4 5里程碑示数:10km 20km 30km 40km 50km观察时间:6:30 6:45 7:05 7:25 7:421、在6时30 一条长180米的公路两侧各栽了一行杨树,起点和终点都栽,共栽了20棵.如果相邻两棵树之间的距离相等,相邻两棵树之间的距离是多少? 一个圆形草地它的周长是480米沿着它的周长每隔六米种一棵树在在两棵树之间发两盆花一共放多少盆花 一同学在乘长途客车旅行时,注意到平直公路旁的里程碑,并把对应时间记录下来,数据如下表所示,回答问题┌——————┬—————┬—————┬—————┬—————┬————— 一条路长25米,少先队员在路的两旁植树,起点和终点都栽,一共栽了12棵树,每两棵树之间相隔多少米?要求:快,说出列式和每一步求的是什么. 在圆形的水池边,每隔3米种一颗树,共种树60棵,这个水池的周长是多少米? 某同学在乘长途汽车旅行时,注意观察公路旁的里程碑,并把观察的结果记录在下表中;里程碑数 10km 20km 30km 40 km 50 km 观察时刻 6:30 6:45 7:00 7:20 7:39 (1)汽车在总时间内的平均速度是多少?(2 在一条长120米的公路两侧分别种柳树和杨树【两端没种】柳树每隔3米种一颗,杨树每隔5米种一颗,在这条路的两侧有多少颗数相对 一个圆形池塘,它的周长是27米,每隔3种一棵树,共需要几棵? 一个圆形水池的周长是12.56米,它的占地面积是多少平方米? 植树队在路的两旁种树,路的两端都种子树,一共种了300棵,树与树之间的间隔是5米,这条路长多少米? 周长为300米环形,每隔3米种一棵树,后接到通知改成每隔5米栽一个树,问可以载多少数题目叙述的不完整 是栽倒30颗树后接到通知改成每隔5米栽一个树,问可以载多少数 一个圆形水池的周长是62.8米,这个水池占地面积是多少平方米? 农民伯伯在公路两旁种树,树与树之间的距离是3.8米.已知两边共栽了300棵树.这条公路长多少千米?(公路的两端都要种树.)快,我现在就要,答得好我额外给 关于两棵大树围着一棵小树的作文.450字 一个圆形水池的周长是25.12米,这个水池占地面积是多少平方米? 农民伯伯在公路两旁种树,树与树之间的距离是3.8米.已知两边共栽了300棵树.这条公路长多少千米?(公路的两端都要种树.我现在就要,答得好我额外给 两棵大树中间有一棵小树 一边有太阳 一边下雨 600字作文 一个圆形水池的周长是31.4米.现将这个圆形水池的直径扩大3分之2后,水池的面积比原来多多少平方米 一条长skm的公路两侧每隔acm就植一棵树,这条公路的两侧共植树多少 看图作文,两棵强壮的大树中间有棵矮小的小树 挖一个周长是56.52米的圆形水池,这个水池的占地面积是多少平方米 公路两旁种树,每隔5米种一次,则少21棵,每隔5.5米种一棵,则少1棵,求树苗数和急用!答案为199棵树 两棵大树之间相距250米,园林部门计划在两棵大树的中间补栽小树,便每两棵小树之间的距离是10米,一共要补栽多少棵小树? 在圆形的水池边,每隔3米种一棵树,共种树60棵,这个水池的周长是多少米? 今年植树节,同学们沿一段公路植树,每隔5米种1棵,则少21棵,每隔5.5米种1棵,则少1棵,求树苗棵数及公路长度 (用方程) 两棵大树中间有一棵小树 一边有太阳 一边下雨 题目该怎么起 在一个周长是400米的正方形水池边种树,每隔10米种一棵,共需种 几棵树,每边种了 在一条100米的小路旁植树101棵,不管怎么植,总有两棵树的距离不超过1米,为什么? 两棵大树之间相距250米,园林部门计划在两棵大树中间补栽小树,使每两棵小树之间的距离是10米.一共要补栽多少棵树 一条路长100米,在路的一边从头到尾每隔10米栽一棵树,一共要栽多少棵树 给一条路上植树,两棵树之间的距离和植树的棵树不成比例对吗? 两棵大树之间相距250米,园林部门计划在两棵大树中间补栽小树,使每两棵小树之间的距离是米,一共要补栽多少 在一条长100米的通路两侧,从头到尾每隔2米在一棵树,按2棵杨树,一颗柳树的规律栽植.杨树,柳树各占植树总棵要算式 我们在一条100米长的道路一侧种了52棵树,那一定有两棵树他们之间的距离不超过2米急 两棵大树之间相距160米,园林部门计划在两棵大树中间均匀地补栽39棵小树,每两棵小树相距多少米? 在一条长100米的路两侧,从头到尾每隔2米栽一棵树,按2棵杨树,1棵柳树的规律栽植,杨树,柳树各占植树总棵树的几分之几 在一条长100米的小路一旁植树101棵,不管怎么种,总有两棵树的距离不超过1米,为什么 两棵大树之间相距180米,园林部门计划在两棵大树中间栽44棵小树每两棵小树的间隔距 在一条长100米的甬路的两侧,从头到尾每隔2米栽一棵树,按2棵杨树,1棵柳树的规律栽.杨树,柳树各占植树总棵的几分之几? 在一条长100米的小路一旁种101棵树,证明不管咋么种,总有两棵的距离不过1米
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn