1 课程设计介绍
1.1课程设计项目简介
家谱是一种以表谱形式,记载一个以血缘关系为主体的家族世系繁衍和重要人物事迹的特殊图书载体。家谱是中国特有的文化遗产,是中华民族的三大文献之一,属珍贵的人文资料,对于历史学,民俗学,人口学,社会学和经济学的深入研究,均有不可替代的重要功能。本项目对家谱管理进行简单的模拟,以实现查看祖先和子孙个人信息 、插入家族成员等功能。
1.2课设题目分析
本程序的实质是完成对家谱成员信息的建立、查找、插入等功能。可以首先定义家族成员的数据结构,然后将每个功能写成一个函数来完成对数据的操作,最后完成主函数以验证各个函数功能并得出运行结果。
本程序包含以下几个模块
建立家族关系树。此模块将构建一个家族关系,对数据初始化,构造关系树并录入数据一遍后续程序使用。
添加新成员。此模块将添加一个新成员,实现对家族关系的修改。
家族关系的查询。此模块将实现对家族不同关系的查询
主程序模块。此模块实现整个程序的进入和进出,以及各种初始化处理。
1.3课程题目原理与数据结构
因为家族的成员之间存在一个对多个的层次结构关系,所以不能用线性表来表示和实现。家谱从形状上看像一颗倒长的树,所以用树结构来表示比较合适。树形结构是一类非常重要的非线性数据结构,直观看来树是以分支关系定义的层次结构。
因此本课程设计可以采用的数据结构有树状结构和队列。树状结构采用三叉链表来实现,队列采用链式队列实现。
1.4功能分析说明图
2 分析与实现
2.1 基本数据结构和栈队的操作
2.1.1 结点基本数据结构和链队的定义
/*家族关系树实现*/
#include
#include
#include
#include
#include
#include
#include
#include
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR -1
#define INFEASIBLE -1
typedef char DataType;
#define MAXNUM 20
typedef struct TriTNode/* 树的三叉链表存储结构*/
{
DataType data[MAXNUM];
struct TriTNode *parent;/* 双亲*/
struct TriTNode *lchild;/* 左孩子*/
struct TriTNode *rchild;/* 右孩子*/
}TriTree;
typedef struct Node/* 队列的结点结构*/
{
TriTree *info;
struct Node *next;
}Node;
typedef struct/* 链接队列类型定义*/
{
struct Node *front; /* 头指针*/
struct Node *rear; /* 尾指针*/
}LinkQueue;
DataType fname[MAXNUM],family[50][MAXNUM];/* 全局变量*/
LinkQueue *LQueueCreateEmpty( )/* 建立一个空队列*/
{
LinkQueue *plqu=(LinkQueue *)malloc(sizeof(LinkQueue));
if (plqu!=NULL)
plqu->front=plqu->rear=NULL;
else
{
printf("内存不足!\n");
return NULL;
}
return plqu;
}
int LQueueIsEmpty(LinkQueue *plqu)/* 判断链接表示队列是否为空队列*/
{
return(plqu->front==NULL);
}
void LQueueEnQueue(LinkQueue *plqu,TriTree *x)/* 进队列*/
{
Node *p=(Node *)malloc(sizeof(Node));
if(p==NULL)
printf("内存分配失败!\n");
else
{
p->info=x;
p->next=NULL;