数据结构家谱管理系统(二叉链表)

合集下载

数据结构(二十四)二叉树的链式存储结构(二叉链表)

数据结构(二十四)二叉树的链式存储结构(二叉链表)

数据结构(⼆⼗四)⼆叉树的链式存储结构(⼆叉链表) ⼀、⼆叉树每个结点最多有两个孩⼦,所以为它设计⼀个数据域和两个指针域,称这样的链表叫做⼆叉链表。

⼆、结点结构包括:lchild左孩⼦指针域、data数据域和rchild右孩⼦指针域。

三、⼆叉链表的C语⾔代码实现:#include "string.h"#include "stdio.h"#include "stdlib.h"#include "io.h"#include "math.h"#include "time.h"#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define MAXSIZE 100 /* 存储空间初始分配量 */typedef int Status; /* Status是函数的类型,其值是函数结果状态代码,如OK等 *//* ⽤于构造⼆叉树********************************** */int index=1;typedef char String[24]; /* 0号单元存放串的长度 */String str;Status StrAssign(String T,char *chars){int i;if(strlen(chars)>MAXSIZE)return ERROR;else{T[0]=strlen(chars);for(i=1;i<=T[0];i++)T[i]=*(chars+i-1);return OK;}}/* ************************************************ */typedef char TElemType;TElemType Nil=''; /* 字符型以空格符为空 */Status visit(TElemType e){printf("%c ",e);return OK;}typedef struct BiTNode /* 结点结构 */{TElemType data; /* 结点数据 */struct BiTNode *lchild,*rchild; /* 左右孩⼦指针 */}BiTNode,*BiTree;/* 构造空⼆叉树T */Status InitBiTree(BiTree *T){*T=NULL;return OK;}/* 初始条件: ⼆叉树T存在。

家谱的设计与实现(二叉树)

家谱的设计与实现(二叉树)

家谱的设计与实现(树,查找)家谱的设计主要是实现对家庭成员信息的建立、查找、插入、修改、删除等功能。

可。

基本功能如下:(1)家谱中每个成员的信息包括:姓名、性别。

(2)家谱祖先数据的录入(树的根结点)。

(3)家庭成员的添加:即添加某人的儿女(包括姓名和性别),儿女的数目由控制台端给出,然后输入相应的儿女姓名和性别(此处所有儿女的姓名不能重名)。

(4)家庭成员的修改:可以修改某一成员的姓名。

(5)家庭成员的查询:查询某一成员在家族中的辈分(第几代),并能查询此成员的所有子女及这一辈的所有成员。

(6)家庭成员的删除:删除此成员时,若其有后代,将删除其所有后代成员。

#include <stdio.h>#include <malloc.h>#include <string>#include <stdlib.h>#define MAX 10typedef struct node{ //定义data存储结构char name[MAX]; //姓名char sex; //性别int generation;//代目}node;typedef struct ft{ //创建结构体struct node l; //家谱中直系家属struct ft *brother;//用来指向兄弟struct ft *child;//用来指向孩子}ft;ft *root; //root是结构体ft的指针ft *search(ft *p,char ch[]) // 搜索指针函数{ft *q;if(p==NULL)return NULL;//没有家谱,头指针下为空if(strcmpi(p->,ch)==0)return p;//家谱不为空,头指针下有这个人if(p->brother){q=search(p->brother,ch);//在兄弟中找if(q)return q;//找到}if(p->child){q=search(p->child,ch);//在孩子中找if(q!=NULL)return q;}return NULL;//没有找到}ft *parent(ft *p,ft *q,int *flag) //通过parent函数得到双亲结点。

数据结构-家谱管理系统

数据结构-家谱管理系统

宁波大红鹰学院信息工程学院课程设计报告项目名称:家谱查询系统项目组长:白钰琦项目成员:徐程凯、徐海域、项鸿伟班级名称:10计科1班专业名称:计算机科学与技术完成时间: 2012年12月1日信息工程学院制目录一、案例描述........................................................................................................... - 3 -1、总体描述...................................................................................................... - 3 -2、模块描述...................................................................................................... - 3 -二、设计思路........................................................................................................... - 3 -三、程序设计........................................................................................................... - 4 -1、数据结构描述.............................................................................................. - 4 -2、主函数及其流程图...................................................................................... - 4 -3、源程序.......................................................................................................... - 5 -四、调试与分析....................................................................................................... - 5 -1、主菜单........................................................................................................ - 10 -2、显示家谱信息............................................................................................ - 11 -3、显示家谱中第n代人所有信息................................................................ - 11 -4、按姓名查找某人并相应输出.................................................................... - 11 -5、按出生日期查找家谱成员信息....................................... 错误!未定义书签。

家谱管理系统(含源代码)

家谱管理系统(含源代码)

家谱管理系统——C语言(数据结构)目的和要求:树形结构是一种非常重要的非线性结构,它用于描述数据元素之间的层次关系,人类家谱是树形结构的典型体现,通过此项训练让学生掌握树形结构的知识;使学生重点掌握树与二叉树的转换,二叉树的存储和遍历,和二叉树相关的一些运算;要求完成家谱信息的录入和保存,任意成员的查找及某一成员祖先、子孙、兄弟、堂兄弟的查找。

排答疑和辅导。

完整代码:#include <stdio.h>#include <stdlib.h>#include <string.h>int MATEFLAG=0; //是否入赘或嫁入这家的,1表示为是,0表示否typedef struct TreeNode//树节点定义{int Num; //保存此人儿女个数char Name[20]; //保存此人姓名char Kind; //保存此人性别,男M,女Fstruct TreeNode * NextNode[20]; //保存此人的儿女,NextNode[0]里存放配偶的地址struct TreeNode * Parent; //保存此节点的父节点}TreeNode;void CreatTree(TreeNode *Tree);//创建树void OutPutAll(TreeNode *Tree);//输出树TreeNode * SearchTree(TreeNode *Tree,char name[],int length);void MainMenu(TreeNode *Tree);void SubMenue1(TreeNode * Tree);void SubMenue2(TreeNode *Tree);void Change(TreeNode * Tree);void AddNew(TreeNode * Tree);void OutPutMessage(TreeNode * Tree,char name[],int length);//主函数void main(){TreeNode *Tree;//产生根节点Tree=(TreeNode *)malloc(sizeof(TreeNode));Tree->Parent =NULL;strcpy(Tree->Name,"0");MainMenu(Tree);//显示主菜单}//添加新的成员void AddNew(TreeNode * Tree){SubMenue2(Tree);//添加新成员界面}//显示添加家庭信息的界面void SubMenue2(TreeNode *Tree){char c;int num;char name[20];TreeNode * NewNode;getchar();while(1){system("cls");printf("请选择你的操作\n");printf("A:添加某个人的子女的信息\n");printf("B:添加某个人配偶的信息\n");printf("C:退出\n");printf("请选择相应功能:\n");c=getchar();switch(c){case 'A': //添加子女信息printf("请输入那个人的名字:\n");scanf("%s",name);Tree=SearchTree(Tree,name,20);//在家谱里查找这个人if(Tree==NULL){printf("该家谱图中没有%s这个人的信息请确认是否输入错误\n",name);break;}if(Tree->Parent==NULL&&Tree->NextNode[0]==NULL||Tree->Parent!=NULL&&Tree->N ame!=Tree->Parent->NextNode[0]->Name){printf("至今还没有配偶请先添加配偶\n",Tree->Name);break;}if(Tree->Parent==NULL&&(Tree->Num>20||Tree->Num<0))Tree->Num=0;if(MATEFLAG==1)Tree=Tree->Parent;NewNode=(TreeNode *)malloc(sizeof(TreeNode));printf("请输入添加人员姓名:\n");scanf("%s",NewNode->Name);printf("请输入添加人员性别女F男M:\n");scanf("%1s",&NewNode->Kind);num=Tree->Num;NewNode->NextNode[0]=(TreeNode *)malloc(sizeof(TreeNode));NewNode->NextNode[0]=NULL;NewNode->Num=0;NewNode->Parent=Tree;Tree->NextNode[num+1]=NewNode;Tree->Num=Tree->Num+1;printf("子女的信息添加成功\n");break;case 'B':printf("请输入那个人的名字:\n");scanf("%s",name);Tree=SearchTree(Tree,name,20);if(Tree->Parent!=NULL&&strcmp(Tree->Name,Tree->Parent->NextNode[0]->Name)==0||Tree->NextNode[0]!=NULL){printf("已经有了配偶\n");break;}if(Tree==NULL){printf("该家谱图中没有%s这个人的信息请确认\n",name);break;}NewNode=(TreeNode *)malloc(sizeof(TreeNode));printf("请输入添加人员姓名:\n");scanf("%s",NewNode->Name);printf("请输入添加人员性别女F男M:\n");scanf("%1s",&NewNode->Kind);NewNode->Parent=Tree;Tree->NextNode[0]=NewNode;break;case 'C':printf("本项服务到此结束\n");break;case '\n':break;default:printf("对不起!你的选择错误\n");break;}if (c=='C'||c=='c')break;printf("请按Enter键继续操作\n");getchar();}}//修改某个人的信息void Change(TreeNode * Tree){char name[20];TreeNode * NewNode;printf("请输入你要修改的人的信息:\n");scanf("%s",name);NewNode=SearchTree(Tree,name,20);if(NewNode==NULL){printf("该家谱图中没有%s这个人的信息请确认是否输入错误\n",name);return;}else{SubMenue1(NewNode);}}//输出副菜单void SubMenue1(TreeNode * Tree){char c;int flag,i;char name[20];char Parent[2][20];TreeNode * NewNode;getchar();while(1){system("cls");printf("请选择你的操作\n");printf("A:修改个人的信息\n");printf("B:修改父母的信息\n");printf("C:修改兄弟姐妹的信息\n");printf("D:修改子女的信息\n");printf("E:修改配偶的信息\n");printf("F:退出\n");c=getchar();switch(c){printf("请输入修改的姓名:如果不需要修改就输入'0'然后按Enter键继续\n"); scanf("%s",name);if(strcmp(name,"0")!=0)strcpy(Tree->Name,name);printf("是否要修改性别:如果需要就输入'1'不需要修改就输入'0'然后按Enter键继续\n");scanf("%d",&flag);if (flag==1){if(Tree->Kind=='F'||Tree->Kind=='f')Tree->Kind='M';else Tree->Kind='F';}printf("个人信息修改成功\n");break;case 'B':if(Tree->Parent==NULL) //判断是不是头节点{printf("是这个家谱图里最顶端的人没有父母信息!\n",name);break;}if (MATEFLAG==1) //判断是不是入赘或加入此间的{if(Tree->Kind=='F'||Tree->Kind=='f'){printf("她是嫁入此间的所以父母信息不在家谱内包括\n");}else{printf("他是入赘此间的所以父母信息不在家谱内包括\n");}break;}if(Tree->Parent->Kind=='F'||Tree->Parent->Kind=='f'){strcpy(Parent[0],"母亲");strcpy(Parent[1],"父亲");}else{strcpy(Parent[0],"父亲");strcpy(Parent[1],"母亲");}printf("请输入%s要修改的姓名:如果不需要修改就输入'0'然后按Enter键继续\n",Parent[0]);scanf("%s",name);if(strcmp(name,"0")!=0)strcpy(Tree->Parent->Name,name);printf("请输入%s要修改的姓名:如果不需要修改就输入'0'然后按Enter键继续\n",Parent[1]);scanf("%s",name);if(strcmp(name,"0")!=0)strcpy(Tree->Parent->NextNode[0]->Name,name);printf("父母的信息修改成功\n");break;case 'C':NewNode=Tree->Parent;if(NewNode==NULL) //判断是不是头节点{printf("是这个家谱图里最顶端的人没有兄弟姐妹信息!\n",name);break;}if (MATEFLAG==1) //判断是不是入赘或嫁入这家的{if(Tree->Kind=='F'||Tree->Kind=='f'){printf("她是嫁入此间的所以兄弟姐妹信息不在家谱内包括\n");}else{printf("他是入赘此间的所以兄弟姐妹信息不在家谱内包括\n");}break;}if(NewNode->Num==1){printf("没有兄弟姐妹\n");break;}else{for(i=1;i<=NewNode->Num;i++){if(NewNode->NextNode[i]->Name!=Tree->Name){printf("请输入%s修改的姓名:如果不需要修改就输入'0'然后按Enter键继续\n",NewNode->NextNode[i]->Name);scanf("%s",name);if(strcmp(name,"0")!=0)strcpy(NewNode->NextNode[i]->Name,name);printf("是否要修改性别:如果需要就输入'1'不需要修改就输入'0'然后按Enter键继续\n");scanf("%d",&flag);if (flag==1){if(NewNode->NextNode[i]->Kind=='G'||NewNode->NextNode[i]->Kind=='g') NewNode->NextNode[i]->Kind='B';else NewNode->NextNode[i]->Kind='G';}}}}printf("兄弟姐妹的信息修改成功\n");break;case 'D':if(Tree->Num==0){printf("至今还没有子女\n");break;}if (Tree->Parent !=NULL)if (strcmp(Tree->Name,Tree->Parent->NextNode[0]->Name)==0) //如果他是入赘或者是嫁入的就需用配偶节点完成修改{Tree=Tree->Parent;}for(i=1;i<=Tree->Num;i++){printf("请输入%s修改的姓名:如果不需要修改就输入'0'然后按Enter键继续\n",Tree->NextNode[i]->Name);scanf("%s",name);if(strcmp(name,"0")!=0)strcpy(Tree->NextNode[i]->Name,name);printf("是否要修改性别:如果需要就输入'1'不需要修改就输入'0'然后按Enter键继续\n");scanf("%d",&flag);if (flag==1){if(Tree->NextNode[i]->Kind=='F'||Tree->NextNode[i]->Kind=='f')Tree->NextNode[i]->Kind='M';else Tree->NextNode[i]->Kind='F';}}printf("子女的信息修改成功\n");break;case 'E':if(Tree->Parent!=NULL){if(Tree->NextNode[0]==NULL&&strcmp(Tree->Name,Tree->Parent->NextNode[0]->Name)!=0){printf("至今还没有配偶\n");break;}if (strcmp(Tree->Name,Tree->Parent->NextNode[0]->Name)==0){printf("\n\n\t请输入%s修改的姓名:如果不需要修改就输入'0'然后按Enter键继续\n\t",Tree->Parent->Name);scanf("%s",name);if(strcmp(name,"0")!=0)strcpy(Tree->Parent->Name,name);}else{printf("\n\n\t请输入%s修改的姓名:如果不需要修改就输入'0'然后按Enter键继续\n\t",Tree->NextNode[0]->Name);scanf("%s",name);if(strcmp(name,"0")!=0)strcpy(Tree->NextNode[0]->Name,name);}}else{if(Tree->NextNode[0]==NULL)printf("至今还没有配偶\n");else{printf("\n\n\t请输入%s修改的姓名:如果不需要修改就输入'0'然后按Enter键继续\n\t",Tree->NextNode[0]->Name);scanf("%s",name);if(strcmp(name,"0")!=0)strcpy(Tree->NextNode[0]->Name,name);}}printf("配偶的信息修改成功\n");break;case 'F':printf("本项服务到此结束\n");break;case '\n':break;default:printf("对不起!你的选择错误\n");break;}if (c=='F'||c=='f')break;printf("请按Enter键继续操作\n");getchar();getchar();}}//输出主菜单void MainMenu(TreeNode *Tree){char c;//用于接受用户输入的选项char name[20];while(1){system("cls");//清屏printf("★★★★★★★★★★★★★欢迎进入家谱管理系统★★★★★★★★★★★\n\n\n");printf(" ◆◆菜单◆◆ \n\n");printf(" ●输入家谱信息---------------------1\n");printf(" ●查找家族成员---------------------2\n");printf(" ●添加家族成员---------------------3\n");printf(" ●输出家谱信息---------------------4\n");printf(" ●修改成员信息---------------------5\n");printf(" ●退出-----------------------------6\n");printf("\n\n★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\n");printf("请选择相应的功能:\n");c=getchar();switch(c){case '1': TreeNode * NewNode; NewNode=(TreeNode *)malloc(sizeof(TreeNode));//建立新节点printf("请输入姓名:"); scanf("%s",Tree->Name);//给节点姓名赋值printf("请输入性别(女F,男M):"); getchar();//给性别赋值scanf("%c",&(Tree->Kind)); // Tree->Parent=NewNode; Tree->Parent=NULL; CreatTree(Tree); printf("家谱图已经建立成功\n"); printf("请按Enter键继续操作\n"); getchar(); break; case '2': if(strcmp(Tree->Name,"0")==0) { printf("家谱图还未建立请先建立\n"); getchar(); break; } printf("请输入你要查找的人的姓名:\n"); scanf("%s",name); OutPutMessage(SearchTree(Tree,name,20),name,20); getchar(); break; case '3': if(strcmp(Tree->Name,"0")==0) { printf("家谱图还未建立请先建立\n"); getchar(); break; } AddNew(Tree); getchar(); break; case '4': if(strcmp(Tree->Name,"0")==0) { printf("家谱图还未建立请先建立\n"); getchar(); break; }printf("整个家谱的主要信息如下:\n");OutPutAll(Tree);getchar();break;case '5':if(strcmp(Tree->Name,"0")==0){printf("家谱图还未建立请先建立\n");getchar();break;}Change(Tree);getchar();break;case '6':printf("本程序结束,欢迎下次使用。

C语言二叉树家谱管理系统

C语言二叉树家谱管理系统

摘要本文设计了一个对数据输入,输出,储存,查找的多功能软件,本文需要保存家族的基本信息,包括姓名及它们的关系,但是由于家族信息很巨大而且关系很复杂所以采用二叉树来表示它们的关系。

并且具有保存文件的功能,以便下次直接使用先前存入的信息。

家谱的功能是查询家族每个人的信息,并且输出它们的信息,还要具有查询输出功能。

本文采用二叉树来存取家族的基本信息,头结点作为父亲节点,他的左孩子为他的妻子,妻子结点的右孩子为他的孩子,依次存储每个家庭的信息。

可以查找每个父亲的孩子和每个人的所有祖先。

关键词:二叉树家谱结点目录1 系统功能概述 (1)1.1 系统功能 (1)图2 成员二叉树功能模块图 (4)1.2 总体功能模块 (4)2 系统各功能模块的详细设计 (5)2.1功能选择 (5)2.2信息输入 (7)2.3信息输出 (7)2.4信息存盘 (7)2.5信息清盘 (8)2.6信息查询 (9)2.7源程序 (11)3设计结果与分析 (22)3.1菜单函数功能测试 (22)4.2输入功能函数测试 (23)3.3输出功能函数测试 (23)3.4清盘功能函数测试 (23)3.5存盘功能函数测试 (24)3.6查询功能函数测试 (24)总结 (26)参考文献 (27)1 系统功能概述1.1 系统功能实现的法是先定义一个二叉树,该二叉树上的每个结点由三个元素组成:姓名、指向它左孩子的指针、以及指向它右孩子的指针构成。

该家谱管理系统将信息用文件的法进行存储管理,再从文件中将成员信息以递归的法创建二叉树。

该输入成员信息的法是将父亲结点存上父亲的信息,然后父亲结点的左孩子存上母亲的信息,母亲结点的右孩子存上孩子的信息。

(1)定义结构体结构体为表示一个对象的不同属性提供了连贯一致的法,结构体类型的说明从关键词struct开始,成员可以由各种数据类型混合构成,成员甚至还可以是数组或者其他类型的结构,但是,结构体中不能包含自身定义类型的成员。

二叉树家谱

二叉树家谱

《数据结构》课程实训报告题目:家谱树完成人:专业班级:学号:指导教师:年月日1.题目与要求1.1问题提出本人计划编写一个家谱管理系统,主要用来管理家族成员的基本信息。

1.2本系统涉及的知识点结构体,数组,循环,函数,分支,指针1.3功能要求1、确定整个程序的功能模块。

实现程序的主界面,要对主界面的功能选择输入进行容错处理。

2、实现单个结点信息的录入。

3、对录入日期信息进行合法性检验。

4、采用改变字体颜色的方式突出显示主界面的功能项。

5、计算从出生日期到死亡日期的实际天数6、若家谱树为空,则新建家谱树。

实现成员节点的添加。

基本功能中可以强制要求所有成员不同名,即不考虑同名情况(符合小家族的实际情况)。

7、添加成员节点时,可以选择将新添加的节点作为整个家谱的上一代祖先,或者将新添加的节点作为某个现有成员的孩子。

8、作为某个现有成员的孩子,根据给出的父节点的姓名将该结点添加到相应位置,注意,针对某一父节点,添加第一个孩子和其它孩子的区别。

9、要求在孩子兄弟二叉树中按各个孩子的年龄进行排序。

10、将家谱树保存到二进制文件。

注意,不能保存空白节点。

11、从文件读入家谱信息,重建孩子兄弟二叉树形式的家谱。

12.从文件中读出所有节点信息到一个数组中,然后按一年中生日的先后进行快速排序。

13、按姓名查询家谱成员并显示该成员的各项信息。

14、给出某一成员的姓名,删除该成员和该成员的所有子孙。

15、成员信息的修改。

信息修改时要给出选择界面让用户选择需要修改的信息项。

基本功能中可以限定不容许修改父亲姓名和本人姓名。

对日期信息进行修改时要进行检验。

16、实现层次递进的方式显示整个家谱,显示结果应该体现家谱树的结构。

17、按各种关键字进行查询,要求给出关键字选择界面,并显示符合查询条件的节点信息。

18、信息统计基本要求包括:平均身高,平均寿命,男女成员各多少,平均家庭人口数目(假定每个成员构成一个家庭,该家庭的家庭成员是指成员本人和他的孩子,即家庭人口数=孩子数+1)。

数据结构_家谱管理系统

数据结构_家谱管理系统

数据结构_家谱管理系统【数据结构_家谱管理系统】一、引言家谱是记录家族成员关系的重要文献,传统的家谱管理方式已经无法满足现代社会的需求。

为了更好地管理家族信息,提高家族成员之间的联系和交流,我们设计并开发了一款家谱管理系统。

本文将详细介绍该系统的设计和实现。

二、系统概述家谱管理系统是一个基于数据结构的软件应用,旨在帮助用户管理家族成员的信息,包括姓名、性别、出生日期、配偶、子女等。

系统提供了多种功能,包括添加、删除、修改、查询、统计等操作,方便用户对家谱信息进行维护和管理。

三、系统设计1. 数据结构选择在家谱管理系统中,我们选择了树这种数据结构来表示家族关系。

每个节点代表一个家庭成员,节点之间通过指针连接,形成家族的层级结构。

2. 数据模型设计家族成员的信息可以通过一个结构体来表示,包括姓名、性别、出生日期等字段。

每个节点除了包含成员信息外,还包含指向配偶的指针和指向子女的指针。

3. 系统功能设计家谱管理系统提供了以下功能:(1) 添加成员:用户可以输入成员信息,系统根据用户输入创建一个新的节点,并将其插入到适当的位置。

(2) 删除成员:用户可以指定要删除的成员,系统会删除该成员及其所有子孙节点。

(3) 修改成员信息:用户可以选择要修改的成员,然后输入新的信息进行更新。

(4) 查询成员信息:用户可以通过姓名、出生日期等条件查询成员信息。

(5) 统计家族人数:系统可以统计家族的总人数、男性人数、女性人数等信息。

四、系统实现1. 数据结构实现我们使用C语言来实现家谱管理系统。

通过定义一个节点结构体,使用指针来连接各个节点,实现家族关系的表示和管理。

2. 功能实现(1) 添加成员:根据用户输入的信息,创建一个新节点,并将其插入到适当的位置。

插入操作需要遍历树来找到合适的位置。

(2) 删除成员:根据用户指定的成员,删除该节点及其所有子孙节点。

删除操作需要递归地遍历树。

(3) 修改成员信息:根据用户选择的成员,更新其信息。

数据结构(二叉树)家谱管理系统教学内容

数据结构(二叉树)家谱管理系统教学内容

数据结构(二叉树)家谱管理系统数学与计算机学院课程设计说明书课程名称: 数据结构与算法课程设计课程代码:题目: 二叉树生成家谱年级/专业/班:学生姓名:学号:开始时间: 2015 年 12 月 09 日完成时间: 2015 年 12 月 29 日课程设计成绩:指导教师签名:年月日目录(小三黑体,居中)1 需求分析 (6)1.1任务与分析 (6)1.2测试数据 (6)2 概要设计 (7)2.1 ADT描述 (7)2.2程序模块结构 (8)2.3各功能模块 (9)3 详细设计 (11)3.1结构体定义 (11)3.2 初始化 (12)3.3 插入操作 (14)3.4 查询操作 (17)4 调试分析 (19)5 用户使用说明 (20)6 测试结果 (20)结论 (25)附录 (26)参考文献 (27)摘要随着计算机科学技术、计算机产业的迅速发展,计算机的应用普及也在以惊人的速度发展,计算机应用已经深入到人类社会的各个领域。

计算机的应用早已不限于科学计算,而更多地应用在信息处理方面。

计算机可以存储的数据对象不再是纯粹的数值,而扩展到了字符、声音、图像、表格等各种各样的信息。

对于信息的处理也不再是单纯的计算,而是一些如信息存储、信息检索等非数值的计算。

那么,现实世界的各种数据信息怎样才能够存储到计算机的内存之中,对存入计算机的数据信息怎样进行科学处理,这涉及计算机科学的信息表示和算法设计问题。

为解决现实世界中某个复杂问题,总是希望设计一个高效适用的程序。

这就需要解决怎样合理地组织数据、建立合适的数据结构,怎样设计适用的算法,以提高程序执行的时间效率和空间效率。

“数据结构”就是在此背景下逐步形成、发展起来的。

在各种高级语言程序设计的基本训练中,解决某一实际问题的步骤一般是:分析实际问题;确定数学模型;编写程序;反复调试程序直至得到正确结果。

所谓数学模型一般指具体的数学公式、方程式等,如牛顿迭代法解方程,各种级数的计算等。

家谱管理系统数据结构(两篇)

家谱管理系统数据结构(两篇)

引言概述:家谱管理系统是一种用于管理和记录家族历史数据的工具。

它通过组织和存储家族成员的信息,包括个人资料、家庭关系和血统关系等数据,帮助家族成员更好地了解和维护其家族传统。

数据结构在家谱管理系统中起着重要的作用,它决定了系统的性能和效率。

在上一篇《家谱管理系统数据结构(一)》中我们介绍了家谱管理系统的基本数据结构,包括树和图。

在本文中,我们将深入研究家谱管理系统的数据结构,包括链表、数组、堆和哈希表,以及它们在家谱管理系统中的应用。

正文内容:一、链表1.链表的定义和基本操作,如插入、删除和查找节点等。

2.单向链表、双向链表以及循环链表的特点及适用场景。

3.在家谱管理系统中,链表可以用来存储家族成员的个人资料和家庭关系,形成一个有序的数据结构。

4.链表的优缺点分析,包括插入和删除速度快,但查找的效率低。

二、数组1.数组的定义和基本操作,包括插入、删除和查找元素等。

2.静态数组和动态数组的区别以及在家谱管理系统中的选择。

3.数组的存储方式和访问特点,以及对系统性能的影响。

4.数组的优缺点分析,包括查找速度快,但插入和删除的效率较低。

三、堆1.堆的定义和基本操作,如插入和删除堆顶元素等。

2.最大堆和最小堆的特点及适用场景。

3.在家谱管理系统中,堆可以用来维护家族成员之间的优先级关系,例如根据年龄进行排名。

4.堆的优缺点分析,包括快速找到最大(小)元素,但插入和删除的效率较低。

四、哈希表1.哈希表的定义和基本操作,如插入、删除和查找元素等。

2.哈希函数的设计原则和方法,以及冲突解决的技术。

3.在家谱管理系统中,哈希表可以用来快速查找家族成员的信息,例如根据姓名或者ID进行查找。

4.哈希表的优缺点分析,包括查找速度快,但对存储空间的利用率较低。

五、总结家谱管理系统作为一种用于管理和记录家族历史数据的工具,数据结构在其中起着重要的作用。

本文介绍了家谱管理系统中常用的数据结构,包括链表、数组、堆和哈希表,以及它们在系统中的应用。

常用数据结构 二叉树 链表

常用数据结构 二叉树 链表

数据结构之二叉树和链表介绍二叉树(Binary Tree)二叉树是每个节点最多有两个子节点的树结构,通常子节点被称为左子节点和右子节点。

它是一种非常高效的数据结构,用于表示具有层级关系的数据,如操作系统中的文件系统、数据库索引等。

二叉树的特殊形式包括二叉搜索树(BST)、平衡二叉树(AVL树)、红黑树等。

Java 代码示例:定义一个简单的二叉树结构Java```class TreeNode {int value;TreeNode left;TreeNode right;TreeNode(int value) {this.value = value;this.left = null;this.right = null;}}public class BinaryTree {public static void main(String[] args) {// 创建二叉树节点TreeNode root = new TreeNode(1);root.left = new TreeNode(2);root.right = new TreeNode(3);root.left.left = new TreeNode(4);root.left.right = new TreeNode(5);// 这里可以进行二叉树的遍历等操作}}```链表(Linked List)链表是由一系列节点组成的集合,每个节点包含数据部分和指向下一个节点的指针。

链表允许有效的元素插入和删除,因此在需要频繁插入和删除操作的场景下非常有用,如内存管理、哈希表的冲突解决等。

Java 代码示例:定义一个简单的单链表结构```class ListNode {int value;ListNode next;ListNode(int value) {this.value = value;this.next = null;}}public class LinkedList {public static void main(String[] args) {// 创建链表节点ListNode head = new ListNode(1);head.next = new ListNode(2);head.next.next = new ListNode(3);// 这里可以进行链表的遍历等操作}}```总结二叉树和链表各有其优缺点和适用场景。

简述二叉链表的类型定义

简述二叉链表的类型定义

简述二叉链表的类型定义二叉链表是一种常见的数据结构,它是由节点组成的树形结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。

二叉链表的类型定义包括节点结构体和二叉链表结构体两部分。

节点结构体定义节点结构体是二叉链表中最基本的数据单元,它包含三个成员变量:数据域、左子节点指针和右子节点指针。

其中,数据域用于存储节点的数据,左子节点指针和右子节点指针分别指向节点的左子节点和右子节点。

节点结构体的类型定义如下:```typedef struct BiTNode {int data; // 数据域struct BiTNode *lchild; // 左子节点指针struct BiTNode *rchild; // 右子节点指针} BiTNode, *BiTree;```在上面的代码中,BiTNode是节点结构体的别名,BiTree是指向节点结构体的指针类型。

节点结构体中的成员变量lchild和rchild都是指向节点结构体的指针类型,它们分别指向节点的左子节点和右子节点。

二叉链表结构体定义二叉链表结构体是由节点组成的树形结构,它包含一个指向根节点的指针。

二叉链表结构体的类型定义如下:```typedef struct {BiTree root; // 指向根节点的指针} BiTreeStruct;```在上面的代码中,BiTreeStruct是二叉链表结构体的别名,它包含一个指向根节点的指针root。

root指针指向节点结构体,表示二叉链表的根节点。

二叉链表的操作二叉链表是一种常见的数据结构,它支持多种操作,包括创建二叉链表、遍历二叉链表、插入节点、删除节点等。

下面我们将介绍二叉链表的常见操作。

1. 创建二叉链表创建二叉链表的过程就是构建二叉树的过程。

我们可以通过递归的方式来创建二叉链表。

具体步骤如下:1. 如果当前节点为空,则返回NULL。

2. 创建一个新节点,并将数据存储到新节点的数据域中。

数据结构_家谱管理系统

数据结构_家谱管理系统

引言概述:数据结构是计算机科学中非常重要的一部分,它涉及到如何组织、存储和管理数据以及实现各种基本操作的技术和方法。

家谱管理系统是一种将家族成员关系及相关信息进行组织和管理的系统。

本文将详细介绍数据结构在家谱管理系统中的应用,包括树、图、链表、哈希表和堆等数据结构的使用,以及各个数据结构之间的比较和选择。

正文内容:1.树的应用:1.1家族族谱的表示:家族族谱可以被看作是一棵树,其中每个节点表示一个家族成员,边表示家族成员之间的关系,如父子关系、兄弟关系等。

树的遍历算法可以用来查询家族成员的相关信息,比如查找某个成员的父亲、孩子、兄弟等。

1.2家族成员的添加和删除:通过树的插入和删除操作,可以方便地对家族成员进行增删操作。

例如,可以通过插入操作添加新的家族成员,通过删除操作删除家族成员。

1.3家族成员关系的查询:通过树的搜索算法,可以快速找到家族成员之间的关系。

例如,可以通过深度优先搜索算法找到某个成员的祖先、后代等。

2.图的应用:2.1家族成员的关系复杂性:家族成员之间的关系往往是复杂的,不仅涉及到父子关系,还可能涉及到配偶关系、外戚关系等。

图可以更好地表示这种复杂的关系。

2.2家族成员关系的可视化:通过图的可视化技术,可以直观地展示家族成员之间的关系,帮助用户更好地了解和使用家谱管理系统。

例如,可以用不同颜色和形状的节点表示不同的家族成员,用边表示他们之间的关系。

2.3关系网络的分析:通过图的分析算法,可以进一步研究和分析家族成员之间的关系。

例如,可以计算家族成员的亲密度、距离等,为家族成员提供更多的服务和帮助。

3.链表的应用:3.1成员信息的存储:家族成员的相关信息可以通过链表来存储,每个节点表示一个家族成员,节点中包含该成员的姓名、性别、出生日期等信息。

通过链表的插入和删除操作,可以方便地对成员信息进行增删操作。

3.2成员关系的维护:通过链表中的指针关系,可以方便地维护家族成员之间的关系。

数据结构家谱管理系统(二叉链表)

数据结构家谱管理系统(二叉链表)
8
char life; //是否健在 };
3、 二叉树结点结构体 struct Node { Information data; //个人信息 Node* child; //第一个孩子 Node* brother; //兄弟 };
4、 家谱类(二叉树结构、左孩子,右兄弟) class FamilyTree { private:
2、 更新模块 (1) 创建家谱、增加成员、删除成员、成员改名 (2) 主要函数: Node* Creat( ); //构造函数调用 void AddNewPeople(Node *root,string FatherName,string NAme); // 增加新的家族成员 int DeletePeople(Node *root,string FatherName,string Deletepeople); //删除家族成员
7
数据结构实现: 1、 生日结构体
struct BirthDay { int year; int month; int day; friend istream& operator>>(istream &is,BirthDay &b); friend ostream& operator<<(ostream &os,const BirthDay &b); };
2、 信息结构体(家族成员的基本信息) struct Information { string name; //姓名 string birthPlace; //出生地 BirthDay birthDay; //生日 string sex; //性别 string education; //学历 string job; //工作 string father; //父亲 string spouse; //配偶

数据结构课设-家谱管理系统

数据结构课设-家谱管理系统

数据结构课程设计——家谱管理系统一、问题描述问题名称:电子家谱问题内容:用树形的形式表示某家族的家谱,每个树结点表示一个家族成员,成员基本信息如下,具体属性自行确定。

1、姓名2、性别3、出生地4、配偶5、电话6、家庭住址7、职业8、简历9、其他系统实现功能:1、家谱信息1.1、输入1.2、修改1.3、删除2、查询2.1、某家谱成员的所有子孙的集合2.2、某家谱成员的所有祖先的集合2.3、某家谱成员的所有同辈成员的集合2.4、求某家谱成员的所有上一辈成员的集合2.5、给出两个家谱成员,确定他们的关系2.6、其他查询3、统计功能3.1、统计家谱成员的总人数3.2、统计从事某种职业的人数3.3、综合统计其他功能要求:1、用文件保存家谱信息2、图形方式显示家谱2二、系统总体设计(模块结构图)建立家谱读取文件保存家谱添加结点修改结点删除结点程序入口输出家谱统计基本查询关系查询祖先列表两人关系三、算法和数据结构设计数据结构的设计:使用兄弟孩子父亲表示法数据结构由如下的结构体组成1.1、日期的结构struct Date{int year; //年int month; //月int day; //日};1.2、成员信息的结构struct Info{char name[max_char_num];//姓名char birthplace[max_char_num];//出生地点Date birthdate;//结构date定义的出生日期Date deathdate;//结构date定义的死亡日期char sex[max_char_num];//性别char wife_or_husband[max_char_num];//配偶char phone[max_array_num];//电话char address[max_char_num];//家庭住址char resume[max_char_num];//简历//其他信息如下int height;//高度char occupation[max_char_num];//职业3char education[max_char_num];//受教育程度char top_headship[max_char_num];//最高职位char parentname[max_char_num];//父亲姓名,用于添加节点时用int Depth;//二叉树深度,输出二叉树时用};1.3、结点的结构typedef struct CSNode{Info data; //个人信息类型结构CSNode *firstchild,*nextsibling,*parent; //csnode的第一个孩子节点,下一个兄弟节点,双亲节点}*person;数据结构设计体会:使用树的按层遍历的方法找出某人的祖先的集合,但在从文件重建家谱的部分又碰到了困难,如何保存文件可是既节省空间又节省重建家谱的时间。

家谱管理系统数据结构

家谱管理系统数据结构

#include<stdio.h>#include<string.h>#include<stdlib.h>#include<conio.h>#define MAXS 100#define Elemtype chartypedef struct BiTNode{int mark;int level;char name[50];char birthday[50];char address[MAXS];Elemtype data;struct BiTNode *lc,*rc; }BiTNode,*BiTree;char nametemp[50];//姓名char birthdaytemp[50];//生日char addresstemp[MAXS];//地址char ch;int leveltemp;int Nth;char searchdata[50];char searchname[50];int count;BiTree temp;BiTree CreateBiTree(FILE *fp);void PrintInfo(BiTree T);void PreOrderTS(BiTree T);void ShowNth(BiTree T);void SearchByName(BiTree T);void SearchByBirthday(BiTree T);void AddChild(BiTree T);void DeleteByName(BiTree T);void searchmenu();void menu();void insystem();void closefile();#include"my.h"void SearchByName(BiTree T)//按照姓名查询,输出成员信息{if(T){if(T->lc){if(T->lc->rc){temp=T->lc->rc;while(temp){if(strcmp(temp->name,searchname)==0){count++;printf("\n此人的信息为: \n");PrintInfo(temp);printf("此人父兄的信息为: \n");PrintInfo(T);if(temp->lc->rc){printf("此人孩子的信息为: \n");temp=temp->lc->rc;while(temp){PrintInfo(temp);temp=temp->rc;}}return;}elsetemp=temp->rc;}}}SearchByName(T->lc);SearchByName(T->rc);}else{printf("请先建立家庭关系\n");return;}}void SearchByBirthday(BiTree T)//按照出生日期查询成员名单{if(T){if(strcmp(T->birthday,searchdata)==0){PrintInfo(T);count++;}}}void AddChild(BiTree T)//某成员添加孩子{if(T){if(strcmp(T->name,searchname)==0){count++;temp=(BiTree)malloc(sizeof(BiTNode));printf("请输入添加孩子的姓名:\n");scanf("%s",temp->name);printf("请输入添加孩子的出生年月:(格式形如: 2010-1-1)\n");scanf("%s",temp->birthday);printf("请输入添加孩子的家庭住址:\n");scanf("%s",temp->address);temp->level=T->level+1;temp->rc=T->lc->rc;temp->lc=NULL;T->lc->rc=temp;printf("孩子添加成功\n");return;}AddChild(T->lc);AddChild(T->rc);}else{printf("请先建立家庭关系\n");return;}}void DeleteByName(BiTree T)//删除某成员(若其还有后代,则一并删除){if(T){if(strcmp(T->name,searchname)==0){count++;T=NULL;return;}DeleteByName(T->lc);DeleteByName(T->rc);}}BiTree CreateBiTree(FILE *fp){if(!feof(fp)){BiTree T;T=(BiTree)malloc(sizeof(BiTNode));fscanf(fp,"%s %s %s\n",nametemp,birthdaytemp,addresstemp);fscanf(fp,"%d",&leveltemp);if((strcmp(nametemp,"n")==0)&&(strcmp(birthdaytemp,"n")==0)&&(strcmp(addresstemp,"n")==0)) {T=NULL;return T;}else{strcpy(T->name,nametemp);strcpy(T->birthday,birthdaytemp);strcpy(T->address,addresstemp);T->level=leveltemp+1;printf("读取成功\n");T->lc=CreateBiTree(fp);T->rc=CreateBiTree(fp);return T;}}elsereturn NULL;}#include"my.h"void main(){BiTree T;int choice;FILE *fp;T=NULL;fp=fopen("F:\\family.txt","r");insystem();while(1){system("cls");menu();printf("请根据菜单进行选择所需操作:");while(scanf("%d",&choice)!=1){fflush(stdin);printf("\n---输入错误---\n\n");printf("请重新输入正确选择:");}fflush(stdin);switch(choice){case 1:T=CreateBiTree(fp);system("pause");break;case 2:count=0;printf("请输入要添加孩子父母的姓名:\n");scanf("%s",searchname);AddChild(T);if(count==0)printf("没有这个人\n");system("pause");break;case 3:count=0;printf("请输入要删除成员的姓名: ");scanf("%s",searchname);DeleteByName(T);if(count==0)printf("没有这个人\n");system("pause");break;case 4:searchmenu();printf("请输入选择:\n");system("pause");break;case 5:PreOrderTS(T);system("pause");break;case 6:closefile();case 7:printf("请输入需要查询第几代人: ");count=0;scanf("%d",&Nth);ShowNth(T);if(count==0)printf("第%d代尚未有人。

数据结构 二叉排序树

数据结构 二叉排序树

数据结构二叉排序树数据结构二叉排序树1. 概述二叉排序树(Binary Search Tree,简称BST)是一种基于二叉树的数据结构,具有以下特点:- 每个节点最多只有两个子节点。

- 对于树中的任意节点,其左子树上所有节点的值都小于该节点的值,右子树上所有节点的值都大于该节点的值。

- 中序遍历二叉排序树得到的结果是一个有序序列。

2. 二叉排序树的操作2.1 插入二叉排序树的插入操作是将一个新的节点插入到二叉排序树中的合适位置,使得二叉排序树仍然满足以上特点。

插入操作的具体步骤如下:1. 若二叉排序树为空树,则将新节点作为根节点插入即可。

2. 若二叉排序树不为空,比较新节点的值与当前节点的值的大小关系:- 若新节点的值小于当前节点的值,则继续在当前节点的左子树中进行插入操作。

- 若新节点的值大于当前节点的值,则继续在当前节点的右子树中进行插入操作。

2.2 删除二叉排序树的删除操作是将指定节点从二叉排序树中删除,并保持二叉排序树的特性不变。

删除操作的具体步骤如下:1. 若待删除节点为叶子节点,则直接将其父节点指向该节点的指针置为null。

2. 若待删除节点只有左子树或只有右子树,则将其父节点指向该节点的指针直接指向该节点的子节点。

3. 若待删除节点既有左子树又有右子树,则需要找到其右子树中的最小节点(或左子树中的最大节点)来替代待删除节点。

具体步骤如下:- 先找到待删除节点右子树中的最小节点(即右子树中最左下的节点),或者左子树中的最大节点。

- 将该最小(或最大)节点的值复制到待删除节点。

- 将最小(或最大)节点从右子树(或左子树)中删除。

2.3 查找二叉排序树的查找操作是在树中寻找具有指定值的节点。

查找操作的具体步骤如下:1. 从根节点开始,将待查找的值与当前节点的值进行比较。

2. 若待查找的值等于当前节点的值,则返回该节点。

3. 若待查找的值小于当前节点的值,则继续在当前节点的左子树中进行查找操作。

数据结构家谱管理系统二叉链表

数据结构家谱管理系统二叉链表

《项目实训二》项目名称__ 家谱管理系统__ 姓名__ ___________ 班级 __ _______________ 学号__ ________________ 指导教师__ __________ __2023.11、模块划分:2、统计模块(1)统计家族总人数、健在人数、几代人主要函数:int Generation(Node *root); //这个家族共有几代人int NumberOfPeople( ); //家族旳总人数int LifeNum( ); //健在人数(2)实现措施: 静态组员变量实现成果:3、更新模块(1)创建家谱、增长组员、删除组员、组员更名主要函数:Node* Creat( ); //构造函数调用void AddNewPeople(Node *root,string FatherName,string NAme); //增长新旳家族组员int DeletePeople(Node *root,string FatherName,string Deletepeople);//删除家族组员int SetNewName(Node *root,string NAme,string NewName); //更改姓名(2)实现措施: 创建家谱和组员更名主要经过递归调用;增长组员和删除组员主要经过栈旳非递归调用。

实现成果:4、查询模块(1)查询组员详细信息、查询组员旳孩子以及孩子旳详细信息主要函数:int Message(Node *root,string Name); //显示该组员旳基本信息int FindChild(Node *root,string NAme); //显示孩子信息(2)实现措施: 经过递归调用, 找到组员, 输出相应旳信息实现成果:5、显示模块(1)前序、中序、后序遍历家谱主要函数:void PreOrder(Node *root); //前序递归遍历输出家谱void InOrder(Node *root); //中序递归遍历输出家谱void PostOrder(Node *root); //后序递归遍历输出家谱(2)实现措施: 递归遍历实现成果:6、文件模块(1)保存到文件、从文件读取主要函数:void SaveToFile(Node *root); //保存到文件void FileToFamilyTree( Node *root) ; //从文件中读取(2)实现措施: 文件流实现成果:试验成果及分析1、创建家谱2、保存到文件3、读取文件4、增长组员5、基本信息6、查询组员信息7、组员更名8、遍历家谱9、查询孩子信息10、删除组员。

家谱管理系统 -数据结构大作业

家谱管理系统 -数据结构大作业

家谱管理系统 -数据结构大作业家谱管理系统数据结构大作业在当今数字化的时代,信息管理系统在各个领域都发挥着重要作用。

家谱作为家族历史和传承的重要记录,也需要一个高效、便捷的管理系统来保存、整理和查询相关信息。

本次数据结构大作业,我将深入探讨家谱管理系统的设计与实现。

一、需求分析家谱管理系统的主要用户包括家族成员和对家族历史感兴趣的研究者。

系统需要满足以下基本需求:1、能够存储家族成员的详细信息,如姓名、出生日期、逝世日期、籍贯、职业等。

2、支持家族关系的建立和维护,如父子、母子、夫妻等关系。

3、提供便捷的查询功能,用户可以根据姓名、出生日期、关系等条件快速找到所需的家族成员信息。

4、支持家谱的可视化展示,以清晰呈现家族成员之间的关系结构。

5、具备数据的添加、删除和修改功能,以保证家谱信息的及时更新。

二、数据结构选择为了有效地存储和管理家谱数据,我们需要选择合适的数据结构。

考虑到家谱中家族成员之间的层次关系,树结构是一个理想的选择。

在这里,我们可以使用二叉树来表示家族关系。

每个节点代表一个家族成员,节点中存储成员的相关信息。

父节点与左子节点表示父子关系,父节点与右子节点表示父女关系。

另外,为了提高查询效率,我们还可以结合哈希表来存储家族成员的信息。

通过哈希函数将成员的关键信息(如姓名)映射到哈希表中的特定位置,从而实现快速的查找和访问。

三、系统功能模块设计1、数据录入模块提供友好的用户界面,方便用户输入家族成员的信息。

对输入的数据进行合法性检查,确保信息的准确性和完整性。

2、数据存储模块利用选择的数据结构(二叉树和哈希表)将家族成员的信息进行存储。

确保数据的安全存储,防止数据丢失或损坏。

3、查询模块支持多种查询条件,如按姓名、出生日期、关系等进行查询。

快速返回查询结果,并以清晰的方式展示给用户。

4、关系维护模块允许用户添加新的家族成员,并建立其与其他成员的关系。

支持修改和删除家族成员的信息及关系。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《项目实训二》
项目名称__ 家谱管理系统__ 姓名__ ___________ 班级 __ _______________ 学号__ ________________ 指导教师__ __________ __
2018.1
模块划分:
1、统计模块
(1)统计家族总人数、健在人数、几代人
(2)主要函数:
int Generation(Node *root); //这个家族共有几代人
int NumberOfPeople( ); //家族的总人数
int LifeNum( ); //健在人数
(3)实现方法:静态成员变量
(4)实现结果:
2、更新模块
(1)创建家谱、增加成员、删除成员、成员改名
(2)主要函数:
Node* Creat( ); //构造函数调用
void AddNewPeople(Node *root,string FatherName,string
NAme); //增加新的家族成员
int DeletePeople(Node *root,string FatherName,string
Deletepeople); //删除家族成员
int SetNewName(Node *root,string NAme,string NewName); //更改
(3)实现方法:创建家谱和成员改名主要通过递归调用;增加成员和删除成员主要通过栈的非递归调用。

(4)实现结果:
3、查询模块
(1)查询成员详细信息、查询成员的孩子以及孩子的详细信息
(2)主要函数:
int Message(Node *root,string Name); //显示该成员的基本信

int FindChild(Node *root,string NAme); //显示孩子信息(3)实现方法:通过递归调用,找到成员,输出相应的信息
(4)实现结果:
4、显示模块
(1)前序、中序、后序遍历家谱
(2)主要函数:
void PreOrder(Node *root); //前序递归遍历输出家谱
void InOrder(Node *root); //中序递归遍历输出家谱
void PostOrder(Node *root); //后序递归遍历输出家谱(3)实现方法:递归遍历
(4)实现结果:
5、文件模块
(1)保存到文件、从文件读取
(2)主要函数:
void SaveToFile(Node *root); //保存到文件
void FileToFamilyTree( Node *root) ; //从文件中读取(3)实现方法:文件流
(4)实现结果:
实验结果及分析1、创建家谱
2、保存到文件
3、读取文件
4、增加成员
5、基本信息
6、查询成员信息
7、成员改名
8、遍历家谱
9、查询孩子信息
10、删除成员。

相关文档
最新文档