数据结构实验报告范例 下载本文

内容发布更新时间 : 2024/5/22 10:35:23星期一 下面是文章的全部内容请认真阅读。

}

/*儿子查找函数*/

void FindSon(FNODE *b,char p[]) {

FNODE *q; q=findnode(b,p); if(q!=NULL) //存在孩子结点时输出 { q=q->left; if(q==NULL||q->right==NULL) //判断有无子女 printf(\没有子女!\\n\ else { //输出则配偶结点的所有子女结点 q=q->right; printf(\子女为:\ while(q!=NULL) { printf(\ q=q->right; }

printf(\ } } else printf(\不存在你要查找的人!\\n\}

/*祖先查找函数*/

int FindAncestor(FNODE *head,char son[]) { FNODE *p,*s; FNODE *stack[MAX]; int tag[MAX]; int top=-1,i; p=findnode(head,son); //定位结点 if(p==NULL) { printf(\不存在你要查找的人!\\n\ return 0; } s=head; do{ while(s!=NULL) //将其所有左结点进栈 { top++; stack[top]=s;

7

tag[top]=0; s=s->left; } if(top>-1) { if(tag[top]==1) //被访问过时 { if(stack[top]==p) //如果为所查找结点时输出祖先 { printf(\祖先为:\\n\ for(i=0;iright==stack[i+1]) //将其兄弟结点删除,只保留父母结点 i++; if(i0) { s=s->right; tag[top]=1; } } } }while(s!=NULL||top!=-1); if(top==-1) printf(\查找不到%s的祖先!\\n\ else printf(\ return 1; }

/*选择界面函数部分:*/ void PRINT(int &n) { do{

8

printf(\请选择:\\n\

printf(\建立家谱\\n\ printf(\输出家谱\\n\

printf(\查找某人所有儿子\\n\

printf(\查找某人所有的祖先\\n\ scanf(\ }while(n<0||n>4); }

/*主函数部分:调用选择界面函数,再依据用户的选择,调用相应函数,实现相关功能*/ void main() {

FNODE *head; int n=0;

char name[MAX]; head=NULL; do{

PRINT(n); switch(n) {

case 1: InitialFamily(head);break;

case 2: PrintFamily(head);printf(\ case 3: printf(\请输入要查找的姓名:\\n\ scanf(\ FindSon(head,name); break;

case 4: printf(\请输入要查找的姓名:\\n\ scanf(\

n=FindAncestor(head,name); printf(\ break; default: break; }

printf(\是否继续?是 1,否 0\\n\ scanf(\ }while(n==1); } 序号 1 2 3 4 9

项目 实验报告排版(3分) 算法思想分析(6分) 源代码(6分) 实验结果及分析(5分) 得分 总分

另注:

1、源代码部分请附加适当的注释说明;

2、打分的表格请置于实验报告最后一页的底端; 3、请遵照本实验范例的文字大小和段落格式排版; 4、实验报告双面打印;

5、每个实验20分,5个实验共100分。

实验报告雷同者均视为未做。抄袭请慎重!

10