




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、洛阳理工学院课程设计报告课程名称数据结构课程设计设计题目 家谱管理系统专业计算机科学与技术班级B150405学号B15080822姓名宋士龙完成日期2016年12月30日课程设计任务书设计题目:家谱管理系统设计内容与要求:【问题描述】:实现具有下列功能的家谱管理系统1) .输入文件以存放最初家谱中各成员的信息,成员的信息中均应包含以下内容:姓名、出生日期、婚否、地址、健在否、死亡日期(若其已死亡),也可附加其它信息、但不是必需的。2) .实现数据的存盘和读盘。3) .显示家谱。4) .按照出生日期查询成员名单。5) .按照姓名查询,输出成员信息(包括其本人、父亲、孩子的信息)。6) .修改某成
2、员信息。【基本要求】:界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。存储结构:学生自己根据系统功能要求自己设计,但是要求相关数据要存储在数据文件中。测试数据:要求使用1、全部合法数据;2、局部非法数据。进行程序测试,以保证 程序的稳定。测试数据及测试结果请在上交的资料中写明。成绩:指导教师:年 月 日课程设计评语指导教师:年 月 日、算法思想本程序是一个管理家谱的系统,通过这个系统可以对家族成员进行创建、显 示、查找、修改、以及保存家谱和读取家谱功能。该系统分为以下几个模块,分别是:创 建家谱,显示家谱、按姓名和生日查找家庭成员、修改家谱、存盘、读盘以及退 出
3、系统。本程序用到的存储形式为多叉树,因为家谱中每个人既有父母又有孩子, 而且孩子的个数并不确定,所以用多叉树来存储最为合适。用多叉树来存储,就 用用到多叉树的递归创建及递归遍历。因为是多叉树,所以遍历时用广度优先搜 索合适。本函数最主要的思想就是递归调用,每个子函数中都会用到递归。定义 结构体时给定指针数组的最大容量,来规定家谱中最多可以存多少人。定义一个 家族树的指针变量用来当每个子函数的参数,从而将其返回到主函数中。以下时算法思想流程图:家谱管理系统 I显示家 谱按照姓名按照生日修改父母修改本人修 改 孩 子*退出系统 、模块划分1. int ma in ():主函数2. void Cre
4、atTree(TreeNode *Tree):创建家族树3. void OutPutAII(TreeNode *Tree):显示家谱4. void Menue(TreeNode *Tree):主菜单5. void SubMenue1(TreeNode * Tree):副菜单(修改选项菜单)6. void Change(TreeNode * Tree):修改家谱7. TreeNode * SearchTree(TreeNode *Tree,char name,int length):按照姓名查找家谱成员8. TreeNode * SearchTree1(TreeNode *Tree,char b
5、irth,int length):按照生日查找家谱成员9. void OutPutMessage(TreeNode * Tree,char name,int length):输出按姓名查找到的家谱成员10. void OutPutMessage1(TreeNode * Tree,char birth,int length):输出按生日查找到的家谱成员11. void SaveFamily(TreeNode *root) :保存家谱12. void ReadFamily(TreeNode *root) :读取家谱三、数据结构typedef struct TreeNodeint ChildNum;
6、 / 记录这个人拥有几个儿女char Name20;/ 记录这个人的姓名char birthday20;/ 生日int marriage;/ 婚否( 1 表示结婚, 0 表示没结婚)int death;/ 生死( 1 表示活着, 0 表示过世)char Kind;/ 标示节点的种类有女 G 男 Bchar address100;/ 住址char livemassage50;/ 死亡日期(如果其已经死亡)struct TreeNode *NextNode20; /记录这个人的儿女struct TreeNode *Parent; /记录这个节点的父节点TreeNode,*tree;四、测试第一组数
7、据为: 爷爷,奶奶,爸爸,妈妈,我,二叔,二婶,姐姐,三叔,三婶,弟弟一共 三代 11 个人。其中爷爷是根节点,奶奶为爷爷的配偶,同时也是爷爷的第一个后继节点。 爸爸,二叔,三叔为爷爷的子女。爸爸的配偶是妈妈,爸爸的子女是我。二叔的 配偶是二婶,子女是姐姐。三叔的的配偶是三婶,三叔的的子女是弟弟。进入程序之后,首先进行创建家谱,然后进行存盘,之后进行修改和查询等 步骤。退出程序在进入程序时,进行读盘。之后在进行其他操作,程序完成之后 退出即可。图1家族树 第一组数据测试截图为:图2显示家谱 图3按照姓名查找家族成员 图4存盘 第二组数据为:图4王家家族树第二组数据测试截屏为:图 5 修改家族成
8、员的信息图 6 修改某个人的具体信息图 7 按照生日查找某人图 8 读盘五、源程序#include #include #include #ifdef WIN32输入文件名及保存位置 (eg: 文 件 名 及 其 路 径 (eg:输入文件名及保存位置 (eg:文 件 名 及 其 路 径 (eg:#define CLEAR system(cls)#define TipForSaveFilePosition printf(ttD:example.txt) : )#define TipForReadFilePosition printf(tt D:example.txt): )#else#define
9、 CLEAR system(clear)#define TipForSaveFilePosition printf(tt/home/xiong/example.txt): )#define TipForReadFilePosition printf(tt/home/xiong/example.txt): )#endif #define maxFileNameLen 50 / 保存的文件名的最大长度int FLAG=0;int a=1;typedef struct TreeNodeint ChildNum; / 记录这个人拥有几个儿女char Name20;/ 记录这个人的姓名char birt
10、hday20;/ 生日int marriage;/ 婚否( 1 表示结婚, 0 表示没结婚)int death;/ 生死( 1 表示活着, 0 表示过世)char Kind;/ 标示节点的种类有女 G 男 Bchar address100;/ 住址char livemassage50;/ 死亡日期(如果其已经死亡)struct TreeNode *NextNode20; /记录这个人的儿女struct TreeNode *Parent; /记录这个节点的父节点TreeNode,*tree;void CreatTree(TreeNode *Tree);void OutPutAll(TreeNod
11、e *Tree);void Menue(TreeNode *Tree);void SubMenue1(TreeNode * Tree); void SubMenue2(TreeNode *Tree);void Change(TreeNode * Tree); void AddNew(TreeNode * Tree);TreeNode * SearchTree(TreeNode *Tree,char name,int length); TreeNode * SearchTree1(TreeNode *Tree,char birth,int length) ; void OutPutMessage
12、(TreeNode * Tree,char name,int length); void OutPutMessage1(TreeNode * Tree,char birth,int length); void SaveFamily(TreeNode *root);void ReadFamily(TreeNode *root);int main()/ 主函数TreeNode *Tree;/TreeNode *Tree1;/Tree1=&(*Tree);Tree=(TreeNode *)malloc(sizeof(TreeNode);Tree-Parent =NULL;strcpy(Tree-Na
13、me,0);Menue(Tree);return 0;输出主菜单void Menue(TreeNode *Tree)/*TreeNode *Tree1;Tree1=&Tree;*/char c;char name20;char birth20;while(1)system(cls);printf(t);*nn);printf(ntt);printf(ntt B:printf(ntt );printf(ntt);欢迎使用家族管理系统A: 输 入 家 谱 信 息 建 立 树 输出整个家谱信息 );C: 按 出 生 日 期 查 找 某 人 D: 按 姓 名 查 找 某 人printf(nttE: 修
14、 改 某 个 人 的 信 息);printf(nttF:存盘);printf(nttG:读盘);printf(ntt H: 退 出 整 个 程 序 nt);c=getchar();switch(c)case A:TreeNode * NewNode;NewNode=(TreeNode *)malloc(sizeof(TreeNode);printf(nt请输入姓名 :);scanf(%s,Tree-Name);printf(nt请输入性别女G男B:);getchar(); scanf(%c,&(Tree-Kind); Tree-Parent=NewNode;Tree-Parent=NULL;/
15、CreatTree(Tree); /printf(nt 家 谱 图 已 经 建 立 成 功nn);printf(nnt 请 按 Enter 键 继 续 操 作);getchar();break;case B:if(strcmp(Tree-Name,0)=0)printf(nt 家谱图的多叉树尚未建立请先建立树 n); getchar();break;printf(nnt 整个家谱的主要信息如下 :);OutPutAll(Tree);getchar();break;case C: if(strcmp(Tree-birthday,0)=0) printf(nt 家谱图的多叉树尚未建立请先建立树 n
16、); getchar();break;printf(nt 请输入你要查找的出生日期 :);scanf(%s,birth); OutPutMessage1(SearchTree1(Tree,birth,20),birth,20);printf(nnt*-nt); getchar(); break; case D: if(strcmp(Tree-Name,0)=0) printf(nt 家谱图的多叉树尚未建立请先建立树 getchar(); break; printf(nt 请输入你要查找的人的姓名 :nt); scanf(%s,name);OutPutMessage(SearchTree(Tre
17、e,name,20),name,20);printf(nnt*-nt); getchar(); break; case E: if(strcmp(Tree-Name,0)=0) printf(nt 家谱图的多叉树尚未建立请先建立树 getchar();break; Change(Tree); getchar(); break; case F:if(strcmp(Tree-Name,0)=0)printf(nt 家谱图的多叉树尚未建立请先建立树 getchar();break; SaveFamily(Tree); getchar(); break;n);n);n);case G:/*if(str
18、cmp(Tree-Name,0)=0)家谱图的多叉树尚未建立请先建立树n);printf(ntgetchar();break;*/ReadFamily(&Tree);getchar();break;case H:printf(nnt);printf(nt);printf(ntnn);break;case n:break;default:printf(nnt内!);printf(nt项!);printf(ntnt);getchar();break;if (c=H|c=f)break;getchar();void CreatTree(TreeNode *Node) /创建树本次服务到此结束欢迎下次
19、使用谢谢对不起! 你的选择不在服务范围之请您再次选择所需的服务谢谢int i;TreeNode *NewNode;NewNode=(TreeNode *)malloc(sizeof(TreeNode);Node-NextNode0=NewNode;Node-NextNode0=NULL;printf(nt 请输入出生日期: );scanf(%s,Node-birthday);printf(nt请输入家庭住址: );getchar();scanf(%s,Node-address);printf(nt请输入是否建在 (1- 是或 0-否) :);scanf(%d,&(Node-death);if(
20、Node-death=0)printf(nt 请输入去世日期: );scanf(%s,Node-livemassage);else if(Node-death=1)printf(nt 仍然建在 );printf(nt 请 输 入 %s 的 配 偶 的 姓 名 ( 输 入 0 代 表 没 结 婚):,Node-Name);scanf(%s,NewNode-Name);if(strcmp(NewNode-Name,0)!=0)printf(t 请输入配偶的出生日期: );scanf(%s,NewNode-birthday);printf(nt请输入家庭住址: );getchar();scanf(%
21、s,NewNode-address);printf(nt 请输入是否建在 (1- 是或 0-否):);scanf(%d,&(NewNode-death); if(NewNode-death=0) printf(nt 请输入去世日期: );scanf(%s,NewNode-livemassage);else if(NewNode-death=1)printf(nt 仍然建在 );printf(nt请输入%s的子女的数目(当子女输入0时便停止输入该成员有关信息 ):,Node-Name);scanf(%d,&(Node-ChildNum); if(Node-ChildNum)=0&strcmp(N
22、ewNode-Name,0)=0) return ;if(Node-Kind=G|Node-Kind=g)NewNode-Kind=B;elseNewNode-Kind=G;NewNode-ChildNum=0;NewNode-NextNode0=NULL;Node-NextNode0=NewNode;Node-NextNode0-Parent=Node;/ 孩子的父母 for(i=1;iChildNum;i+)NewNode=(TreeNode *)malloc(sizeof(TreeNode);a+;printf(nt请输入 s的第 d子女的名字:,Node-Name,i);scanf(%
23、s,NewNode-Name);printf(nt 请 输 入 %s 的 第 %d 子 女 的 性 别 女 G 男 B:,Node-Name,i);getchar(); scanf(%c,&NewNode-Kind); NewNode-ChildNum=-1;NewNode-Parent=Node;Node-NextNodei=NewNode;CreatTree(Node-NextNodei); / 从子女的数目开始 void OutPutAll(TreeNode *Tree)int i, flag=0;* * * * * * * * *-);printf(nt 姓名 :%s出生日期 :%s
24、家庭住址: %s 性别: %c,Tree-Name,Tree-birthday,Tree-address,Tree-Kind);if (Tree-Kind=G|Tree-Kind=g)printf(t是否健在(1- 健在, 0-去世) :) ;flag=1;printf(女);printf(男);elseif(Tree-death=1) printf(1); else if(Tree-death=0) printf(0);if (!(Tree-NextNode0)printf(nt 至今没有配偶和子女 n); return;if(flag=1)printf(nt丈夫 姓名 :%s,Tree-N
25、extNode0-Name);elseprintf(nt妻子 姓名 :%s,Tree-NextNode0-Name);printf(t 是否健在(1- 健在, 0-去世) :) ;if(Tree-death=1) printf(1); else if(Tree-death=0) printf(0); for(i=1;iChildNum;i+)printf(nt第4个子女的姓名:s 出生日期:s 家庭住址:%s性别 %c,i,Tree-NextNodei-Name,Tree-NextNodei-birthday,Tree-Next Nodei-address,Tree-NextNodei-Kin
26、d);if (Tree-NextNodei-Kind=G|Tree-NextNodei-Kind=g)printf( 女);elseprintf( 男);printf(t是否健在 (1- 健在,0-去世): );if(Tree-death=1) printf(1);else if(Tree-death=0) printf(0);printf(nt);for(i=1;iChildNum;i+)OutPutAll(Tree-NextNodei);TreeNode * SearchTree(TreeNode *Tree,char name,int length)int i;TreeNode *New
27、Node;if(strcmp(Tree-Name,name)=0)if(length=0)FLAG=1;elseFLAG=0;return Tree; if(Tree-NextNode0=NULL)return NULL;for(i=0;iChildNum;i+)if (i=0) NewNode=SearchTree(Tree-NextNodei,name,0);elseNewNode=SearchTree(Tree-NextNodei,name,20);if (NewNode!=NULL)return NewNode;return NULL;void OutPutMessage(TreeNo
28、de * Tree,char name,int length)int flag=0,i;TreeNode *NewNode;printf(nnt*); if(Tree=NULL) printf(nnt* 该家谱图中没有s这个人的信息请确认是否输入错 误 *n, name);return;printf(nnt 您所要找的人已经找到信息如下所示 :);printf(nnt姓 名 :%s 出 生 日 期 :%s 家 庭 住 址 : %s 性另廿:c, name,Tree-birthday,Tree-address,Tree-Ki nd);if (Tree-Kind=G|Tree-Kind=g)fla
29、g=1; /标记他 ( 她) 的性另printf(女);elseprintf(男);printf(t 是否健在(1- 健在, 0-去世) :) ; if(Tree-death=1) printf(1); else if(Tree-death=0) printf(0);NewNode=Tree-Parent;if (FLAG=1)if(flag=1)printf(nnt 她是嫁入此家族的所以亲生父母信息不在家谱内包括);printf(nt丈夫姓名:s,NewNode-Name);elseprintf(nnt他是入赘此家族的所以亲生父母信息不在家谱内包括);printf(nt妻子姓名 :%s,Ne
30、wNode-Name);if (NewNode-ChildNum)0) / 判断他(她)是否有孩子printf(nt 的孩子的信息如下 :); /输出他 (她) 的孩子的信息for(i=1;iChildNum;i+)printf(nt 姓名:s 性别:,NewNode-NextNodei-Name);if (NewNode-NextNodei-Kind=G|NewNode-Kind=g)printf( 女);elseprintf( 男);printf(t 是否健在(1-健在,0-去世) :); if(Tree-death=1) printf(1); else if(Tree-death=0)
31、printf(0);return;if(NewNode=NULL)/ 判断它是不是根节点如果是的话就没有父母兄弟信息 printf(nt 是这个家谱图里最年长的人 ,name);elseif (NewNode-Kind=G|NewNode-Kind=g) /判断父亲节点是父亲还是母亲printf(nt母亲 姓名 :%s,NewNode-Name);/ 输出他(她)的父母亲的信息printf(nt父亲 姓名 :%s,NewNode-NextNode0-Name);elseprintf(nt母亲 姓名 :%s,NewNode-NextNode0-Name);printf(nt父亲姓名:s,NewN
32、ode-Name); if(Tree-NextNode0!=NULL) /判断他(她)是否有配偶 if(flag=1)/ 输出他(她)的配偶的信息 printf(nt丈夫 姓名 :%s,Tree-NextNode0-Name);elseprintf(nt妻子 姓名 :%s,Tree-NextNode0-Name);if (Tree-ChildNum0) / 判断他(她)是否有孩子 printf(nt 的孩子的信息如下 :); /输出他(她)的孩子的信息for(i=1;iChildNum;i+):%sprintf(nt 另 I:,Tree-NextNodei-Name);if (Tree-Nex
33、tNodei-Kind=G|Tree-Kind=g)printf(女);elseprintf(男);printf(t是否健在(1- 健在, 0-去世) :) ;if(Tree-death=1) printf(1);else if(Tree-death=0) printf(0);elseprintf(nt%s 至今还没有孩子 ,name);elseprintf(nt%s 至今还没有配偶和孩子 n,Tree-Name);TreeNode * SearchTree1(TreeNode *Tree,char birth,int length)int i;TreeNode *NewNode;if(str
34、cmp(Tree-birthday,birth)=0)if(length=0)FLAG=1;elseFLAG=0;return Tree;if(Tree-NextNode0=NULL)return NULL;for(i=0;iChildNum;i+)if (i=0)NewNode=SearchTree1(Tree-NextNodei,birth,0);elseNewNode=SearchTree1(Tree-NextNodei,birth,20);if (NewNode!=NULL)return NewNode;return NULL;void OutPutMessage1(TreeNode
35、* Tree,char birth,int length)int flag=0,i;TreeNode *NewNode;printf(nnt*); if(Tree=NULL) printf(nnt*该家谱图中没有出生日期为s这个人的信息请确认是否输入错误 *n,birth);return;printf(nnt 您所要找的人已经找到信息如下所示 :);printf(nnt姓 名 :%s 出 生 日 期 :%s 家 庭 住 址 : %s 性另廿:c,Tree-Name,Tree-birthday,Tree-address,Tree-K in d);if (Tree-Kind=G|Tree-Kind
36、=g)flag=1; /标记他 ( 她) 的性另printf(女);elseprintf(男);void Change(TreeNode * Tree) / 修改某个人的信息char name20;TreeNode * NewNode; printf(nt 请输入你要修改的人的姓名 :nt); scanf(%s,name);NewNode=SearchTree(Tree,name,20); if(NewNode=NULL)printf(nnt*该家谱图中没有s这个人的信息请确认是否输入错误 *n, name);return;elseSubMenue1(NewNode);void SubMenu
37、e1(TreeNode * Tree) / 输出副菜单char c;int flag,i;char name20;char birth20;char address150;char Parent220;TreeNode * NewNode;getchar();while(1)-A:修改个人的信息丿Li、-B:修改父母的信息丿Li、-C:修改子女的信息-D:退出请选择你的操作*system(cls); printf(t); printf(nnt );printf(nt-*-*-*-*-* );printf(nt-*-*-*-*-*-*-*-*-* );printf(nt-*-*-*-*-*-*-
38、*-*-* );printf(nt-*-*-*-*-*-*-*-*-*-*-*-*nt);请输入修改的姓名 : 如果不需要修改就输入 0然后按c=getchar(); switch(c) case A: printf(nnt Enter 键继续 nt);scanf(%s,name);if(strcmp(name,0)!=0) strcpy(Tree-Name,name);printf(nnt 是否要修改性别 : 如果需要就输入 1 不需要修改就输入 0 然后按 Enter 键继续 nt);scanf(%d,&flag);if (flag=1) if(Tree-Kind=G|Tree-Kind=
39、g) Tree-Kind=B;else Tree-Kind=G;printf(nnt 请输入修改的出生日期 : 如果不需要修改就输入 0然 后按 Enter 键继续 nt);scanf(%s,birth);if(strcmp(birth,0)!=0) strcpy(Tree-birthday,birth);printf(nnt 请输入修改的家庭地址 : 如果不需要修改就输入 0然 后按 Enter 键继续 nt);scanf(%s,address1); if(strcmp(address1,0)!=0) strcpy(Tree-address,address1); printf(nnt 个人信
40、息修改成功 ); break; case B:if(Tree-Parent=NULL) / 判断是不是头节点printf(nt 是这个家谱图里最顶端的人没有父母信息 !,name); break;if (FLAG=1) / 判断是不是入赘或加入此间的if(Tree-Kind=G|Tree-Kind=g)printf(nnt 她是嫁入此间的所以父母信息不在家谱内包括 );elseprintf(nnt 他是入赘此间的所以父母信息不在家谱内包括 );break; if(Tree-Parent-Kind=G|Tree-Parent-Kind=g)strcpy(Parent0,母亲 );strcpy(P
41、arent1,父亲 );elsestrcpy(Parent0,父亲 );strcpy(Parent1,母亲 );printf(nnt 请输入s要修改的姓名:如果不需要修改就输入 0然后 按 Enter 键继续 nt,Parent0);scanf(%s,name); if(strcmp(name,0)!=0) strcpy(Tree-Parent-Name,name);printf(nnt 请输入s要修改的姓名:如果不需要修改就输入 0然后 按 Enter 键继续 nt,Parent1); scanf(%s,name);if(strcmp(name,0)!=0) strcpy(Tree-Pare
42、nt-NextNode0-Name,name);printf(nnt 父母的信息修改成功 );break;case C:if(Tree-ChildNum=0)printf(nnt 至今还没有子女 ); break;if (Tree-Parent !=NULL) if(strcmp(Tree-Name,Tree-Parent-NextNode0-Name)=0)/ 如果他是入赘 或者是嫁入的就需用配偶节点完成修改 Tree=Tree-Parent; for(i=1;iChildNum;i+) printf(nnt请输入 %s 修改的姓名 : 如果不需要修改就输入 0然后按 Enter 键继续 n
43、t,Tree-NextNodei-Name);scanf(%s,name); if(strcmp(name,0)!=0) strcpy(Tree-NextNodei-Name,name);printf(nnt 是否要修改性别 : 如果需要就输入 1 不需要 修改就输入 0 然后按 Enter 键继续 nt);scanf(%d,&flag);if (flag=1) if(Tree-NextNodei-Kind=G|Tree-NextNodei-Kind=g) Tree-NextNodei-Kind=B;else Tree-NextNodei-Kind=G; printf(nnt 子 女 的 信
44、息 修 改 成 功);break;case D:printf(nnt 本 项 服 务 到 此 结 束);break;case n:break;default:printf(nnt 对 不 起 ! 你 的 选 择 不 在 服 务 范 围 之内!);printf(nt 请 您 再 次 选 择 所 需 的 服 务项!);printf(nt 谢 谢 合作!nt);break; if (c=D|c=d)break;printf(nnt 请按 Enter 键继续操作 );getchar();getchar(); void SaveFamily(TreeNode *root)/ 保存家谱至指定文件 char
45、 saveFileNamemaxFileNameLen;FILE* fp;TreeNode *queue50, *head;int i, front, rear;/ 队列的头指针,尾指针printf( * 保存家谱 *nn);/if(root=NULL)if(root = NULL)printf(tt 家谱中无成员,无法保存! n);return;TipForSaveFilePosition;/ 文件及其绝对路径格式 scanf(%s, saveFileName);getchar();fp = fopen(saveFileName, w);/不存在则新建。存在 , 则从文件起始位置写, 原内容
46、将被覆盖。if(fp = NULL)printf(tt 新建文件失败! n);return ;elseprintf(tt 新建文件成功, 文件及其路径为: %sn, saveFileName);/* 利用宽度优先搜索遍历家族多叉树 */fwrite(root, sizeof(TreeNode), 1, fp); / 将根结点存入文件 ( 二进制形 式)front = rear = 0;/初始化空队queuerear+ = root;/ 根结点进队 while(front != rear)/队列不为空head = queuefront+;/ 队头元素出队if (head-NextNode0 !=
47、 NULL)fwrite(head-NextNode0, sizeof(TreeNode), 1, fp);for(i=1; iChildNum; i+)fwrite(head-NextNodei, sizeof(TreeNode), 1, fp); queuerear+ = head-NextNodei;fclose(fp);fp = NULL;void ReadFamily(tree *root)/ 从指定文件中读取家谱FILE* fp;char readFileName50;tree queue50,head;int i, front, rear;printf( * 读取家谱 *nn);
48、printf(tt 输入文件名及其路径,以便从中读取家谱。 n); TipForReadFilePosition;scanf(%s, readFileName);getchar();fp = fopen(readFileName, r);/为读而打开文本文件 ( 文件必须已存在 )if(fp = NULL)printf(tt 只读形式打开文件失败! n);return;/* 一边从文件读取结构体变量,一边重新建树 */*root = (tree)malloc(sizeof(TreeNode);if(*root = NULL)printf(tt 重建树时为根结点分配内存失败! n);return;fread(*root, sizeof(Tree
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年电气工程师招聘题目及答案
- 2024-2025学年河南省安阳市滑县部分学校高一(下)期末数学试卷(含解析)
- 2025年外语法制史试题及答案
- 2025年食道癌相关试题及答案
- 2025年国学知识竞赛题库大全小众版
- 2025年艺术生必 备试题及答案
- 2025年军事知识竞赛题库大全
- 2025年mba研究生联考试题及答案
- 2025年佩戴头盔试题及答案
- 2025年猪哥性能测试题目及答案
- 发改委专家评审管理办法
- 2025养殖场鸡舍承包合同范本
- 拼音复习完整版本
- 七上语文综合性学习《有朋自远方来》梯度训练2 课件
- 华润集团招标管理办法
- 老年护理评估课件
- 国网配电培训课件
- 国有企业“十五五”规划编制要点
- 浙江2025年6月高一学考模拟生物试题及答案
- 2025年6月14日潮州市直遴选笔试真题及答案解析
- 2025年鱿鱼行业市场调研报告
评论
0/150
提交评论