b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

二元排序树的相关算法排序(2)

电脑杂谈  发布时间:2020-05-26 23:16:00  来源:网络整理
data)p-> lchild = s; / *内插节点* s是左子节点* / 9elsep-> rchild = s; / *内插的节点* s是正确的子节点* / return(1);} else} inorderTraverse(node * t)/ *中阶遍历函数* / {if(* t){if(inorderTraverse(&( * t)-> lchild))/ *中间根遍历根的左子树* / {printf(“%d”,(* t)-> data); //输出根节点* /返回(0); / *树中已经存在具有相同关键字的节点,不再插入* / if(inorderTraverse(&(* t)-> rchild)); / *按顺序遍历根的右子树* /}} else} calculateASL(node * t,int * s,int * j,int i)/ *计算平均搜索长度* / {if(* t){i + +; / * i记录当前树中当前节点的深度* / / * s记录遍历点的深度之和* / return(1); * s = * s + i; if(calculateASL(&(* t)-> lchild,s,j,i))/ *计算子树的左ASL * / {(* j)++; / * j记录树中节点的数量* / if(calculateASL(&(* t)-> rchild,s,j,i))/ *计算子树的右ASL * / {i--; return(1);}}}否则返回(1); 10}节点Delete(node t,int key)/ *删除功能* / {node p = t,q = NULL,s,f; / *找到要删除的点* /同时(p!= NULL)(if(p-> data == key)break; q = p; if(p-> data> key)p = p-> lchild; else p = p-> rchild;} if(p == NULL)返回t; / *查找失败* / if(p-> lchild == NULL)/ * p指向要删除的节点* / {if(q == NULL)t = p-> rchild;否则/ * q指向要删除的节点的父节点* / if(q-> lchild == p)q-> lchild = p-> rchild; / * p是q *的左子代,否则q-> rchild = p-> rchild; / * p是q *的右子代/ free(p);}否则{/ * p的左子代不为空* / f = p; s = p-> lchild;而(s-> rchild)/ *左转并右移至结尾* / {11f = s; s = s-> rchild;}如果(f == p)f- > lchild = s-> lchild; / *重新连接f的左子树* / else f-> rchild = s-> lchild; / *重新连接f的右子树* / p-> data = s-> data; free (s);} return} int balanceBST(node t,int * i)/ *确定它是否是平衡二叉树的函数* / {int dep1,dep2; t; if(!t)return(0) ;否则{dep1 = balanceBST(t-> lchild,i); dep2 = balanceBST(t-> rchild,i);}如果((dep1- dep2)> 1 || dep1-dep2)<-1)* i = dep1-dep2; / *使用i记录是否存在不平衡* / if(dep1> dep2)返回(dep1 + 1); else} void main(){node int T = NULL; num; 12 return(dep2 +1); int int节点= 0,j = 0,i = 0; ch = 0; p = NULL; printf(“请输入一个以零结尾的数字列表: ”);做{scanf(“%d”,&num); if(!num)printf(“您已经完成输入!\ n”); else} while(num); printf(“ \ \ n \\ n ---操作菜单--- \\ n \\ n \ n”); / *主程序菜单* / printf(“ 0: printf(” 1: printf(“ 2: printf(” 3: printf(“ 4: exit \ n”);有序旅行树\ n“);平均搜索树的长度\ n“);删除”);判断余额\ n“); insertBST(&T,num); while(ch == ch){printf(“选择要继续的操作: ”); scanf(“%d”,&ch);开关(ch){情况0: 情况1: 退出(0); / * 0--退出* / printf(“有序遍历的结果为: \ n”); inorderTraverse(&T); / * 1--序列遍历* / break;情况2: s = 0; j = 0; i = 0; computeASL(&T,&s,&j,i); / * 2--计算平均搜索长度* / printf(“ break; 13ASL =%d /%d”,s,j);情况3: printf(“请输入您要删除的号码: ”); scanf(“%d”,&num); / * 3-删除节点* / if(searchBST(T,num,NULL,&p)){T =删除(T,num); printf(“您已成功删除号码!\ N”); inorderTraverse(&T);} else printf(“没有要删除的节点%d!”,数字);打破;情况4: i = 0; balanceBST(T,&i); / *判断它是否是平衡的两插入树* / if(i == 0)printf(“确定!树是平衡的树!”); else printf(“ break;默认值: printf(”您输入的错误!请再次输入!\ n“); break;} printf(” \ n“);}} 3结束语通过这种设计,我真的感到很开心编程,我从中学到了很多.

尽管他们都说“程序=数据结构+算法”,但是在我学会使用数据结构编程之前,直到开始实践本课程之前,我并没有深刻地意识到这一点. 我觉得最深的一点是,在过去,用C进行编程仅专注于如何编写函数以完成所需的函数. 似乎没有明确的策略,而只是基于简单的意识和简单的陈述来构建程序. 感觉但是现在正在编程/ *输入了无效字符* /否! “ 14”的感觉完全不同. 在编写程序之前,他可以综合考虑各种因素,首先选择所需的数据结构,无论是树还是图还是其他?然后选择一个或多个存储结构来具体确定以下功能的主要风格: 最后,在编写每个功能之前,您可以仔细比较并选择适合当前情况的算法,这样,即使在编写完整程序之前,我也已经拥有清晰的原始图片在我看来,这实际上提高了我编写的程序的质量,此外,我还意识到了深刻理解数据结构的重要性,只有真正了解以这种方式定义数据类型的好处,您才能充分利用理解典型数据结构的性质非常有用,并且通常是编写程序的关键. 在本实验中,我还将参数命名为After man通过尝试,我已经能够相对准确地选择合适的参数形式,以实现功能之间的数据传输和交互. 在这个实验中,我还遇到了一些严重的错误.

在编写具有一维数组序列表结构的程序时,我错误地使用了静态链表来实现该功能. 这是由于我对基本概念的模糊理解. 我认为只要将一维数组用作存储结构,它也必须是序列表结构,并且从本质上讲,这基本上是两个不相关的概念. 后来,在同学们的指导下,我意识到了自己的错误. 但是也有很多收获. 至少我已经练习过使用静态链表来实现相同的功能. 同时,我还发现两者在许上是可以互操作的,可以稍作修改就可以移植. 简而言之,我将继续对编写程序感兴趣,我相信经过越来越多的尝试,我将继续进步. 4参考文献[1]朱占立编辑. 数据结构(C语言描述). 北京: 高等教育出版社,2004. 北京: 清华大学出版社,2001 [2]严为民等主编. 数据结构与应用算法教程[3]陈本林等. [4]赵志卓. 数据结构. 南京: 南京大学出版社,2002. 北京: 科学出版社,2000. 计算科学导论15


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-223369-2.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 李朴
      李朴

      这些热评就知道打打打

    热点图片
    拼命载入中...