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

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;}

 

应用软件加入全面的功能权限控制-Delphi资料 用Delphi编写安装程序 用Delphi实现超级链接 用Delphi实现子目录级的文件查询 用Delphi自制英语复读机 用DEPHI为应用软件建立注册机制-Delphi资料 优化delphi5.0秘籍大曝光 元件的handle的建立-Delphi资料 元件卷动的改进-Delphi资料 在delhpi程序中获取网络资源信息-Delphi资料 在Delphi中操作快捷方式 在DLL中实现文件的拷贝-Delphi资料 在Report Builder中增加自定义函数-Delphi资料 在Win2000 Beta下安装Delphi 在Word插入字符-Delphi资料 注册表中几个对编程特别有用的地方-Delphi资料 资源文件在DELPHI中的使用 自制替换指定串函数-Delphi资料 API函数快速入门API函数简介-VB资料 API函数快速入门怎样在VB中声明和使用API函数 API函数在VB开发中的应用 API函数在VB中的应用 API实现完美的图片出现效果-VB资料 ListView控件特效-VB资料 Office 95 API 的企业开发者指南-VB资料 SENDMESSAGE函数巧应用 -VB资料 VB 与Windows API 讲座(五) VB5 未公开的函数 VB5.0与Windows API 间的呼叫技巧 VB5中回调函数的使用方法 VB的API编程精粹(二) 请问大侠,谁会使用Rational Robot? 我做了一个监控程序,如何实现重新启动该程序??? 请问那位高手:如何用jdk开发自己的包!以供别人使用!! 50分求助,谢谢!~~在线等待! 请教 关于猴子分花生的问题 路漫漫其修远兮,征成熟软件开拓市场! 学习项目管理手记 vb能否做出象中国游戏在线中心这样的客户端? 关于COM调用的问题 jsp中有没有取前一天,后一天的数据的类,相当于数据库中的dateadd(dd,1,'')函数?? 我想做一个类似XP Form的模板,请问窗体改变尺寸的消息是什么?谢谢! 想用VC做三星手机N188里的音乐编辑器。 大家好:如何用Delphi报表打印信封,还要有邮政编码,就是像个信封。谢意! 请问那位高手:如何用jdk开发自己的包!以供别人使用!! DataGrid如何调整每列的高度? 在Vbscript中,我的这段代码有问题吗? 使用vc++写一个关于检测网络流量和硬盘读写速度的软件使用哪几个函数? 求救:我在GUI中用到了Jbuilder的xyLayout,怎样打包成为一个独立的应用程序 答者有分 dbGrid 高分!! 谁有jdk的帮助呀?或是我该在哪里下载? 中国队世界杯进攻名列倒数第一 数据库该学哪种语言??? =====在英文系统下,我用vc,为什么edit控件不能输入中文?==== 急!高分求助:水晶报表在Web上的打印问题 MaskEdBox控件的一个简单问题 凭证检索错误 层的显示位置问题? 数据库该学哪种语言??? 高手进来 TClientSocket和TServerSocket之间采用阻塞方式通信,讨论 大家请帮帮忙!一个关于数据库备份的问题!先谢了! 关于汉诺塔升级版。 TClientSocket和TServerSocket之间采用阻塞方式通信,讨论 如何将系统的短日期格式由yy-MM-dd改为yyyy-MM-dd 100分,再次求助,关于jsp中应用java bean的问题! 求助:如何在自己的程序里控制其它应用程序,主要实现对另一应用程序的鼠标定时自动单击 为什么???? 数据库该学哪种语言??? win2000并口编程,怪事?? 请问一个关于超链接的问题! 动态的软件演示用什么软件做?好象播放时用的是screencam.谢谢 一个利用Access 的report design做完报表后怎样用Delphi编程打印输出此报表的问题 数据库该学哪种语言??? 为什么老是说“要求对象”?高手请进! 例如一个编辑框,设为TIME型的,我用什么方法来检测其有效性呢?? 这句SQL如何写?有关 和checkbox搭配的问题?急急急! ejb问题 有编过输入法的吗? 一个空水池,有甲乙两个进水管和一个排水管,单开甲管5分钟能注满水池,单开乙管需10分钟注满水池,满池水如果单开排水管需6分钟流尽,某次池中没有水,打开甲管若干分钟后,发现排水管未关 铁屑盒的上方有一根铁棒,把一根条形磁铁靠近铁棒的上方这个实验中磁铁和铁棒成什极? 某房间需粉刷的面积约是80平方米,一般每平方米需用乳胶漆0.5升,如果在实际粉刷时有10分之1的损耗,实际应该准备多少升乳胶漆? 一空水池有甲乙两根进水管和一根排水管.单开甲管需5分钟注满水池,单开乙管需10分钟注满水池,满池水若单开排水管需6分钟流尽.某次池中没有水,打开甲管若干分钟后,发现排水管未关上,随 如图,桌子上有四分之三杯水,小健喝掉三分之一,想把水加满,他拿起另一杯盛满水满水的杯子向第一个杯子倒结果不小心,加满溢出来后他才发现,这时第二杯水只剩下四分之一,那么溢出的水到 已知O为坐标原点,向量OA=(cos2x+1,1)向量OB=(1,根号3*sin2x+a)(x∈R,a∈R,a是常数)若y=OA*OB1.求y关于x的函数关系式f(x)2.若f(x)的最大值为2,求a的值 卷子24页:一个水池有甲、乙两个进水管和丙一个排水管.单开甲管16分钟可将水池注满、单开乙管10分钟可将池注满,单开丙管20分钟可将全池水放完,若现在甲、乙两管,4分钟后关上甲管开丙管 2cos 30°-2sin 60°·cos 45° 足字旁组词(两个字)如:跟踪 踊跃 急! 哪位大侠帮我翻译一下这个英语.We( ) ( )get up at six o’clock.我们必须六点起床.两个括号是要填两个单词~谢谢啦 一件工作,甲单独做四小时,乙单独做五小时,甲乙工作时间的比是( ),甲乙工作效率的比是( ).急,求,快! 2sin 30°+tan 45°-2cos 60°=? 有甲、乙两个粮库,甲库里存粮120吨.如果把甲粮库中粮食的六分之一搬进乙粮库中,两个粮库中的存粮数量就相等,原来乙粮库中存粮多少吨? 蝗虫共有几对足?几对翅? 2sinα+cosα=√2cosα,则tanα 文章最雅成语(至少4个) 蝗虫的翅共几对,是它的什么器官 是大壁虎吃大蟑螂还是大蟑螂吃大壁虎? 我要观察蚂蚁的作文 100--150字 两只蝗虫和一只苍蝇一共有适于运动的翅和足分别是几对? 壁虎吃死蟑螂么?如题 壁虎吃死蟑螂么?壁虎吃死蟑螂么? 蝗虫的足翅触角各有和特点?,这对蝗虫的生活有何意义? 打印一份文件,甲每小时可以完成它的5分之1,乙可以完成它的4分之1,甲乙工作效率的最简比?工作时间最简比? 一个杯子底面直径是16厘米,高是20厘米,这个杯子能否装下3000毫升的牛奶用看的懂的方法 薯片盒半径4厘米,高10厘米,每平方米的纸最多能做几个薯片盒的侧面包装纸? 蝗虫的特征 校运会广播稿(200字) 这个杯子能否装得下3000毫升的牛奶(圆柱形)高20厘米,底面直径为14厘米,求算式! 如何区分铁棒,铜棒,磁铁棒.(不知道那一个是铁棒,铜棒,磁铁棒)如何区分铁棒,铜棒,磁铁棒.(不知道那一个是铁棒,铜棒,磁铁棒) 如何区分沙子,食盐,木屑,铁屑 如何区别铁棒,铜棒和磁铁棒 一个圆柱和一个圆锥,它们底面直径相等,高相等,圆锥的体积是15立方米,求圆柱的体积? 现有三根金属棒 分别是铁棒 铜棒 磁铁棒 如果从外表无法分辨 那么如何将三根金属棒区分开?要具体方法 不用说明原理 没有其它的辅助材料 要两篇关于校运会的广播稿!大概200字这样! 一个圆柱周长是50.24厘米高15厘米 这个杯子能装下3000毫升的牛奶吗?另一个题目是:有一根10分米的方木,横截面是边长为2分米的正方形,把它加工成体积最大的圆柱木料,材料的利用率是多少? 拆、组注塑模具为什么用铜棒轻敲,而不是铁棒或其他什么? 一个水池安放两个进水管和一个排水管,单开甲管4小时能把水池注满;单开乙管5小时能把水池注满;单开丙管3小时能把满池的水放完,现在三管同时开放,几小时能注到水池的百分之七十? 一个圆柱和一个圆锥,他们的底面直径相等,高相等,圆锥的体积是15立方米,圆柱的体积是多少 有三根外形完全相同的金属棒,其中有两根是具有磁性的磁铁棒,另一根是无磁性的铁棒.在不借助其他任何器材和物体的情况下,有什么方法能将他们分开?若可以选择其它器材,还有哪些新的设 形容蝴蝶美丽的诗句又不说蝴蝶 直径14cm,高20cm的杯子能否装下3000毫升的牛奶呢 形容读书很有感情的成语 有什么诗句是描写漂亮的蝴蝶我想寻找一些好听的诗句(唐诗 颂词 即可)描写美丽的蝴蝶的,希望知道的人帮帮忙 这个杯子能否装下3000毫升的牛奶?圆柱半径是14cm,高是20cm 读了文章,我想用这些成语来形容大明湖 一根软棒和两根没标磁极的铁棒怎么区分铁棒与磁棒 两个字都是病字旁的词语准确点儿 形容富有情感的读文章的成语有哪些? 如何区别磁棒和铁棒 蝗虫生活在干操的环境下,它的呼吸器官是什么 对弧长和曲线积分 求校运会广播稿250-300字!3Q字数符合要求就行,不要跑题的! 建筑面积17600平方米 室内粉刷面积怎么算 将一张36平方分米的正方形白铁皮减去四个角后,制成一个无盖的正方体的盒子,然后给这个盒子的完整然后给这个盒子的内外喷上红漆。求它的油漆面积和容积? 有关蝴蝶的诗句都有哪些? 已知o为坐标原点.向量OA=(2cosx方,1),向量OB=(1,根号3sin2x+a),若y=向量OA点成向OB1求y关于x的解析式2.若f(x)最大值是2,求a 将一张36平方分米的正方形白铁皮剪去四个角后,制成一个无盖的正方体的盒子,然后给这个盒子的内外喷上红漆.求它的油漆面积和容积?36=6×6 6÷3=2(分米) 就按我这个算式写下去,为什么要6÷3? 两根外形一样的棒,一根是铁棒,一根是磁体,请问如何判断那根是铁棒,那根是磁体?不能借助任何工具,如小磁针,也不能吊起来. 某房间的粉刷面积约为65平方米.【1】放有6块正方体铁块的量杯,水面读数是640毫升,拿出这6快正方体铁块后,水面下降到400毫升刻度的地方,每块正方体铁块的体积是【 】立方厘米.【2】某房间 两根外表一样的金属棒,一根是磁棒,一根是铁棒.你能不用任何工具分辨它们吗? 两根相同的棒,一根是铁棒,一根是条形磁铁,在没有其他任何工具的情况下怎么辨别它们是否有磁性?两种办法! 已知O为坐标原点,OA向量=(2asin^2x,a),向量OB=(1,-2根号3sinxcosx),f(x)=向量OA乘向量OB+b(a<b,a≠0)(1)求y=f(x)的单调递增区间:(2)若f(x)的定义域为[π/2,π],值域为[2,5],求a,b的值应该是【向量OB=
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘