家族关系查询系统程序设计算法思路_数据结构设计(家族关系查询系统)汇编.doc...
1 課程設(shè)計(jì)介紹
1.1課程設(shè)計(jì)項(xiàng)目簡(jiǎn)介
家譜是一種以表譜形式,記載一個(gè)以血緣關(guān)系為主體的家族世系繁衍和重要人物事跡的特殊圖書載體。家譜是中國特有的文化遺產(chǎn),是中華民族的三大文獻(xiàn)之一,屬珍貴的人文資料,對(duì)于歷史學(xué),民俗學(xué),人口學(xué),社會(huì)學(xué)和經(jīng)濟(jì)學(xué)的深入研究,均有不可替代的重要功能。本項(xiàng)目對(duì)家譜管理進(jìn)行簡(jiǎn)單的模擬,以實(shí)現(xiàn)查看祖先和子孫個(gè)人信息 、插入家族成員等功能。
1.2課設(shè)題目分析
本程序的實(shí)質(zhì)是完成對(duì)家譜成員信息的建立、查找、插入等功能。可以首先定義家族成員的數(shù)據(jù)結(jié)構(gòu),然后將每個(gè)功能寫成一個(gè)函數(shù)來完成對(duì)數(shù)據(jù)的操作,最后完成主函數(shù)以驗(yàn)證各個(gè)函數(shù)功能并得出運(yùn)行結(jié)果。
本程序包含以下幾個(gè)模塊
建立家族關(guān)系樹。此模塊將構(gòu)建一個(gè)家族關(guān)系,對(duì)數(shù)據(jù)初始化,構(gòu)造關(guān)系樹并錄入數(shù)據(jù)一遍后續(xù)程序使用。
添加新成員。此模塊將添加一個(gè)新成員,實(shí)現(xiàn)對(duì)家族關(guān)系的修改。
家族關(guān)系的查詢。此模塊將實(shí)現(xiàn)對(duì)家族不同關(guān)系的查詢
主程序模塊。此模塊實(shí)現(xiàn)整個(gè)程序的進(jìn)入和進(jìn)出,以及各種初始化處理。
1.3課程題目原理與數(shù)據(jù)結(jié)構(gòu)
因?yàn)榧易宓某蓡T之間存在一個(gè)對(duì)多個(gè)的層次結(jié)構(gòu)關(guān)系,所以不能用線性表來表示和實(shí)現(xiàn)。家譜從形狀上看像一顆倒長的樹,所以用樹結(jié)構(gòu)來表示比較合適。樹形結(jié)構(gòu)是一類非常重要的非線性數(shù)據(jù)結(jié)構(gòu),直觀看來樹是以分支關(guān)系定義的層次結(jié)構(gòu)。
因此本課程設(shè)計(jì)可以采用的數(shù)據(jù)結(jié)構(gòu)有樹狀結(jié)構(gòu)和隊(duì)列。樹狀結(jié)構(gòu)采用三叉鏈表來實(shí)現(xiàn),隊(duì)列采用鏈?zhǔn)疥?duì)列實(shí)現(xiàn)。
1.4功能分析說明圖
2 分析與實(shí)現(xiàn)
2.1 基本數(shù)據(jù)結(jié)構(gòu)和棧隊(duì)的操作
2.1.1 結(jié)點(diǎn)基本數(shù)據(jù)結(jié)構(gòu)和鏈隊(duì)的定義
/*家族關(guān)系樹實(shí)現(xiàn)*/
#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/* 樹的三叉鏈表存儲(chǔ)結(jié)構(gòu)*/
{
DataType data[MAXNUM];
struct TriTNode *parent;/* 雙親*/
struct TriTNode *lchild;/* 左孩子*/
struct TriTNode *rchild;/* 右孩子*/
}TriTree;
typedef struct Node/* 隊(duì)列的結(jié)點(diǎn)結(jié)構(gòu)*/
{
TriTree *info;
struct Node *next;
}Node;
typedef struct/* 鏈接隊(duì)列類型定義*/
{
struct Node *front; /* 頭指針*/
struct Node *rear; /* 尾指針*/
}LinkQueue;
DataType fname[MAXNUM],family[50][MAXNUM];/* 全局變量*/
LinkQueue *LQueueCreateEmpty( )/* 建立一個(gè)空隊(duì)列*/
{
LinkQueue *plqu=(LinkQueue *)malloc(sizeof(LinkQueue));
if (plqu!=NULL)
plqu->front=plqu->rear=NULL;
else
{
printf("內(nèi)存不足!\n");
return NULL;
}
return plqu;
}
int LQueueIsEmpty(LinkQueue *plqu)/* 判斷鏈接表示隊(duì)列是否為空隊(duì)列*/
{
return(plqu->front==NULL);
}
void LQueueEnQueue(LinkQueue *plqu,TriTree *x)/* 進(jìn)隊(duì)列*/
{
Node *p=(Node *)malloc(sizeof(Node));
if(p==NULL)
printf("內(nèi)存分配失敗!\n");
else
{
p->info=x;
p->next=NULL;
總結(jié)
以上是生活随笔為你收集整理的家族关系查询系统程序设计算法思路_数据结构设计(家族关系查询系统)汇编.doc...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 模拟电子技术(一)半导体二极管和三极管
- 下一篇: 热爱工作,拥抱明天——读《干法》有感28