云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 数据结构实验-二叉排序树应用实验报告

数据结构实验-二叉排序树应用实验报告

  • 62 次阅读
  • 3 次下载
  • 2025/7/14 6:15:41

else

p->rchild = s; /* 插入s为右孩子 */ return 1; } else

return 0; /* 树中已有关键字相同的结点,不再插入 */ }

模块3-删除节点

算法如下:

int Delete(BiTree *p) {

BiTree q,s;

if((*p)->rchild==NULL) /* 右子树空则只需重接它的左子树(待删结点是叶子也走此分支) */ {

q=*p; *p=(*p)->lchild; free(q); }

else if((*p)->lchild==NULL) /* 只需重接它的右子树 */ {

q=*p;

*p=(*p)->rchild; free(q); }

else /* 左右子树均不空 */ {

q=*p;

s=(*p)->lchild;

while(s->rchild) /* 转左,然后向右到尽头(找待删结点的前驱) */ {

q=s;

s=s->rchild; }

strcpy((*p)->data,s->data); /* s指向被删结点的直接前驱(将被删结点前驱的值取代被删结点的值) */ if(q!=*p)

q->rchild=s->lchild; /* 重接q的右子树 */ else

q->lchild=s->lchild; /* 重接q的左子树 */ free(s); }

return 1; }

模块4-查找待删除节点的位置

算法如下:

int DeleteBST(BiTree *T,char *key) {

if(!*T) /* 不存在关键字等于key的数据元素 */ return 0; else {

if (strcmp(key,(*T)->data)==0) /* 找到关键字等于key的数据元素 */ return Delete(T);

else if (strcmp(key,(*T)->data)<0)

return DeleteBST(&(*T)->lchild,key);/* 若待删除节点大于当前节点,则递归访问其左子树 */ else

return DeleteBST(&(*T)->rchild,key);/* 否则访问右子树 */

} }

模块5-功能函数包括查找、插入和删除

算法如下:

void Gongneng(BiTNode *A)

{// 执行操作需将此树的根节点传入到此函数里面 int k; char a[30],c[30],d[30];

printf(\请选择你的操作:\\n\printf(\查找\\n\printf(\删除\\n\printf(\插入\\n\printf(\输入:\scanf(\switch(k)

{//通过switch语句执行不同的操作 case 1 : system(\ printf(\请输入你要查找的节点:\ scanf(\

Search(A, c); //调用查找函数 break; case 2: system(\ printf(\请输入你要删除的节点:\ scanf(\ if(!DeleteBST(&A,a))

printf(\不存在此节点!\\n\ else {printf(\删除节点成功!\\n\\n删除后树的中序遍历结果如下:\\n\ InOrder(A);} break; case 3: system(\ printf(\请输入要插入的节点:\ scanf(\ if(!InsertBST(&A,d))

printf(\插入失败!要插入的节点已存在!\\n\else {

printf(\插入成功!\\n\\n插入后树的中序遍历结果如下:\\n\ InOrder(A); }

break;

default : printf(\输入数值错误!\\n\ } }

四、调试分析

问题及解决方法:

在编写功能函数时,在参数的传递上出现了问题;无法正确的将根节点传入到功能函数里,导致功能函数无法正常运行;解决方法为:void Gongneng(BiTNode *A); 时空分析:

由于采用二叉链表的存储结构,所以在插入和删除算法的时间复杂度较低;而对于较多的数据元素形成的树时,查找算法在时间复杂度上不算简便;而存储方面,二叉链表构成的二叉排序树存储较为方便且空间利用率高; 经验体会:

二叉链表存储结构的存储密度较高,使用起来较为方便;而且在处理数据方面,二叉链表存储结构的处理性比较好,尤其是对插入和删除算法;

五、使用说明

第一步:点击运行按钮;

第二步: 输入待输入的域名个数k; 第三步:依次输入k个域名;

第四步:回车,程序跳转至功能界面,根据提示输入想要执行的功能选项序号; 第五步:回车后,针对各功能项有提示药查找、插入或者删除的节点; 第六步: 执行功能后,选择结束运行还是继续操作;

第七步:若选择继续操作,则程序进入功能界面,可继续选择执行的功能; 第八步:循环执行第四到七步;

第九步:可在第六步选择退出程序;

六、测试结果

  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

else p->rchild = s; /* 插入s为右孩子 */ return 1; } else return 0; /* 树中已有关键字相同的结点,不再插入 */ } 模块3-删除节点 算法如下: int Delete(BiTree *p) { BiTree q,s; if((*p)->rchild==NULL) /* 右子树空则只需重接它的左子树(待删结点是叶子也走此分支) */ { q=*p; *p=(*p)->lchild; free(q); } else if((*p)->lchild==

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com