文档库 最新最全的文档下载
当前位置:文档库 › C语言二叉树家谱管理系统

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

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

摘要

本文设计了一个对数据输入,输出,储存,查找的多功能软件,本文需要保存家族的基本信息,包括姓名及它们的关系,但是由于家族信息很巨大而且关系很复杂所以采用二叉树来表示它们的关系。并且具有保存文件的功能,以便下次直接使用先前存入的信息。家谱的功能是查询家族每个人的信息,并且输出它们的信息,还要具有查询输出功能。

本文采用二叉树来存取家族的基本信息,头结点作为父亲节点,他的左孩子为他的妻子,妻子结点的右孩子为他的孩子,依次存储每个家庭的信息。可以查找每个父亲的孩子和每个人的所有祖先。

关键词:二叉树家谱结点

目录

1 系统功能概述 (1)

1.1 系统功能 (1)

图2 成员二叉树功能模块图 (4)

1.2 总体功能模块 (4)

2 系统各功能模块的详细设计 (4)

2.1功能选择 (4)

2.2信息输入 (6)

2.3信息输出 (7)

2.4信息存盘 (7)

2.5信息清盘 (8)

2.6信息查询 (8)

2.7源程序 (10)

3设计结果与分析 (16)

3.1菜单函数功能测试 (16)

4.2输入功能函数测试 (16)

3.3输出功能函数测试 (17)

3.4清盘功能函数测试 (17)

3.5存盘功能函数测试 (17)

3.6查询功能函数测试 (18)

总结 (19)

参考文献 (20)

1 系统功能概述

1.1 系统功能

实现的方法是先定义一个二叉树,该二叉树上的每个结点由三个元素组成:姓名、指向它左孩子的指针、以及指向它右孩子的指针构成。该家谱管理系统将信息用文件的方法进行存储管理,再从文件中将成员信息以递归的方法创建二叉树。该输入成员信息的方法是将父亲结点存上父亲的信息,然后父亲结点的左孩子存上母亲的信息,母亲结点的右孩子存上孩子的信息。

(1)定义结构体

结构体为表示一个对象的不同属性提供了连贯一致的方法,结构体类型的说明从关键词struct开始,成员可以由各种数据类型混合构成,成员甚至还可以是数组或者其他类型的结构,但是,结构体中不能包含自身定义类型的成员。本文定义了两个结构体,分别是家族成员和二叉树结点的结构体。代码如下:typedef struct fnode

{ char father[NAMEWIDTH];

char wife[NAMEWIDTH];

char son[NAMEWIDTH];

}FamType;

typedef struct tnode

{

char name[NAMEWIDTH];

struct tnode *lchild,*rchild;

}BTree;

(2) 二叉树的建立

二叉树的结点有三个域,数据域和两个指针域,数据域用来存放数据,两个指针域分别存放指向该结点左右孩子的指针。并且还有个root结点,称二叉树的根节点。代码如下:

BTree *CreatBTree(char *root,FamType fam[],int n)

{

int i=0,j;

BTree *bt,*p;

bt=(BTree *)malloc(sizeof(BTree));

strcpy(bt->name,root);

bt->lchild=bt->rchild=NULL;

while(i

i++;

if(i

{

p=(BTree *)malloc(sizeof(BTree));

p->lchild=p->rchild=NULL;

strcpy(p->name,fam[i].wife);

bt->lchild=p;

for(j=0;j

if(strcmp(fam[j].father,root)==0)

{

p->rchild=CreatBTree(fam[j].son,fam,n);

p=p->rchild;

}

}

return(bt);

}

(3)家族成员信息的输入

依次输入一个家庭的父亲、母亲和孩子的姓名。并将它们保存在相应的文件里。

(4)家族成员信息的输出

依次输出每个家庭的父亲、母亲和孩子的姓名。

(5)查找某人的儿子

首先输入父亲的姓名,在二叉树中查找是否有此人,如果没有就输出不存在这样的父亲。如果有就先查看它的左孩子是否存在,不存在就输出这个父亲没有

妻子,如果存在就查找左孩子的右孩子,没有右孩子就输出这个父亲没有孩子,存在就输出右孩子的姓名,即为查找到的儿子。

(6)查找某人的祖先

采用后序非递归遍历方法输入从根结点到*s结点的路径,首先输入一个成员的姓名,用一个栈存入查找的路径,当找到时栈中的元素即为它的所有祖先。

该家谱管理系统将各个家庭的信息以文件的形式存储,具体步骤如下图:

文件

输入

输入父亲、母亲和儿子的姓名

保存

图1 文件存储功能模块图

该家谱管理系统还将各个成员的信息以及成员之间的关系存储在二叉树上,具体存储方式如下图:

父亲

母亲

儿子1

儿子2

图2 成员二叉树功能模块图

1.2 总体功能模块

图3 总体功能模块图

2 系统各功能模块的详细设计

2.1功能选择

功能选择模块函数,主要提供1:文件 2:家谱 两个功能模块让用户选择。输入数字1的时候,出现界面1:输入 2:输出 9:清盘 0:存盘返回。返回后输入数字2,出现界面1:找某人的所有儿子 2:找某人所有祖先 。用户根据自己的需求选择 void main()

家谱管理系统

家谱的建立

家谱的插入

家谱的删除

家谱的查找

家谱的显示

{

BTree *bt;

FamType fam[MaxSize];

int n,sel,sell;

ReadFile(fam,n);

do

{

printf("1.文件操作2.家谱操作0.退出请选择:");

scanf("%d",&sel);

switch(sel)

{

case 1:

do

{

printf("1:输入2:输出9:全清0:存盘返回请选择:");

scanf("%d",&sell);

switch(sell)

{

case 9:DelAll(fam,n);

break;

case 1:InputFam(fam,n);

break;

case 2:OutputFile(fam,n);

break;

case 0:SaveFile(fam,n);

break;

}

}while (sell!=0);

break;

case 2:

bt=CreatBTree("f1",fam,n);

do

{

printf("1.找某人所有儿子2.找某人所有祖先0:返回请选择:");

scanf("%d",&sell);

switch(sell)

{

case 1:

FindSon(bt);

break;

case 2:

printf(" >>");Ancestor(bt);

break;

}

}while(sell!=0);

break;

}

}while(sel!=0);

}

2.2信息输入

信息输入模块函数,出现界面请输入父亲、母亲和儿子的姓名让用户输入信息。代码如下:

void InputFam(FamType fam[],int &n)

{

printf(" >>输入父亲、母亲和儿子姓名:");

scanf("%s%s%s",fam[n].father,fam[n].wife,fam[n].son);

n++;

}

2.3信息输出

信息输出模块函数,自动输出数据的信息及它们之间的家谱关系。按顺序输出父亲,母亲,儿子。代码如下:

void OutputFile(FamType fam[],int n)

{

int i;

if(n<0)

{

printf(" >>没有任何记录\n");

return;

}

for(i=0;i

printf(" >>%10s%10s%10s\n",fam[i].father,fam[i].wife,fam[i].son);

}

2.4信息存盘

信息存盘模块函数,将用户输入的信息存盘,下次要用时自动调用。代码如下:

void SaveFile(FamType fam[],int n)

{

int i;

FILE *fp;

if((fp=fopen("fam.dat","wb"))==NULL)

{

printf(" >>数据家谱文件不能打开\n");

return;

}

for(i=0;i

fwrite(&fam[i],sizeof(FamType),1,fp);

fclose(fp);

}

2.5信息清盘

信息清盘模块函数,将用户输入的信息全部清盘。代码如下:

void DelAll(FamType fam[],int &n)

{

FILE *fp;

if((fp=fopen("fam.dat","wb"))==NULL)

{

printf(" >>不能打开家谱文件\n");

return;

}

n=0;

fclose(fp);

}

2.6信息查询

信息查询模块函数,查询用户输入数据的信息及家谱关系。具有的功能是1:找某人所有儿子2:找某人所有祖先。用户根据需要操作。

找某人所有儿子的代码:

void FindSon(BTree *bt)

{

char xm[NAMEWIDTH];

BTree *p;

printf(" >>父亲姓名:");

scanf("%s",xm);

p=FindNode(bt,xm);

if(p==NULL)

printf(" >>不存在%s的父亲!\n",xm);

else

{

p=p->lchild;

if(p==NULL)

printf(" >>%s没有妻子\n",xm);

else

{

p=p->rchild;

if(p==NULL)

printf(" >>%没有儿子!\n",xm);

else

{

printf(" >>%s的儿子:",xm);

while(p!=NULL)

{

printf("%10s",p->name);

p=p->rchild;

}

printf("\n");

}

}

}

}

找某人所有祖先的代码:

void Ancestor(BTree *bt)

{

BTree *p;

char xm[NAMEWIDTH];

printf(" >>输入姓名:");

scanf("%s",xm);

p=FindNode(bt,xm);

if(p!=NULL)

Path(bt,p);

else

printf(" >>不存在%s\n",xm);

}

void DelAll(FamType fam[],int &n)

{

FILE *fp;

if((fp=fopen("fam.dat","wb"))==NULL)

{

printf(" >>不能打开家谱文件\n");

return;

}

n=0;

fclose(fp);

}

2.7源程序

#include

#include

#include

#define MaxWidth 40

#define MaxSize 30

#define NAMEWIDTH 10

typedef struct fnode

{ char father[NAMEWIDTH];

char wife[NAMEWIDTH];

char son[NAMEWIDTH];

}FamType;

typedef struct tnode

{

char name[NAMEWIDTH];

struct tnode *lchild,*rchild;

}BTree;

BTree *CreatBTree(char *root,FamType fam[],int n) {

int i=0,j;

BTree *bt,*p;

bt=(BTree *)malloc(sizeof(BTree));

strcpy(bt->name,root);

bt->lchild=bt->rchild=NULL;

while(i

i++;

if(i

{

p=(BTree *)malloc(sizeof(BTree));

p->lchild=p->rchild=NULL;

strcpy(p->name,fam[i].wife);

bt->lchild=p;

for(j=0;j

if(strcmp(fam[j].father,root)==0)

{

p->rchild=CreatBTree(fam[j].son,fam,n);

p=p->rchild;

}

}

return(bt);

}

BTree *FindNode(BTree *bt,char xm[])

{

BTree *p=bt;

if(p==NULL)

return(NULL);

else

{

if(strcmp(p->name,xm)==0)

return(p);

else

{

bt=FindNode(p->lchild,xm);

if(bt!=NULL)

return(bt);

else

return(FindNode(p->rchild,xm));

}

}

}

void FindSon(BTree *bt)

{

char xm[NAMEWIDTH];

BTree *p;

printf(" >>父亲姓名:");

scanf("%s",xm);

p=FindNode(bt,xm);

if(p==NULL)

printf(" >>不存在%s的父亲!\n",xm);

else

{

p=p->lchild;

if(p==NULL)

printf(" >>%s没有妻子\n",xm);

else

{

p=p->rchild;

if(p==NULL)

printf(" >>%没有儿子!\n",xm);

else

{

printf(" >>%s的儿子:",xm);

while(p!=NULL)

{

printf("%10s",p->name);

p=p->rchild;

}

printf("\n");

}

}

}

}

int Path(BTree *bt,BTree *s)

{

BTree *St[MaxSize];

BTree *p;

int i,flag,top= -1;

do

{

while(bt)

{

top++;

St[top]=bt;

bt=bt->lchild;

}

p=NULL;

flag=1;

while(top!=-1 && flag)

{

bt=St[top];

if(bt->rchild==p)

{

if(bt==s)

{

printf(" >>所有祖先:");

for(i=0;i

printf(" %s ",St[i]->name);

printf("\n");

return 1;

}

else

{

top--;

p=bt;

}

}

else

{

bt=bt->rchild;

flag=0;

}

}

}while(top!=-1);

return 0;

}

void Ancestor(BTree *bt)

{

BTree *p;

char xm[NAMEWIDTH];

printf(" >>输入姓名:");

scanf("%s",xm);

p=FindNode(bt,xm);

if(p!=NULL)

Path(bt,p);

else

printf(" >>不存在%s\n",xm);

}

void DelAll(FamType fam[],int &n)

{

FILE *fp;

if((fp=fopen("fam.dat","wb"))==NULL)

{

printf(" >>不能打开家谱文件\n");

return;

}

n=0;

fclose(fp);

}

void ReadFile(FamType fam[],int &n)

{

FILE *fp;

long length;

int i;

if((fp=fopen("fam.dat","rb"))==NULL)

{

n=0;

return;

}

fseek(fp,0,2);

length=ftell(fp);

rewind(fp);

n=length/sizeof(FamType);

for(i=0;i

fread(&fam[i],sizeof(FamType),1,fp);

fclose(fp);

}

void SaveFile(FamType fam[],int n)

{

int i;

FILE *fp;

if((fp=fopen("fam.dat","wb"))==NULL)

{

printf(" >>数据家谱文件不能打开\n");

return;

}

for(i=0;i

fwrite(&fam[i],sizeof(FamType),1,fp);

fclose(fp);

}

void InputFam(FamType fam[],int &n)

{

printf(" >>输入父亲、母亲和儿子姓名:");

scanf("%s%s%s",fam[n].father,fam[n].wife,fam[n].son);

n++;

}

void OutputFile(FamType fam[],int n)

{

int i;

if(n<0)

{

printf(" >>没有任何记录\n");

return;

}

for(i=0;i

printf(" >>%10s%10s%10s\n",fam[i].father,fam[i].wife,fam[i].son); }

void main()

{

BTree *bt;

FamType fam[MaxSize];

int n,sel,sell;

ReadFile(fam,n);

do

{

printf("1.文件操作2.家谱操作0.退出请选择:");

scanf("%d",&sel);

switch(sel)

{

case 1:

do

{

printf("1:输入2:输出9:全清0:存盘返回请选择:");

scanf("%d",&sell);

switch(sell)

{

case 9:DelAll(fam,n);

break;

case 1:InputFam(fam,n);

break;

case 2:OutputFile(fam,n);

break;

case 0:SaveFile(fam,n);

break;

}

}while (sell!=0);

break;

case 2:

bt=CreatBTree("f1",fam,n);

do

{

printf("1.找某人所有儿子2.找某人所有祖先0:返回请选择:");

scanf("%d",&sell);

switch(sell)

{

case 1:

FindSon(bt);

break;

case 2:

printf(" >>");Ancestor(bt);

break;

}

}while(sell!=0);

break;

}

}while(sel!=0);

}

3设计结果与分析

3.1菜单函数功能测试

系统运行后就会自动显示如图3-1的主菜单,选项包括:1、文件,2、家谱,0、退出,。当用户选择相应的代号就进入相应的功能模块。

图3-1 主菜单函数功能检测

4.2输入功能函数测试

系统运行后就会自动显示如图3-2的输入功能模块,界面出现1:输入>>输入父亲、母亲和儿子的姓名,用户输入信息。

图3-2输入功能函数测试

3.3输出功能函数测试

系统运行后就会自动显示如图3-3的输出功能模块,界面出现2:输出。用户输入数字2后系统自动输出数据信息。

图3-3输出功能函数测试

3.4清盘功能函数测试

系统运行后就会自动显示如图3-4的清盘功能模块,界面出现9:全清。用户输入数9后自动系统清除所有的数据并返回。

图3-4清盘功能函数测试

3.5存盘功能函数测试

系统运行后就会自动显示如图3-5的存盘功能模块,界面出现0:存盘返回。

用户输入数0后系统自动保存所有的数据并返回。

图3-5存盘功能函数测试

3.6查询功能函数测试

系统运行后就会自动显示如图3-6的查询功能模块,界面出现1:找某人的所有儿子

图3-6查询某人儿子功能函数测试

系统运行后就会自动显示如图3-7的查询功能模块,界面出现2:找某人的所有祖先

图3-7查询某人祖先功能函数测试

家谱管理系统的源代码

#include #include #include #include struct per{ int data; char name[20]; char brith[20]; char marry; char address[20]; char live; char dietime[20]; char parent[20]; int generation; int child[10]; int numberchild; per(){ for(int i=0;i<20;i++) name[i]='\0'; for(i=0;i<20;i++)

brith[i]='\0'; for(i=0;i<20;i++) address[i]='\0'; for(i=0;i<20;i++) dietime[i]='\0'; for(i=0;i<10;i++) child[i]=0; for(i=0;i<20;i++) parent[i]='\0'; live='\0'; marry='\0'; data=-10; generation=0; numberchild=0; } }; void setupinfo(per person[]); void display(per person[],int&); void displayhome(per person[],int&); void displayinfo(per person[],int&); void namesearch(per person[],int&);

数据结构家谱管理系统范本

数据结构家谱管理 系统

宁波大红鹰学院 信息工程学院 课 程 设 计 报 告 项目名 家谱查询系统 称: 白钰琦 项目组 长: 徐程凯、徐海域、项鸿伟 项目成 员: 10计科1班 班级名 称: 计算机科学与技术 专业名 称: 完成时间: 12月1日 信息工程学院制 目录 一、案例描述 ............................................................ 错误!未定义书签。 1、总体描述 ....................................................... 错误!未定义书签。 2、模块描述 ....................................................... 错误!未定义书签。

二、设计思路 ............................................................ 错误!未定义书签。 三、程序设计 ............................................................ 错误!未定义书签。 1、数据结构描述................................................ 错误!未定义书签。 2、主函数及其流程图........................................ 错误!未定义书签。 3、源程序 ........................................................... 错误!未定义书签。 四、调试与分析 ........................................................ 错误!未定义书签。 1、主菜单 ........................................................... 错误!未定义书签。 2、显示家谱信息................................................ 错误!未定义书签。 3、显示家谱中第n代人所有信息 .................... 错误!未定义书签。 4、按姓名查找某人并相应输出 ........................ 错误!未定义书签。 5、按出生日期查找家谱成员信息 .................... 错误!未定义书签。 6、为家谱中成员添加孩子信息 ........................ 错误!未定义书签。 7、为家谱中成员添加妻子信息 ........................ 错误!未定义书签。 8、删除家谱中成员及其后代信息 .................... 错误!未定义书签。 9、修改家谱中成员信息.................................... 错误!未定义书签。 10、确定家谱中两个成员关系 .......................... 错误!未定义书签。 11、按出生年月排序家谱 .................................. 错误!未定义书签。 五、设计总结 ............................................................ 错误!未定义书签。 1、完成情况 ....................................................... 错误!未定义书签。 2、心得体会 ....................................................... 错误!未定义书签。

家谱管理系统1(1)

《软件综合设计》 家谱管理系统 院系:计算机科学技术学院二系 班级:计11 – 2班 姓名:刘文秀(15) 合作者:姜雪(05) 、岳奉宜(33) 指导教师:薛曼玲 2013 年 12 月 01 日

《软件综合设计》任务书 一、题目:家谱管理系统 二、设计要求 (1)刘文秀(组长)、姜雪和岳奉宜组成课程设计小组。 (2)小组成员分工协作完成。要求每个成员有自己相对独立的模块,,同时要了解其他组员完成的内容。 (3)查阅相关资料,自学具体课题中涉及到的新知识。 (4)采用结构化、模块化程序设计方法设计,功能要完善,界面美观。 (5)所设计的系统应有菜单、动画和音乐。 (6)按要求写出课程设计报告,并于设计结束后1周内提交。其主要内容包括:封皮、课程设计任务书,指导教师评语与成绩、目录、概述、软件需求分析、总体设计、详细设计、程序的调试与测试、总结与体会、结束语、程序清单(带中文注释)、参考文献等。报告一律用A4纸打印,正文的中文字体为宋体,西文字体用Time New Roma,一律用小四号字,行距采用“固定值”18磅,首行缩进2字符。1级标题中文字体为黑体,西文字体为Time New Roma,采用三号字;段落为居中、段前18磅、段后12磅、行距采用“固定值”18磅,首行缩进:无,段中不分页,与下段同页。仅一级标题上目录。 三、课程设计工作量 由于是设计小组团结协作完成设计任务,一般每人的程序量在400行有效程序行以上,不得抄袭。 四、课程设计工作计划 2013年12月2日,指导教师讲课,学生根据题目准备资料,需求分析; 2013年12月3日,设计小组进行总体方案设计和任务分工; 2013年12月4日~2013年12月10日,每人完成自己承担的程序模块并通过独立编译; 2013年12月11日~12日,将各模块集成为一个完整的系统,并录入足够的数据进行调试运行; 2013年12月13日,验收、开始撰写课程设计报告; 2013年12月18日前,提交课程设计报告和软件。 指导教师签章: 教研室主任签章

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

数学与计算机学院 课程设计说明书 课程名称: 数据结构与算法课程设计 课程代码: 题目: 二叉树生成家谱 年级/专业/班: 学生姓名: 学号: 开始时间: 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 详细设计 (10) 3.1结构体定义 (10) 3.2 初始化 (11) 3.3 插入操作 (13) 3.4 查询操作 (15) 4 调试分析 (18) 5 用户使用说明 (18) 6 测试结果 (18) 结论 (23) 附录 (24) 参考文献 (25)

随着计算机科学技术、计算机产业的迅速发展,计算机的应用普及也在以惊人的速度发展,计算机应用已经深入到人类社会的各个领域。 计算机的应用早已不限于科学计算,而更多地应用在信息处理方面。 计算机可以存储的数据对象不再是纯粹的数值,而扩展到了字符、声 音、图像、表格等各种各样的信息。对于信息的处理也不再是单纯的 计算,而是一些如信息存储、信息检索等非数值的计算。那么,现实 世界的各种数据信息怎样才能够存储到计算机的内存之中,对存入计 算机的数据信息怎样进行科学处理,这涉及计算机科学的信息表示和 算法设计问题。为解决现实世界中某个复杂问题,总是希望设计一个 高效适用的程序。这就需要解决怎样合理地组织数据、建立合适的数 据结构,怎样设计适用的算法,以提高程序执行的时间效率和空间效 率。“数据结构”就是在此背景下逐步形成、发展起来的。 在各种高级语言程序设计的基本训练中,解决某一实际问题的步骤一般是:分析实际问题;确定数学模型;编写程序;反复调试程序直 至得到正确结果。所谓数学模型一般指具体的数学公式、方程式等,如牛顿迭代法解方程,各种级数的计算等。这属于数值计算的一类问 题。而现实生活中,更多的是非数值计算问题,如手机中的通讯录,人们对它的操作主要是查找、增加、删除或者修改电话记录。再如,人们经常在互联网上查阅各种新闻,或查阅电子地图,人们可以在某 城区地图上查找自己所需的街道或店铺,其操作主要是搜索和查询。 下面再来分析几个典型实例,它们的主要特点是:不同实例的数据元 素之间存在不同的关系;对数据信息的处理主要有插入、删除、排序、 检索等。 关键词:网络化;计算机;对策;二叉树

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

家谱管理系统——C语言(数据结构) 目的和要求:树形结构是一种非常重要的非线性结构,它用于描述数据元素之间的层次关系,人类家谱是树形结构的典型体现,通过此项训练让学生掌握树形结构的知识;使学生重点掌握树与二叉树的转换,二叉树的存储和遍历,和二叉树相关的一些运算;要求完成家谱信息的录入和保存,任意成员的查找及某一成员祖先、子孙、兄弟、堂兄弟的查找。 排答疑和辅导。 完整代码: #include #include #include int MATEFLAG=0; //是否入赘或嫁入这家的,1表示为是,0表示否 typedef struct TreeNode//树节点定义 { int Num; //保存此人儿女个数 char Name[20]; //保存此人姓名 char Kind; //保存此人性别,男M,女F struct 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);//添加新成员界面 } //显示添加家庭信息的界面

数据结构家谱管理系统

//////////////////////////////////////////////////////////// /////////////////// //题目:家谱资料管理 //要求:家谱用于记录某家族历代家族成员的情况与关系。现编制一个家谱资料管理软件, //实现对一个家族所有的资料进行收集整理。支持对家谱的增加,删除,更新,统计等。 //////////////////////////////////////////////////////////// /////////////////// #include #include #include int MATEFLAG=0; typedef struct TreeNode

int Num; //记录这个人拥有几个儿女 char Name[20]; //记录这个人的姓名 char Kind; //标示节点的种类有女G男B struct TreeNode * NextNode[20]; //记录这个人的儿女struct TreeNode * Parent; //记录这个节点的父节点 }TreeNode; void CreatTree(TreeNode *Tree); void OutPutAll(TreeNode *Tree); TreeNode * SearchTree(TreeNode *Tree,char name[],int length); void MainMenue(TreeNode *Tree); void SubMenue1(TreeNode * Tree); void SubMenue2(TreeNode *Tree); void Change(TreeNode * Tree); void AddNew(TreeNode * Tree);

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

/* 家谱管理系统 任务:实现具有下列功能的家谱管理系统 功能要求: 1). 输入文件以存放最初家谱中各成员的信息,成员的信息中均应包含以下内容: 姓名、出生日期、婚否、地址、健在否、死亡日期(若其已死亡),也可附加其它信息、但不是必需的。 2). 实现数据的存盘和读盘。 3). 以图形方式显示家谱。 4). 显示第n 代所有人的信息。 5). 按照姓名查询,输出成员信息(包括其本人、父亲、孩子的信息)。 6). 按照出生日期查询成员名单。 7). 输入两人姓名,确定其关系。 8). 某成员添加孩子。 9). 删除某成员(若其还有后代,则一并删除)。 10).修改某成员信息。 11).按出生日期对家谱中所有人排序。 12).打开一家谱时,提示当天生日的健在成员。 要求:建立至少30个成员的数据,以较为直观的方式显示结果,并提供文稿形式以便检查。界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。存储结构:学生自己根据系统功能要求自己设计,但是要求相关数据要存储在数据文件中。测试数据:要求使用1、全部合法数据;2、局部非法数据。进行程序测试,以保证程序的稳定。 测试数据及测试结果请在上交的资料中写明; */ #include #include #include #include #include"map.h" #define MAXN 100 #define MAXMEM 100 #define Elemtype char ============================== //树 typedef struct BiTNode { int mark;//标记 int level; char name[50];//姓名 char birthday[50];//生日 char address[MAXN];//住址

(完整word版)家谱管理系统

洛 阳 理 工 学 院 课 程 设 计 报 告 课程名称 ___________________________________ 设计题目 ___________________________________ 专 业 ___________________________________ 班 级 ___________________________________ 学 号 ___________________________________ 姓 名 ___________________________________ 完成日期 ___________________________________ 数据结构课程设计 家谱管理系统 计算机科学与技术 B150405 B15080822 宋士龙 2016年12月30日

课程设计任务书 设计题目:家谱管理系统 设计内容与要求: 【问题描述】:实现具有下列功能的家谱管理系统 1). 输入文件以存放最初家谱中各成员的信息,成员的信息中均应包含以下内容:姓名、出生日期、婚否、地址、健在否、死亡日期(若其已死亡),也可附加其它信息、但不是必需的。 2). 实现数据的存盘和读盘。 3). 显示家谱。 4). 按照出生日期查询成员名单。 5). 按照姓名查询,输出成员信息(包括其本人、父亲、孩子的信息)。 6). 修改某成员信息。 【基本要求】: 界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。 存储结构:学生自己根据系统功能要求自己设计,但是要求相关数据要存储在数据文件中。 测试数据:要求使用1、全部合法数据;2、局部非法数据。进行程序测试,以保证程序的稳定。 测试数据及测试结果请在上交的资料中写明。 指导教师:_______________ 年月日 课程设计评语 成绩: 指导教师:_______________ 年月日

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

摘要 本文设计了一个对数据输入,输出,储存,查找的多功能软件,本文需要保存家族的基本信息,包括姓名及它们的关系,但是由于家族信息很巨大而且关系很复杂所以采用二叉树来表示它们的关系。并且具有保存文件的功能,以便下次直接使用先前存入的信息。家谱的功能是查询家族每个人的信息,并且输出它们的信息,还要具有查询输出功能。 本文采用二叉树来存取家族的基本信息,头结点作为父亲节点,他的左孩子为他的妻子,妻子结点的右孩子为他的孩子,依次存储每个家庭的信息。可以查找每个父亲的孩子和每个人的所有祖先。 关键词:二叉树家谱结点

目录 1 系统功能概述 (1) 1.1 系统功能 (1) 图2 成员二叉树功能模块图 (4) 1.2 总体功能模块 (4) 2 系统各功能模块的详细设计 (4) 2.1功能选择 (4) 2.2信息输入 (6) 2.3信息输出 (7) 2.4信息存盘 (7) 2.5信息清盘 (8) 2.6信息查询 (8) 2.7源程序 (10) 3设计结果与分析 (16) 3.1菜单函数功能测试 (16) 4.2输入功能函数测试 (16) 3.3输出功能函数测试 (17) 3.4清盘功能函数测试 (17) 3.5存盘功能函数测试 (17) 3.6查询功能函数测试 (18) 总结 (19) 参考文献 (20)

1 系统功能概述 1.1 系统功能 实现的方法是先定义一个二叉树,该二叉树上的每个结点由三个元素组成:姓名、指向它左孩子的指针、以及指向它右孩子的指针构成。该家谱管理系统将信息用文件的方法进行存储管理,再从文件中将成员信息以递归的方法创建二叉树。该输入成员信息的方法是将父亲结点存上父亲的信息,然后父亲结点的左孩子存上母亲的信息,母亲结点的右孩子存上孩子的信息。 (1)定义结构体 结构体为表示一个对象的不同属性提供了连贯一致的方法,结构体类型的说明从关键词struct开始,成员可以由各种数据类型混合构成,成员甚至还可以是数组或者其他类型的结构,但是,结构体中不能包含自身定义类型的成员。本文定义了两个结构体,分别是家族成员和二叉树结点的结构体。代码如下:typedef struct fnode { char father[NAMEWIDTH]; char wife[NAMEWIDTH]; char son[NAMEWIDTH]; }FamType; typedef struct tnode { char name[NAMEWIDTH]; struct tnode *lchild,*rchild; }BTree; (2) 二叉树的建立 二叉树的结点有三个域,数据域和两个指针域,数据域用来存放数据,两个指针域分别存放指向该结点左右孩子的指针。并且还有个root结点,称二叉树的根节点。代码如下: BTree *CreatBTree(char *root,FamType fam[],int n)

家谱管理系统.doc

家谱管理系统 。洛阳科技学院课程设计报告数据结构课程设计课程名称_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _家谱管理系统设计主题_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _计算机科学与技术专业_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ b 150405班级_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ b 15080822学校编号_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _宋世龙的姓氏是_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ x XXX,2006年12月30日。完成日期_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 家谱管理系统设计的内容和要求; [问题描述] 以下内容: 实现了具有以下功能的家谱树管理系统1)。输入一个文件,将每个成员的信息保存在原始家谱中,每个成员的信息应包括以下内容: 姓名、出生日期、婚姻状况、地址、生活状况和死亡日期(如果

家谱管理系统样本

家谱管理系统 一、需求分析 本系统实现以下功能: 1). 输入文件以存放最初家谱中各成员的信息。成员的信息中均应包含以下内容: 姓名、出生日期、婚否、地址、健在否、死亡日期( 若其已死亡) 也 可附加其它信息、但不是必须的。 2). 实现数据的存盘和读盘。 3). 以图形方式显示家谱。 4). 显示第n 代所有人的信息。 5). 按照姓名查询, 输出成员信息( 包括其本人、父亲、孩子的信息) 。 6). 按照出生日期查询成员名单。 7). 输入两人姓名, 确定其关系。 8). 某成员添加孩子。 9). 删除某成员( 若其还有后代, 则一并删除) 。 10).修改某成员信息。 11).按出生日期对家谱中所有人排序。 12).打开一家谱时, 提示当天生日的健在成员。 测试要求: 1).建立至少30个成员的数据, 以较为直观的方式显示结果, 并提供文稿形式以便检查。 2).对界面的要求是: 有合理的提示, 每个功能能够设立菜单, 根据提示, 能够完成相关的功能要求。 二、设计概要 1、抽象数据类型兄弟孩子树的定义如下: ADT CSNode{

数据对象: person是兄弟孩子树中的每一个节点, T是整个树的统一体 数据关系: R1={<person i-1,person i >|<person i-1 ,person i >表示person i-1 和person i 之间有血缘关系} 基本操作: CSNode *CreatTree(fstream &outfile); 初始条件: 已经打开了文本文件PersonInfo.txt 操作结果: 创立一个兄弟孩子树T, 并把从文件中的数据送到树中, 关闭文件。 void CreatParent_step(CSNode *parent); 初始条件: 兄弟孩子树T已经存在 操作结果: 对所有的孩子节点添加指向父亲的指针 void InOrderTraverse(CSNode *T); 初始条件: 兄弟孩子树T已经存在 操作结果: 对T进行中序遍历。 bool Today_Brithday(CSNode *T); 初始条件: 兄弟孩子树T已经存在 操作结果: 根据计算机系统的时间判断几天是否有人过生日, 并显示她们的名字。 bool (int n,CSNode *T,LinkQueue &Q); 初始条件: 兄弟孩子树T已经存在, 队列Q也已经存在 操作结果: 用队列Q返回第N代人的所有信息 void Link_Info(LinkQueue Q); 初始条件: 队列Q中是第N代人的所有信息 操作结果: 显示队列中所有人的信息。 CSNode *DetectMember_Name(CSNode *T,char name[]); 初始条件: 兄弟孩子树T已经存在 操作结果: 根据输入的姓名进行查找, 如找到则返回该节点的指针。

计算机二级基础知识

计算机二级基础知识(总7页) -CAL-FENGHAI.-(YICAI)-Company One1 -CAL-本页仅作为文档封面,使用请直接删除

数据结构与算法 ◆算法的基本概念 1. 算法:是对问题处理方案的正确而完整的描述,是求解问题的方法,是指令的有效序列。 2. 具有5个特性: (1)有穷性(在有穷步后完成)算法程序的运行时间是有限的 (2)确定性(每一步都有确定的含义) (3)可行性 (4)输入(一个算法有零个或多个输入) (5)输出(一个算法有一个或多个输出) 3. 算法的复杂度 包括:时间复杂度和空间复杂度。二者没有必然的联系。 时间复杂度:执行算法所需要的计算工作量或基本运算次数。 空间复杂度:算法所需要的空间的度量。 ◆数据结构的定义 1. 数据结构包括数据的逻辑结构、数据的存储结构、数据的操作 数据的逻辑结构:数据的外部结构,指各数据元素之间的逻辑关系,反映人们对数据含义的解释。包括:线性结构(线性表、栈、队列)和非线性结构(树和图) 数据的存储结构:数据的物理结构,指数据的逻辑结构在计算机中的表示。 一个逻辑结构可以有多种存储结构。 ◆线性表:线性表中元素的个数n(n>=0)定义为线性表的长度。 顺序存储是线性表的一种最常用的存储方式。 线性表的顺序存储结构和线性表的链式存储结构分别是随机存取的存储结构和顺序存取的存储结构。 1.栈:是限定在表尾进行插入和删除操作的线性表。具有记忆功能只能顺序存储(错) 允许插入和删除的一端叫栈顶。另一端叫栈底。

后进先出的线性表 2队列:是限定在一端插入而在另一端删除,插入端叫队尾,删除端叫对头。 先进先出的线性表 3栈和队列的顺序存储结构 循环队列属于线性表存储结构中顺序存储结构和链式存储结构的前者。 ◆树 1.定义:树的结点、度(结点的度)、叶子(终端结点)、数的度、深度、有序树和无序数 2.二叉树:结点至多有两棵子树,并且二叉树的子树有之分,次序不能颠倒。 性质:★在二叉树的第i层上至多有2i-1个结点 ★深度为k的二叉树至多有2k-1个结点。 ★对任一个二叉树T,如果其叶子(终端结点数)为n,度为二的结点数为m,则n=m +1. ★具有n个结点的完全二叉树的深度为k+1,其中k是㏒2n的整数部分。 2. 二叉树的遍历 ▼先序遍历(根—左—右) ▼中序遍历(左—根—右) ▼后序遍历(左—右—根) ◆查找算法 (1)顺序查找 顺序查找的平均查找长度为(n+1)/2,最坏的情况下比较的次数为n (2) 二分查找最坏情况下次数为log2n 限定于顺序存储的有序线性表 ◆排序算法 (1)插入类排序

家谱管理系统的源代码

#include #include #include #include struct per{ int data; char name[20]; char brith[20]; char marry; char address[20]; char live; char dietime[20]; char parent[20]; int generation; int child[10]; int numberchild; per(){ for(int i=0;i<20;i++) name[i]='\0';

for(i=0;i<20;i++) brith[i]='\0'; for(i=0;i<20;i++) address[i]='\0'; for(i=0;i<20;i++) dietime[i]='\0'; for(i=0;i<10;i++) child[i]=0; for(i=0;i<20;i++) parent[i]='\0'; live='\0'; marry='\0'; data=-10; generation=0; numberchild=0; } }; void setupinfo(per person[]); void display(per person[],int&); void displayhome(per person[],int&);

void displayinfo(per person[],int&); void namesearch(per person[],int&); void birtfdaysearch(per person[],int&); void addchild(per person[],int&); void editmember(per person[],int&); void sortbirthday(per person[],int&); void main() { per person[36]; int count=0; fstream inputFile("person.txt",ios::in|ios::o ut|ios::binary); if(!inputFile) { cout<<"文件不存在!"<

数据结构-二叉树-实验

实验五二叉树 一、目的和要求 1. 掌握二叉树的逻辑结构定义和各种存储结构的实现。 2. 熟练运用二叉树的各种存储结构以及各种基本操作。 3. 根据实际问题的需要,选择二叉树适合的存储结构解决问题。 二、实验环境 1.WindowsXP操作系统; 2.DEV C++、Visual C++6.0语言环境; 三、实验内容 (一)验证性实验(每个同学完成,第1题必做,第2-3题中任选一题。每个小题一个文件夹,所有文件夹打在一个包中,文件名:“学号”+“姓名”,例如: 13121000张三.rar 。提交码为2014DS5。截止时间:2015年元月20日12:00时。) 1.二叉链表的验证 (1)在二叉链表类模板中增加函数成员CountLeaf (),统计二叉树中叶子结点的数目。 (2)在二叉链表类模板中增加函数成员Revolute(),实现二叉树中所有结点的左右子树交换。 (3)在二叉链表类模板中增加函数成员CountBreadth (),统计二叉树的最大宽度(二叉树的最大宽度是指二叉树所有层中结点个数的最大值)。 (4)在二叉链表类模板中,增加函数成员NonRecurringInOrder(),实现非递归中序遍历二叉树。 2.线索二叉树的验证 (1)在中序线索二叉树类模板中增加函数成员ReInOrder(),通过从中序序列最后一个结点开始依次找当前结点的前驱来逆中序遍历二叉树。 (2)在中序线索二叉树类模板中增加函数成员InsertLeftChild(p,e),实现在中序线索二叉树指定结点p上插入左孩子结点e。 (3)在中序线索二叉树类模板中增加函数成员PostOrder(),实现不用栈后序遍历二叉树。 3.堆的验证 (1)对最小堆进行测试验证,要求把测试过程截屏保存下来。 (2)修改最小堆中构造函数MinHeap(ElemType a[],int maxSize,int n),从空堆开始依次插入数组a中的元素构造堆。 (3)把最小堆的类模板改造成最大堆。 (二)设计性实验(小组完成) 4.二叉树的顺序存储 参考二叉树的二叉链表类模板,设计并实现二叉树的顺序存储表示。增加函数成员,求离两个元素(编号为i和j)最近的共同祖先。 5.二叉树的三叉链表表示 参考二叉树的二叉链表类模板,设计并实现二叉树的三叉链表表示。增加函数成员,实

家谱管理系统设计

《软件综合设计》家谱管理系统 院系:计算机科学技术学院二系 班级:计11 –2班 姓名:刘文秀(15) 合作者:姜雪(05) 、岳奉宜(33) 指导教师:薛曼玲 2013 年12 月01 日

《软件综合设计》任务书 一、题目:家谱管理系统 二、设计要求 (1)刘文秀(组长)、姜雪和岳奉宜组成课程设计小组。 (2)小组成员分工协作完成。要求每个成员有自己相对独立的模块,,同时要了解其他组员完成的内容。 (3)查阅相关资料,自学具体课题中涉及到的新知识。 (4)采用结构化、模块化程序设计方法设计,功能要完善,界面美观。 (5)所设计的系统应有菜单、动画和音乐。 (6)按要求写出课程设计报告,并于设计结束后1周内提交。其主要内容包括:封皮、课程设计任务书,指导教师评语与成绩、目录、概述、软件需求分析、总体设计、详细设计、程序的调试与测试、总结与体会、结束语、程序清单(带中文注释)、参考文献等。报告一律用A4纸打印,正文的中文字体为宋体,西文字体用Time New Roma,一律用小四号字,行距采用“固定值”18磅,首行缩进2字符。1级标题中文字体为黑体,西文字体为Time New Roma,采用三号字;段落为居中、段前18磅、段后12磅、行距采用“固定值”18磅,首行缩进:无,段中不分页,与下段同页。仅一级标题上目录。 三、课程设计工作量 由于是设计小组团结协作完成设计任务,一般每人的程序量在400行有效程序行以上,不得抄袭。 四、课程设计工作计划 2013年12月2日,指导教师讲课,学生根据题目准备资料,需求分析; 2013年12月3日,设计小组进行总体方案设计和任务分工; 2013年12月4日~2013年12月10日,每人完成自己承担的程序模块并通过独立编译; 2013年12月11日~12日,将各模块集成为一个完整的系统,并录入足够的数据进行调试运行; 2013年12月13日,验收、开始撰写课程设计报告; 2013年12月18日前,提交课程设计报告和软件。 指导教师签章: 教研室主任签章

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

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

《项目实训二》 项目名称 __ 家谱管理系统__ 姓名__ ___________班级 __ _______________ 学号__ ________________ 指导教师 __ __________ __ .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)实现结果:

家谱管理系统

合肥师范学院(本科) 课程设计说明书 课程数据结构 题目 家谱管理系统 姓名马俊超徐润仙秦齐 学号 专业班级 指导教师 完成日期2012 年12 月27 日

1、绪言 1.1课题背景 家谱是记载同一姓氏血缘关系的世系、重要人物、个人事迹、家族历史为主要内容的谱籍,又称“族谱”、“家谱”、“家乘”,还有称作“谱碟”。家谱上可以追本溯源,缅怀先人,下可以辨明关系,联络宗亲,从而启孝梯心,唤德善之本,激励后人,奋发有为,其作用不可尽述。在社会方面,家谱对于海内外华人寻根认祖,增强民族凝聚力起着重要作用。在文史工作者,家谱是研究人口学、社会学、经济学、历史学、氏族学、人物传记,以及研究地方史乃是重要资料。在个人方面家谱又是每个公民身份证明之一。如有些族规有载,某人若不遵法纪,为非作歹者,击鼓鸣公,革出族外,不准入谱。可见家谱无论在社会在个人都起着重要作用。 1.2目的背景与意义 家谱的科学管理不但有助于民族文化和地方文化的发展,而且有其自身的积极意义。家谱文化作为国家的政治经济文化中心,若家谱管理能在广州得到应用,必会促进广州文化的发展,进一步推广应用,带动各地的文化事业作为计算机应用的一部分,使用计算机对家谱人员的各类信息进行管理,具有手工管理所无法比拟的优点.例如:检索迅速、查询方便、效率高、可靠性好、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高学校信息管理的效率,也是一个单位科学化、正规化管理,与世界接轨的重要条件。 1.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)

摘要 随着计算机科学技术、计算机产业的迅速发展,计算机的应用普及也在以惊人的速度发展,计算机应用已经深入到人类社会的各个领域。计算机的应用早已不限于科学计算,而更多地应用在信息处理方面。计算机可以存储的数据对象不再是纯粹的数值,而扩展到了字符、声音、图像、表格等各种各样的信息。对于信息的处理也不再是单纯的计算,而是一些如信息存储、信息检索等非数值的计算。那么,现实世界的各种数据信息怎样才能够存储到计算机的内存之中,对存入计算机的数据信息怎样进行科学处理,这涉及计算机科学的信息表示和算法设计问题。为解决现实世界中某个复杂问题,总是希望设计一个高效适用的程序。这就需要解决怎样合理地组织数据、建立合适的数据结构,怎样设计适用的算法,以提高程序执行的时间效率和空间效率。“数据结构”就是在此背景下逐步形成、发展起来的。 在各种高级语言程序设计的基本训练中,解决某一实际问题的步骤一般是:分析实际问题;确定数学模型;编写程序;反复调试程序直至得到正确结果。所谓数学模型一般指具体的数学公式、方程式等,如牛顿迭代法解方程,各种级数的计算等。这属于数值计算的一类问题。而现实生活中,更多的是非数值计算问题,如手机中的通讯录,人们对它的操作主要是查找、增加、删除或者修改电话记录。再如,人们经常在互联网上查阅各种新闻,或查阅电子地图,人们可以在某城区地图上查找自己所需的街道或店铺,其操作主要是搜索和查询。下面再来分析几个典型实例,它们的主要特点是:不同实例的数据元素之间存在不同的关系;对数据信息的处理主要有插入、删除、排序、检索等。 关键词:网络化;计算机;对策;二叉树

相关文档
相关文档 最新文档