数据结构实例应用(4)

2019-08-31 16:01

t=t->parent->parent->lchild;/* 当前结点等于其祖先的第一个孩子 */ while(t) /* 存在则继续查找 */ { if(strcmp(t->data,ch->parent->data)!=0)/* 不是同一结点 */ { if(t->lchild) /* 当前结点存在左孩子 */ { temp=t->lchild; while(temp) /* 遍历当前结点左孩子的右子树 */ { if(strcmp(temp->data,ch->data)!=0) { if(!flag) /* 第一次输入时先输出下句 */ printf(\的所有堂兄弟有:\ printf(\ \访问当前成员 */ flag=1; } temp=temp->rchild; /* 继续遍历右孩子 */ } } } t=t->rchild; /* 继续遍历右孩子 */ } printf(\ } if(!flag) /* 标志没有输出结点 */ printf(\无堂兄弟!\\n\}

/* 查找一个成员的所有孩子 */

void Children(TriTree *t) /* 遍历左孩子 */ { if(t->lchild) /* 当前结点存在左孩子 */ { printf(\的所有孩子有:\ t=t->lchild; /* 遍历当前成员左孩子的右子树 */ while(t) /* 不空 */ { printf(\ \访问当前成员 */ t=t->rchild; } printf(\ }

else printf(\无孩子!\\n\}

/* 中序遍历一棵树 */

void InOrder(TriTree *t) { if(t) /* 二叉树存在 */ { InOrder(t->lchild); /* 中序遍历左子树 */ printf(\ \访问成员 */ InOrder(t->rchild); /* 中序遍历右子树 */ } }

/* 查找一个成员的子孙后代 */

void Descendants(TriTree *t) /* 遍历左孩子 */ { if(t->lchild) /* 当前结点存在左孩子 */ { printf(\的所有子孙后代有:\ InOrder(t->lchild); /* 中序遍历当前结点的左右子树 */ printf(\ } else printf(\无后代!\\n\}

/* 主控函数 */

int main(int argc,char* argv[]) { DataType str[MAXNUM]=\ int i,j,flag,start=0,pos,tag1,tag2; TriTree *temp,*tree=NULL; while(1) { printf(\欢迎使用家族关系查询系统!\\n\ printf(\请输入与之匹配的函数和参数,如parent(C)\\n\ printf(\新建一个家庭关系: Create(familyname) printf(\打开一个家庭关系: Open(familyname) printf(\添加新成员的信息: Append() printf(\查找一个成员的祖先: Ancesstor(name) printf(\查找一个成员的祖先路径:AncesstorPath(name) printf(\确定一个成员是第几代: Generation(name) 参数为字符串 \\n\ 参数为字符串 \\n\ 无参数 \\n\参数为字符串 \\n\参数为字符串 \\n\参数为字符串 \\n\

printf(\查找一个成员的双亲: Parent(name) 参数为字符串 \\n\printf(\查找一个成员的兄弟: Brothers(name) 参数为字符串 \\n\printf(\查找一个成员的堂兄弟: Consin(name) 参数为字符串 \\n\printf(\查找一个成员的孩子: Children(name) 参数为字符串 \\n\printf(\查找一个成员的子孙后代:Descendants(name) 参数为字符串 \\n\printf(\退出系统: Exit() 无参数\\n? \gets(input); /* input数组存放输入的函数和参数 */ j=0,tag1=0,tag2=0;

for(i=0;i

if(!tag1) /* 若没匹配到左括号,说明只有函数无参数*/ pos=i; /* 标记为数组末尾 */

input[pos]='\\0';/* 将标记位置为字符串结束 */ str[j]='\\0';

if(strcmp(input,\函数名匹配 */ flag=1; /* 用flag标记 */ else if(strcmp(input,\ flag=2;

else if(strcmp(input,\ flag=3;

else if(strcmp(input,\ flag=4;

else if(strcmp(input,\ flag=5;

else if(strcmp(input,\ flag=6;

else if(strcmp(input,\ flag=7;

else if(strcmp(input,\ flag=8;

else if(strcmp(input,\ flag=9;

else if(strcmp(input,\ flag=10;

else if(strcmp(input,\ flag=11;

else if(strcmp(input,\ flag=12;

else /* 无匹配则重新输入 */ { printf(\无匹配的函数,请重新输入!\\n\ continue; }

if(!(flag==1||flag==2||flag==12)&&start==0)

{ /* 如果第一次输入函数不是建立、打开或退出,则重新输入 */ printf(\请先建立或打开一个家族关系!\\n\ continue; }

start=1; /* 标记不是第一次输入input */ if(flag>=4&&flag<=11) /* 函数需要字符串型参数name */ { temp=Search(tree,str);/* 若存在则返回结点 */ if(!temp) /* 若不存在则返回 */ { printf(\该成员不存在!\\n\ continue; } }

switch(flag) /* 根据flag标记调用函数 */ { case 1: tree=Create(str); break; case 2: tree=Open(str); break; case 3: Append(tree); break; case 4: Ancesstor(tree); break; case 5: AncesstorPath(temp);

break; case 6: Parent(temp); break; case 7: Generation(temp); break; case 8: Brothers(temp,str); break; case 9: Consin(temp); break; case 10: Children(temp); break; case 11: Descendants(temp); break; case 12: exit(OK); } } return 0; }

二、地铁建设问题 /* 最小生成树.c */ #include \#define MAXVEX 30

#define MAXNAME 20/*顶点信息长度最大值*/

#define MAX 32767/*若顶点间无路径则以此最大值表示不通*/ typedef char VexType[MAXNAME];/*顶点信息*/ typedef float AdjType;/*两顶点间的权值信息*/ typedef struct/*边结构体*/ {

int start_vex, stop_vex; /* 边的起点和终点 */ AdjType weight; /* 边的权 */ } Edge;

typedef struct/*图结构*/ {

int vexNum; /* 图的顶点个数 */


数据结构实例应用(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:电站综合自动化系统安装调试手册

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: