数据结构课程设计家族关系查询系统.doc
上传人:阳炎****找我 上传时间:2024-09-11 格式:DOC 页数:71 大小:141KB 金币:10 举报 版权申诉
预览加载中,请您耐心等待几秒...

数据结构课程设计家族关系查询系统.doc

数据结构课程设计家族关系查询系统.doc

预览

免费试读已结束,剩余 61 页请下载文档后查看

10 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

数据结构课程设计家族关系查询系统1课程设计介绍1.1课程设计项目介绍家谱是一个以表谱形式,记载一个以血缘关系为主体家族世系繁衍和主要人物事迹特殊图书载体。家谱是中国特有文化遗产,是中华民族三大文件之一,属宝贵人文资料,对于历史学,民俗学,人口学,社会学和经济学深入研究,都有不可代替主要功效。本项目对家谱管理进行简单模拟,以实现查看祖先和子孙个人信息、插入家族组员等功效。1.2课设题目分析本程序实质是完成对家谱组员信息建立、查找、插入等功效。能够首先定义家族组员数据结构,然后将每个功效写成一个函数来完成对数据操作,最终完成主函数以验证各个函数功效并得出运行结果。本程序包含以下几个模块建立家族关系树。此模块将构建一个家族关系,对数据初始化,结构关系树并录入数据一遍后续程序使用。添加新组员。此模块将添加一个新组员,实现对家族关系修改。家族关系查询。此模块将实现对家族不一样关系查询主程序模块。此模块实现整个程序进入和进出,以及各种初始化处理。1.3课程题目原理与数据结构因为家族组员之间存在一个对多个层次结构关系,所以不能用线性表来表示和实现。家谱从形状上看像一颗倒长树,所以用树结构来表示比较适宜。树形结构是一类非常主要非线性数据结构,直观看来树是以分支关系定义层次结构。所以本课程设计能够采取数据结构有树状结构和队列。树状结构采取三叉链表来实现,队列采取链式队列实现。1.4功效分析说明图家族关系查询系统退出系统打开一个家族关系按关系查找各个家庭组员建立一个家族关系添加一个家庭组员查找一个组员弟兄查找一个组员祖先查找组员子孙后代查找一个组员孩子查找组员堂弟兄查找组员祖先路径查找组员是第几代查找一个组员双亲2分析与实现2.1基本数据结构和栈队操作2.1.1结点基本数据结构和链队定义/*家族关系树实现*/#include<string.h>#include<malloc.h>#include<limits.h>#include<stdio.h>#include<stdlib.h>#include<io.h>#include<math.h>#include<process.h>#defineTRUE1#defineFALSE0#defineOK1#defineERROR-1#defineINFEASIBLE-1typedefcharDataType;#defineMAXNUM20typedefstructTriTNode/*树三叉链表存放结构*/{DataTypedata[MAXNUM];structTriTNode*parent;/*双亲*/structTriTNode*lchild;/*左孩子*/structTriTNode*rchild;/*右孩子*/}TriTree;typedefstructNode/*队列结点结构*/{TriTree*info;structNode*next;}Node;typedefstruct/*链接队列类型定义*/{structNode*front;/*头指针*/structNode*rear;/*尾指针*/}LinkQueue;DataTypefname[MAXNUM],family[50][MAXNUM];/*全局变量*/2.1.2链队基本操作LinkQueue*LQueueCreateEmpty()/*建立一个空队列*/{LinkQueue*plqu=(LinkQueue*)malloc(sizeof(LinkQueue));if(plqu!=NULL)plqu->front=plqu->rear=NULL;else{printf("内存不足!\n");returnNULL;}returnplqu;}intLQueueIsEmpty(LinkQueue*plqu)/*判断链接表示队列是否为空队列*/{return(plqu->front==NULL);}voidLQueueEnQueue(LinkQueue*plqu,TriTree*x)/*进队列*/{Node*p=(Node*)malloc(sizeof(Node));if(p==NULL)printf("内存分配失败!\n");else{p->info=x;p->next=NULL;if(plqu->front==NULL)/*原来为空队*/plqu->front=p;elseplqu->rear->next=p;plqu->rear=p;}}intL