


下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1课程设计介绍1.1课程设计项目简介家谱是一种以表谱形式,记载一个以血缘关系为主体的家族世系 繁衍和重要人物事迹的特殊图书载体。家谱是中国特有的文化遗 产,是中华民族的三大文献之一,属珍贵的人文资料,对于历史 学,民俗学,人口学,社会学和经济学的深入研究,均有不可替 代的重要功能。本项目对家谱管理进展简单的模拟,以实现查看 祖先和子孙个人信息、插入家族成员等功能。本程序的实质是完成对家谱成员信息的建立、查找、插入等 功能。可以首先定义家族成员的数据结构,然后将每个功能写成 一个函数来完成对数据的操作,最后完成主函数以验证各个函数 功能并得出运行结果。本程序包含以下几个模块(1)建立家族关系树。
2、此模块将构建一个家族关系,对数据初始 化,构造关系树并录入数据一遍后续程序使用。(2)添加新成员。此模块将添加一个新成员,实现对家族关系的 修改。(3)家族关系的查询。此模块将实现对家族不同关系的查询(4)主程序模块。此模块实现整个程序的进入和进出, 以与各种 初始化处理。(5)因为家族的成员之间存在一个对多个的层次结构关系, 所以不 能用线性表来表示和实现。家谱从形状上看像一颗倒长的树,所 以用树结构来表示比拟适宜。树形结构是一类非常重要的非线性 数据结构,直观看来树是以分支关系定义的层次结构。因此本课程设计可以采用的数据结构有树状结构和队列。树状 结构采用三叉链表来实现,队列采用链式队列实
3、现。家族关系查询系统查找一个成员的祖先查找一个成员的孩子查找成员的堂兄弟2分析与实现2.1根本数据结构和栈队的操作结点根本数据结构和链队的定义/*家族关系树实现*/#include <string.h>#include <malloc.h>#inelude <limits.h>#include <stdio.h>#include <stdlib.h>#include <io.h>#include <math.h>#include <process.h>#define TRUE 1#define FA
4、LSE 0#define OK 1#define ERROR -1#define INFEASIBLE -1 typedefchar DataType;#define MAXNUM 20typedefstructT订Node /*树的三叉链表存储结构*/DataType dataMAXNUM;structT订Node*parent;/*双亲 */structT订Node*lchild;/*左孩子*/structT订Node*rchild;/*右孩子*/TriTree;typedefstruct Node/*队列的结点结构*/TriTree *info;struct Node *n ext;No
5、de;typedefstruct /*队列类型定义*/struct Node *front; /* 头指针 */struct Node *rear; /* 尾指针 */Lin kQueue;DataType fnameMAXNUM,family50MAXNUM; /* 全局变量 */链队的根本操作LinkQueue *LQueueCreateEmpty( ) /* 建立一个空队列 */Lin kQueue *plqu=(L in kQueue*)malloc( sizeof (LinkQueue);if (plqu!=NULL)plqu->fro nt=plqu->rear=NUL
6、L;elseprintf("内存不足! n");return NULL;return plqu;int LQueuelsEmpty(LinkQueue *plqu) /* 判断表示队列是否为空 队列*/return (plqu->front=NULL);void LQueueEnQueue(LinkQueuEplqu,T订ree*x) /* 进队列 */Node *p=(Node *)malloc( sizeof (Node);if (p=NULL)printf("内存分配失败! n");elsep->i nfo=x;p-> next=
7、NULL;if (plqu->front=NULL) /* 原来为空队 */plqu->fron t=p;elseplqu->rear- >n ext=p;plqu->rear=p;int LQueueDeQueue(LinkQueue *plqu,TriTree *x)/* 出队列 */Node *p;if (plqu->front=NULL)printf("队列空! n");return ERROR;elsep=plqu->front;x=p->i nfo;plqu->fro nt=plqu->fro nt-
8、>n ext;free(p);return OK;TriTree *LQueueGetFront(LinkQueue *plqu) /* 在非空队列中求队头元素*/return (plqu->front->info);建立家族关系并存入文件根本思想:首先输入家族关系的名称,以此名称为文件 名,建立文本文件接下来按层次输入结点信息,输入一个在文件 中写入一行同时将输入的信息保存到二位字符数组family中。字符数组family是全局变量,存储 临时信息.注意,输入时每个结点信息占一行,一个结点有多个兄弟,以“作为兄弟完毕标志,结点假如无孩子,直接以“ 代替。依次输入各节点信息,
9、以“#作为完毕标志。最后使用函数CreateT订ree建立家族关系树.TriTree *Create(DataType 系并存入文件*/int i=0;DataType ch,strMAXNUM; 入的字符串*/TriTree *t;FILE *fp; strcpy(fname,famil yn ame); strcat(fname, ".txt"); fp=fopen(fname, "r"); if (fp)familynameMAXNUM"* 建立家族关/* i控制family数组下标*/* ch存储输入的y或n,str存储输/*以家族名为
10、文本文件名存储*/*以读取方式打开文件*/*文件已存在*/fclose(fp);printf( "%s的家族关系已存在!重新建立请按“ 丫,直接打开请 按“ N" n" family name);ch=getchar();getchar();/* 接收回车 */if (ch='N' |ch= 'n')'Y' |ch= 'y')/*重新建立,执行以下操作*/*以写入方式打开文件,不存在如fputs(str,fp); fputc( 'n' ,fp); strcpy(familyi,str)
11、; i+;while (strO!='#')printf("."); gets(str); fputs(str,fp);fputc( 'n' ,fp); strcpy(familyi,str); i+; fclose(fp); t=TriTreeCreate();t=Open(familyname); /* 直接打开 */ return t;if (!fp|ch= fp=fopen(fname, "w");此新建*/printf("请按层次输入结点,每个结点信息占一行n");printf("兄
12、弟输入完毕以“"为标志,完毕标志为“#" n.");gets(str);/*将成员信息存储到字符数组中*/* family 数组下标后移*/*以点提示符提示继续输入*/*写到文件中,每个信息占一行*/*将成员信息存储到字符数组中*/* family数组下标后移*/*关闭文件*/*根据family数组信息创建三叉树*/printf("家族关系已成功建立!n");return t;/*返回树*/DataType strMAXNUM; strcpy(str,familyi); i+;while (str0!='#')*/while (
13、str0!='')if (root=NULL)root=(TriTree *)malloc( strcpy(root->data,str);根本思想:采用指针数组作为指针,保存输入的结点地址。队列的尾指针指向当前结点。头指针指向当前结点的双亲结点。 输入的结点信息已存储在字符数组family中。将信息复制到字符串数组“ch 中,如果"ch"不是“,如 此建立一个新结点。假如新结点是第一个结点,如此它是根结点, 将其入队,指针tree指向这个根节点;如果不是根结点,如此将 当前结点到双亲结点上,即当前结点的双亲指针就是队头元素, 然后将当前结点入队列。接
14、着判断flag的值,如果flag=O,表 示当前结点没有左孩子,那么当前结点就是双亲的左孩子。否如 此,当前结点就是双亲的右孩子。用指针root指向刚刚入队的结 点。继续复制数组family的下个元素。如果“ch"是。如此flag=0 因为“后面的第一个孩子为左孩子,同时判断“是否是第 一次出现,如果是第一次,如此令标志 star=1 ;如果不是第一次 出现。如此出队列,root指向队头元素实际上root总是指向 双亲结点。继续复制family的下一个元素。知道遇到“#完毕。 函数返回指针tree。/*建立家族关系树*/TriTree *TriTreeCreate() TriTree
15、 *t,*x=NULL,*tree,*root=NULL;LinkQueue *q=LQueueCreateEmpty(); /* 建立一个空的队列,存 储指向树的指针*/int i=0,flag=0,start=0;/*存放family数组某某息*/*复制*/* family数组下标后移*/*没遇到完毕标志继续循环/*没遇到兄弟输入完毕标志继续*/*空树*/sizeof (TilTree);/* 申请空间 */ root->pare nt=NULL;root->lchild=NULL; root->rchild=NULL;LQueueEnQueue(q,root);/* 将
16、root 存入队列*/ tree=root;else /*不为空树*/t=(T订ree *)malloc(sizeof (T订ree); /* 申请空间 */strcpy(t->data,str);t->lchild=NULL;t->rchild=NULL;t->pare nt=LQueueGetFro nt(q);/* 当前结点的双亲为队头元素*/LQueueEnQueue(q,t);/* 入队*/if (!flag)/* flag 为,当前结点没有左孩子*/root->lchild=t;else /* flag 为,当前结点已有左孩子*/root->rc
17、hild=t;root=t;flag=1;/*strcpy(str,familyi);i+;if (start!=0)LQueueDeQueue(q,x);if (q->front!=NULL)/* root指向新的结点t */标记当前结点已有左孩子*/*标记不是第一次出现“*/*出队*/root=LQueueGetFr on t(q); start=1;/* root 为队头兀素*/*标记已出现过“*/flag=0;/*“后面的结点一定为左孩子*/strcpy(str,familyi); i+;return tree;I*返回树*/2.3打开一个家族关系首先输入家族关系名,以家族名为文
18、件名打开文件,如果家 族关系不存在,返回空;如果存在,文件打开,读取文件。将文 件的每行信息依次存储在数组family【】中。I*打开一个家族关系*1TriTree *Ope n(DataType family nameMAXNUM) int i=0,j=0; DataType ch;FILE *fp;TriTree *t;strcpy(fname,famil yn ame); strcat(fname, ".txt"); fp=fopen(fname, "r");if (fp=NULL)/*以家族名为文本文件名存储*/*以读取方式打开文件*/*文件不存
19、在*/printf( "%s 的家族关系不存在! n" family name);return elseNULL;ch=fgetc(fp); while (ch!=EOF)if (ch!= 'n')familyij=ch; j+;elsefamilyij= '0' i+;j=0;/*按字符读取文件*/*读到文件尾完毕*/* ch不为一个结点信息的结尾*/*将文件信息存储到family数组中*/;/*字符串完毕标志*/* family 数组行下标后移*/* family 数组列下标归零*/ch=fgetc(fp);/*继续读取文件信息*/fcl
20、ose(fp);/* 关闭文件 */t=TriTreeCreate(family);/*调用函数建立三叉链表*/printf("家族关系已成功打开!n");return t;用递归算法实现。如果树空,返回 NULL如果根节点就是要 查找的成员,返回根节点;否如此,递归查找它的左右子树。/*查找一个成员是否存在*/TriTree *Search(TriTree *t,DataType str)TriTree *temp;if (t=NULL)/*如果树空如此返回NULL */return NULL;elseif (strcmp(t->data,str)=O) /*如果找
21、到返回该成员指针*/return t;else /*如果没找到遍历左右子树进展查找*/temp=Search(t->lchild,str);/* 递归查找 */if (temp)/*结点不空如此查找*/return (Search(t->lchild,str);elsereturn (Search(t->rchild,str);2.5向家族中添加一个新成员根本思想:添加的新成员要根据其双亲确定其在家族中的位 置。首先判断该双亲是否在此家族关系中,假如存在如此查找其双亲,将新结点插入其双亲的最后一个孩子之后;假如没有孩子, 如此直接作为左孩子插入。以写入的方式打开文件,如果成功
22、打 开,如此更新family数组中的信息,并查找新成员的双亲所在位 置和其对应的“个数,如果“个数小于双亲位置,如此添加“实质相等,新成员不插入到最后“之前。最后将family数组某某息写入文件保存,关闭文件。/*添加一个新成员*/void Append(TriTree *t)int i=0,j,parpos=1,curpos,num,end=0,count=-1;DataType chiMAXNUM,parMAXNUM/* 存储输入的孩子和其双 亲结点*/TriTree *tpar,*temp;FILE *fp;printf("请输入要添加的成员和其父亲,以回车分隔! n.&quo
23、t;);gets(chi);printf( ". " );/*以点提示符提示继续输入*/gets(par);tpar=Search(t,par); /*查找双亲结点是否存在*/if (!tpar)printf( "%s该成员不存在! n");else /*存在如此添加其孩子*/sizeof (TilTree);/* 申请空间 */temp=(TriTree *)malloc( temp->pare nt=tpar;strcpy(temp->data,chi);temp->rchild=NULL; if (tpar->lchild)
24、 /* tpar=tpar->lchild; while (tpar->rchild) tpar=tpar->rchild; tpar->rchild=temp;孩子之后*/temp->lchild=NULL;/*新结点左右孩子置空*/成员存在左孩子*/*遍历当前成员左孩子的右子树*/*当前结点右孩子存在*/*继续遍历右孩子*/*将新结点添加到所有else/*没有孩子如此直接添加*/ tpar->lchild=temp;fp=fopen(fname, "w");/*以写入方式打开文件*/if (fp)while (strcmp(par,f
25、amilyi)!=O&&familyi0!='#')if (familyi0!= parpos+;i+;”)/*查找双亲在数组中位置*/* parpos 计数 */i=0;while (familyi0!=/* family数组行下标归*/'#')if (familyi0=计*/coun t+;if (count=parpos) 之前为par的孩子*/ curpos=i;i+;)/*查找“的个数,第一个不/* count累加个数*/*说明此“与其前一个“/* curpos 计当前位置*/* family数组行下标后移*/if (countvpar
26、pos)num=parpos-co unt; for (j=i;j<=i+num;j+)/*“"数小于parpos数*/*添加“"个数为num */*从数组末尾添加“ */strcpy(familyj, "0");strcpy(familyi+num+1,"#0" ); /*“#"移到数组末尾 */strcpy(familyi+num-1,chi);/* 在最后一个“"前添加新成员*/en d=1;/* end为时标记已添加*/* family数组行下标后移*/elsefor (j=i;j>=curpo
27、s;j-)部信息后移一行*/strcpy(familyj+1,familyj);/*当前位置到数组最后的全strcpy(familycurpos,chi);/* 将新结点存储到“"的前一行*/if (end=1) /*假如end为,如此数组末尾下标后移nun位*/i=i+num;for (j=O;j<=i+1;j+)/*将数组所有信息写入文件*/fputs(familyj,fp);fputc( 'n' ,fp);/* 一个信息存一行 */fclose(fp);/* 关闭文件 */printf("添加新成员成功!n");elseprintf(&
28、quot;添加新成员失败!n");2.6家族成员关系的相关查询查找一个家族的鼻祖判断输入的某某是否在该家族中存在,如果存在,如此返回 该家族的根节点信息。/*查找一个家族的祖先*/void Ancesstor(T订ree*t)/*返回树的根结点信息*/printf("该家族的祖先为 %sn" ,t->data);查找一个成员的所有祖先路径查找一个成员的所有祖先路径,需要从它的双亲一直向上查 找到根结点。根本思想:对与结点t,先判断它是否是根结点根节点的双亲是 NULL,如果是根结点,直接输出它本身;如果不是,查找它的 双亲指针指向的结点,将双亲信息输出。继续
29、查找,直到找到根 结点。/*查找一个成员的所有祖先*/void AncesstorPath(TriTree *t)if (t->parent=NULL)/*假如该成员为祖先,如此直接输出*/printf( "%s 无祖先! n" ,t->data);else /*否如此继续查找祖先*/printf( "%s 所有祖先路径:%s",t->data,t->data);while (t->parent!=NULL) /* 假如当前成员的双亲不是祖先,如此 继续查找*/printf( " -> %s",t-
30、>parent->data);/* 访问当前成员的双亲 */t=t->parent;/*继续循环查找*/printf( "n");263查找一个成员的双亲根本思想:先判断结点t是否是根结点,过不是根结点,直接输出该结点双亲指针的结点信息;假如是根结点,输出提示信 息,结点无双亲。/*查找一个成员的双亲*/void Parent(TriTree *t)if (t->parent!=NULL)/*假如该成员为祖先,如此无双亲*/printf( "%s 的双亲为 sn",t->data,t->parent->data)
31、;elseprintf( "%s 无双亲! n" ,t->data);264确定一个成员是第几代确定一个成员是第几代,只要知道从它本身到根结点包括的 祖先个数就可。因而对于跟结点t,从它本身开始一直向上查找到 根结点,查找的过程中用变量count初值为1计数,最后输出 count o/*确定一个成员是第几代*/void Generation(TriTree *t)int count=1;/* 计数*/DataType strMAXNUM;strcpy(str,t->data);/* 存储当前信息 */while (t->parent!=NULL) /* 查
32、找其双亲 */ count+;/*累加计数*/t=t->pare nt;printf( "%s 是第 %d 代! n" ,str,count);查找一个成员的兄弟一个成员的为其双亲除了该成员以外的所有孩子。根本思想:对于结点t,先判断它是否是跟结点,假如是根 结点,如此无兄弟;假如不是根结点,如此找到结点t的双亲。接 着判断双亲的左孩子和左孩子的兄弟是否都存在假如只有左孩 子,左孩子就是要查找的这个成员,如果都不存在,如此无兄 弟;如果都存在,对双亲的左孩子操作。假如左孩子不是要查找 的这个成员,如此将结点信息输出。接下来查找左孩子的右兄弟, 判断当前结点是否是要查找
33、的这个成员,假如不是,如此将结点 信息输出,继续查找当前结点的右兄弟,直到 NULI为止。/*查找一个成员的兄弟*/void Brothers(TriTree 气DataType str) /* 查找兄弟 */ if (t->parent!=NULL)/*假如该结点是祖先,如此无兄弟*/t=t->parent; /*该结点的兄弟即为其双亲除该成员以外的所 有孩子*/if (t->lchild&&t->lchild->rchild)/* 当前结点的左孩子与其右孩子都存在*/printf( "%s的所有兄弟有:",str);t=t-
34、>lchild;while (t) /*遍历当前成员左孩子的右子树*/if (strcmp(t->data,str)!=O)/* 遍历右子树,选择输出 */printf( "%s " ,t->data); /* 访问当前结点 */t=t->rchild;printf( "n");elseprintf( "%s 无兄弟! n" ,str);elseprintf( "%s 无兄弟! n" ,str);266查找一个成员的堂兄弟一个成员的堂兄弟为其双亲的双亲结点的所有孩子的孩 子该成员除外.根本思
35、想:如果结点t的双亲和双亲的双亲爷爷都存在, 首先考虑爷爷的左孩子。如果爷爷的左孩子不是结点t的双亲,那 么爷爷还有其他孩子。现对爷爷的左孩子的左孩子访问,如果不 是结点t就输出。同样,对爷爷左孩子的左孩子的右孩子、右孩子 的右孩子一直访冋下去,直到无右孩子为止。如果爷爷还有其他孩子,那么就对爷爷的左孩子的右孩子、爷爷的左孩子的右孩子 的右孩子-即对爷爷的其他孩子做一样的处理。/*查找一个成员的堂兄弟*/void Con si n( TriTree *t)int flag=O;TriTree *ch=t;TriTree *temp;/*当前结点的双亲与其双if (t->parent&am
36、p;&t->parent->parent) 亲都存在*/t=t->pare nt->pare nt->lchild;/*当前结点等于其祖先的第一个孩子*/while (t) /*存在如此继续查找*/if (strcmp(t->data,ch->parent->data)!=O)/* 不是同一结点 */if (t->lchild) /*当前结点存在左孩子*/temp=t->lchild;while (temp) /*遍历当前结点左孩子的右子树*/ if (strcmp(temp->data,ch->data)!=O)
37、if (!flag)/*第一次输入时先输出下句*/printf( "%s 的所有堂兄弟有:",ch->data);printf( "%s " ,temp->data); /* 访问当前成员 */ flag=1; /*继续遍历右孩子*/*继续遍历右孩子*/temp=temp->rchild; t=t->rchild;printf( "n");if (!flag)/*标志没有输出结点*/printf( "%s 无堂兄弟! n" ,ch->data);267查找一个成员的所有孩子一个成员的所
38、有孩子包括左孩子和左孩子的右孩子、左孩子的右 孩子的右孩子-直到右孩子为空为止。根本思想:首先判断结点t是否有左孩子,如果没有,输出没 有孩子;如果有左孩子,输出左孩子的信息,然后判断左孩子的 右孩子是否为空,假如不为空存在右孩子,输出左孩子的右 孩子的信息,接着循环判断结点是否有右孩子,有就输出,直到 右孩子为空。/*查找一个成员的所有孩子*/void Children(T订ree *t)/* 遍历左孩子 */if (t->lchild) /*当前结点存在左孩子*/printf( "%s 的所有孩子有:",t->data);t=t->lchild;/*遍
39、历当前成员左孩子的右子树*/while (t) /* 不空 */printf( "%s " ,t->data); /* 访问当前成员 */ t=t->rchild;printf( "n"); else printf( "%s 无孩子! n" ,t->data);/*中序遍历一棵树*/void InOrder(T订ree *t)if (t)/*二叉树存在*/InOrder(t->lchild);/* 中序遍历左子树 */printf( "%s " ,t->data); /* 访问成员 *
40、/InOrder(t->rchild);/* 中序遍历右子树 */268查找一个成员的子孙后代一个成员的子孙后代就是其左子树上的所有结点,所以对其左子 树进展中序遍历即可。/*查找一个成员的子孙后代*/void Descendants(TriTree *t)/* 遍历左孩子 */if (t->lchild)/*当前结点存在左孩子*/printf( "%s的所有子孙后代有:",t->data);InOrder(t->lchild);/*中序遍历当前结点的左右子树*/printf( "n");elseprintf( "%s
41、无后代! n" ,t->data);2.7各软件之间的调用方式该软件各个模块的调用主要是通过声明函数,和定义函数再通过主函数调用实现的。主函数:/*主控函数*/int main( int argc, char* argv)DataType strMAXNUM="O" ,input40;int i,j,flag,start=0,pos,tag1,tag2;TriTree *temp,*tree=NULL;while (1)printf( "t欢迎使用家族关系查询系统!n");printf( "t请输入与之匹配的函数和参数,如par
42、ent(C)n");Create(famil yn ame)Ope n( famil yn ame)Appe nd()An cesstor( name)printf( "t 1.新建一个家庭关系: 参数为字符串n");printf( "t 2.打开一个家庭关系: 参数为字符串n");printf( "t 3.添加新成员的信息: 无参数n");printf( "t 4.查找一个成员的祖先:参数为字符串n");printf( "t 5. 查找一个成员的祖先路径:An cesstorPath( nam
43、e)参数为字符串n");printf( "t 6.确定一个成员是第几代:Gen eratio n(n ame) 参数为字符串n");printf("t 7. 查找一个成员的双亲:Pare nt( name)参数为字符串n");printf("t 8. 查找一个成员的兄弟:Brothers( name)参数为字符串n");printf( "t 9. 查找一个成员的堂兄弟:Co nsin(n ame)参数为字符串n");printf( "t10.查找一个成员的孩子:Children(name)参数为
44、字符串n");printf( "t11.查找一个成员的子孙后代:Descendants(name)参数为字符串n");printf( "t12.退出系统:Exit()无参数n?");gets(i nput);/* in put数组存放输入的函数和参数*/j=0,tag1=0,tag2=0;for (i=0;i<strlen(input);i+)/* 循环input 数组*/ pos=i; tag1=1;if (inputi+1= tag2=1;if (inputi= '(' )/*左括号之前为函数名*/* pos标记左括号
45、位置*/*/*标记是否匹配到左括号*/')')/*假如下一个字符不为右括号/*标记为*/if (tag仁=1 &&tag2!=1) strj=tolower(i nputi+1);j+;in puti=tolower(i nputi);*/*左括号和右括号之前为参数*/*将参数存放到str数组*/*并转化为小写字母*/*将函数名转化为小写字母if (!tag1) /*假如没匹配到左括号,说明只有函数无参数 */pos=i; /*标记为数组末尾*/inputpos= '0' ; /*将标记位置为字符串完毕*/ strj= '0'if
46、 (strcmp(input, "create0" )=0) /* 函数名匹配 */ flag=1;/* 用 flag 标记 */elseif (strcmp(input, "open0" )=0)flag=2;elseif (strcmp(input, flag=3;elseif (strcmp(input, flag=4;elseif (strcmp(input, flag=5;elseif (strcmp(input."append0" )=0)"an cesstor0" )=0)"an cesst
47、orpath0" )=0)"pare nt0" )=0)flag=6;elseif (strcmp(input,"generation0")=0)elseif (strcmp(input, flag=8;elseif (strcmp(input, flag=9;elseif (strcmp(input, flag=10;elseif (strcmp(input."brothers、。" )=0)"consin0" )=0)"childre n0")=0)"descendant
48、s0" )=0)flag=7;flag=11;elseif (strcmp(input,"exit0" )=0) flag=12;else /*无匹配如此重新输入*/printf("无匹配的函数,请重新输入!n");continue ;if (!(flag=1|flag=2|flag=12)&&start=0) /*如果第一次输入函数不是建立、打开或退出,如此重新输入 */printf("请先建立或打开一个家族关系!n");continue ; start=1;if (flag>=4&&
49、flag<=11) temp=Search(tree,str);if (!temp)printf("该成员不存在! continue ;switch (flag)case 1:/*标记不是第一次输入in put */*函数需要字符串型参数name */*假如存在如此返回结点*/*假如不存在如此返回*/n");/*根据flag标记调用函数*/ tree=Create(str); break;case 2: tree=Ope n(str); break;case 3:Appe nd(tree); break;case 4:An cesstor(tree); break;c
50、ase 5:An cesstorPath(temp); break;case 6:Pare nt(temp); break;case 7:Gen erati on (temp); break;case 8:Brothers(temp,str); break;case 9:Consin (temp); break;case 10:Childre n(temp); break;case 11:Desce ndan ts(temp); break;case 12: exit(OK);return 0;3调试结果调试运行后,显示主界面as吊 吕呂呂吕呂呂呂吕 £f £f?ottot5T 数数 数 数 参抵无.娄.密#驴参藝参蔘卷“无JlwentCC) Create<fanil!/nene) OpcnCfamilyniwic) DppehdO ftncesstoi*(nanc) flnces5toi'Path(naine) Generation <nw) Pare
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 四川省德阳中江县联考2025年普通高中初三教学质量测试试题生物试题试卷含解析
- 山西运城大禹中学2024-2025学年初三考前全真模拟密卷数学试题试卷(2)含解析
- 沈阳城市学院《体育竞赛组织与管理》2023-2024学年第二学期期末试卷
- 宁波大学《安装工程施工图课程设计》2023-2024学年第二学期期末试卷
- 山东省莱山一中2025届高三1月模拟考试英语试题含解析
- 修水县2025年六年级下学期5月模拟预测数学试题含解析
- 装修工程垫资合同范本
- 江西省赣州于都思源实验校2025年初三下学期第三次验收化学试题文试卷含解析
- 丽江地区永胜县2025年三下数学期末经典模拟试题含解析
- 辽宁省阜新市新邱区阜新二中2025年高三下学期第二阶段检测试题数学试题试卷含解析
- 主体结构工程施工单选题100道及答案
- 人教版小学美术三年级下册全册同步教案 (一)
- 《中国药物性肝损伤诊治指南(2024年版)》解读
- 2025数学步步高大一轮复习讲义人教A版复习讲义含答案
- 欠薪突发事件应急预案
- 2024详解新版《公司法》课件
- 给水排水(中级职称)试题
- 银行业金融机构安全评估标准
- CJT244-2016 游泳池水质标准
- 河南省郑州市郑东新区2023-2024学年六年级下学期期末语文试题
- 大学生科研训练与论文写作全套教学课件
评论
0/150
提交评论