版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验名称查找及其应用实验日期1、实验目的:2019.12.02实验成 绩(1)掌握在数组上进行各种查找的方法和算法(2)深刻理解各种方法的特点,并能灵活运用(3)加深对查找的理解,逐步培养解决实际问题的编程能 力2、实验内容:1、设计一个程序,输出在顺序表 3,6,2,10,1,8,5,7,4,9 中采用 顺序方法查找关键字 5 的过程。2、设计一个程序,输出在顺序表 1,2,3,4,5,6,7,8,9,10 中 采用二分查找法查找关键字 9 的过程。3、设计一个程序实现二叉排序树的基本运算,并在此基 础上完成如下功能:(1) 由4,9,0,1,8,6,3,5,2,7 创建一颗二叉排序 bt
2、并以括号 表示输出。(2) 判断 bt 是否为一颗二叉排序树。(3) 查找关键字为 6 的结点,并输出其查找路径。(4) 分别删除 bt 中关键字为 4和 5 的节点,并输出删除后的二叉排序树3、核心算法或代码片段: 代码片段 1: #include #define MAXL 100 / 定义表中最多记录个数 typedef int KeyType; typedef char InfoType10; typedef struct KeyType key; /KeyType 为关 键字的数据类型InfoType data;/ 其他数据 NodeType;typedef NodeType SeqL
3、istMAXL;/ 顺序表类型int SeqSearch(SeqList R,int n,KeyType k) /顺序查找算法int i=0;while (i=n)return -1;elseprintf(%d,Ri.key);return i;int main()SeqList R;int n=10,i;KeyType k=5;int a=3,6,2,10,1,8,5,7,4,9;for (i=0;in;i+)/ 从表头往后找/ 建立顺序表Ri.key=ai; printf( 关键字序列 :); for (i=0;in;i+)printf(%d ,Ri.key);printf(n);prin
4、tf( 查找%d 所比较的关键字 :nt,k);if (i=SeqSearch(R,n,k)!=-1)printf(n 元素 %d 的位置是 %dn,k,i);elseprintf(n 元素 %d 不在表中 n,k); printf(n);代码片段 2:#include #define MAXL 100/ 定义表中最多记录个数typedef int KeyType;typedef char InfoType10;typedef structKeyType key;/KeyType 为关键字的数据类型InfoType data;/ 其他数据 NodeType;typedef NodeType S
5、eqListMAXL;/ 顺序表类型 int BinSearch(SeqList R,int n,KeyType k)/二分查找算法 兰FA兰二Mftw=(+cvo)OJOVUY宀 OLogggpcoZLTue 茎一 o艾 dAj_A | 正玄lbs ()eu 一 宀 -Vun05 宀lfrE6z:L+p 一旦 Mttls黑注 L+P 一 EHMO_ SO5 VP 壬昱6Ztlfr?p 壬:mo_mttls黑二(天 兰 p 一旦 M 二一 &LU un05回数祢整径1vwhha兰p 一旦M二一-(勸兰 p 一旦 HP 一 E-c6zMO_un8+kp%-p%M M1K聲主frp%p%MCKZa
6、6z+MOTP 壬(II6ZHVM0-) QZM oJLun8PELUHLI6zoHMO- 411 一printf( 关键字序列 :);for (i=0;in;i+)printf(%d ,Ri.key); printf(n);printf( 查找 %d 的比较过程如下 :n,k); if (i=BinSearch(R,n,k)!=-1) printf( 元素 %d 的位置是 %dn,k,i); elseprintf( 元素 %d 不在表中 n,k);return 0;/ 定义关键字类型/ 记录类型/ 关键字项 代码片段 3: #include #include #define MaxSize
7、100 typedef int KeyType; typedef char InfoType; typedef struct node KeyType key;InfoType data;struct node *lchild, *rchild; BSTNode;int pathMaxSize;void DispBST(BSTNode *b);/ 其他数据域/ 左右孩子指针/ 全局变量 ,用于存放路径/ 函数说明int InsertBST(BSTNode *&p, KeyType k); BSTNode *CreatBST(KeyType A, int n); void DispBST(BST
8、Node *bt);int JudgeBST(BSTNode *bt);int SearchBST(BSTNode *bt, KeyType k);void Delete1(BSTNode *p, BSTNode *&r); void Delete(BSTNode *&p);int DeleteBST(BSTNode *&bt, KeyType k);int InsertBST(BSTNode *&p, KeyType k) / 在以 *p 为根节点的 BST中插入一个关键字为 k 的节点if (p = NULL)/ 原树为空 , 新插入的记录为根节点p = (BSTNode *)malloc
9、(sizeof(BSTNode); p-key = k; p-lchild = p-rchild = NULL; return 1;else if (k = p-key)return 0;else if (kkey)return InsertBST(p-lchild, k); / 插入到 *p 的左子树中 elsereturn InsertBST(p-rchild, k); / 插入到 *p 的右子树中BSTNode *CreatBST(KeyType A, int n)/ 由数组 A中的关键字建立一棵二叉排序树BSTNode *bt = NULL;/ 初始时 bt 为空树int i = 0;
10、while (ikey);if (bt-lchild != NULL | bt-rchild != NULL)printf(); DispBST(bt-lchild);if (bt-rchild != NULL) printf(,);DispBST(bt-rchild);printf();KeyType predt = -32767; /predt 为全局变量 ,保存当前节点中 序前趋的值 ,初值为 -int JudgeBST(BSTNode *bt)/ 判断 bt 是否为 BSTint b1, b2;if (bt = NULL) / 空二叉树是排序二叉树return 1;elseb1 = J
11、udgeBST(bt-lchild); / 返回对左子树的判断,不 是返回 0,否则返回 1if (b1 = 0 | predt = bt-key) / 当左子树不是二叉排序 树,或中序前趋(全局变量)大于当前根结点时return 0; / 返回“不是二叉排序树” predt = bt-key; / 记录当前根为右子树的中序前趋 b2 = JudgeBST(bt-rchild); / 对右子树进行判断 return b2;int SearchBST(BSTNode *bt, KeyType k)/ 以递归方式输出从根节点到查找到的节点的路径if (bt = NULL)return 0;else
12、 if (k = bt-key)printf(%3d, bt-key);return 1;else if (kkey)SearchBST(bt-lchild, k); / 在左子树中递归查找 elseSearchBST(bt-rchild, k); / 在右子树中递归查找 printf(%3d, bt-key);void Delete1(BSTNode *p, BSTNode *&r)/当被删 *p 节点有左右子树时的删除过程BSTNode *q; if (r-rchild != NULL)Delete1(p, r-rchild); / 递归找最右下节点 else / 找到了最右下节点 *r
13、p-key = r-key; / 将 *r 的关键字值赋给 *pq = r;r = r-lchild;/ 将 *r 的双亲节点的右孩子节点改为*r 的左孩子节点free(q); / 释放原 *r 的空间void Delete(BSTNode *&p)/ 从二叉排序树中删除 *p 节点BSTNode *q;if (p-rchild = NULL) /*p 节点没有右子树的情况q = p; p = p-lchild; free(q);else if (p-lchild = NULL) /*p 节点没有左子树的情况q = p; p = p-rchild; free(q);else Delete1(p
14、, p-lchild); /*p 节点既有左子树又有右子树的 情况int DeleteBST(BSTNode *&bt, KeyType k)/ 在 bt 中删除关键字为 k 的节点if (bt = NULL) return 0; / 空树删除失败elseif (kkey)return DeleteBST(bt-lchild, k);/ 递归在左子树中删除关键字为 k 的节点else if (kbt-key)return DeleteBST(bt-rchild, k);/ 递归在右子树中删除关键字为 k 的节点else /k=bt-key 的情况Delete(bt);/ 调用 Delete(b
15、t) 函数删除 *bt 节点return 1;耳偉劉制 .)Buud .uvJbuucI 0q)丄S日dsg 心 lq)isaepaL-P耳偉劉制.)BuudIC.uvJbuucI 0q)丄S日dsg 危:丄ST 旨.)Buud:(.u:助瞬劉制 uvJbuucI:(k 飞问 J 1q)saM0Jees/心 1q)isaM0Jees 心;:(冒更 MW)者勝关 p%.)Buud:(.isa谢一者立:“丄ST 谢一者.c Gq)lSaeBpnr) 1us%iq11)BuudIC.uvJwuud 0q)丄S日dsg.:丄sa.)Buud:(u宅)丄S日代aiO = g IC.uvJbuucI:(.:Misa 谢章碍初U!d:OL 二 u fz 7
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 26年非霍奇金淋巴瘤基因检测实操
- 口才教育教案
- 教育技术发展与应用概述
- 文化商业空间设计
- 工作检讨流程
- 少儿茶之源启蒙文化课
- 健康护理教育
- 2026儿科水痘护理查房解读
- 民宿设计策略
- 风湿免疫科硬皮病皮肤护理建议
- DB61T 926-2014 火灾高危单位消防安全管理与评估规范
- 腹腔镜食管裂孔疝修补术七步法 2025解读
- 2024-2025学年广东省广州市海珠区六年级下册期末语文检测试题(部编版)附答案
- 港口防台风安全知识培训课件
- 山东科技大学《概率论与数理统计》2024-2025学年第一学期期末试卷
- GB/T 755-2025旋转电机定额与性能
- 贵州省六盘水市2024-2025学年高一下学期期末质量监测物理试卷(PDF版无答案)
- 银行案件防控培训资料
- 智联招聘测评题库及答案
- 物业sop管理制度
- (完整版)钢结构厂房施工组织设计(含土建)
评论
0/150
提交评论