2021-05-22

实验五 查找的应用
1、 实验目的:1、 掌握各种查找(顺序、二分法)方法及适用场合,并能在解决实际问题时灵活应用。2、 增强上机编程调试能力。2、 问题描述1. 分别利用顺序查找和折半查找方法完成查找。有序表(3,4,5,7,24,30,42,54,63,72,87,95)输入示例:请输入查找元素:52输出示例: 顺序查找: 第一次比较元素95 第二次比较元素87 ……… 查找成功,i=**/查找失败 折半查找: 第一次比较元素30 第二次比较元素63 ……2. 利用序列(12,7,17,11,16,2,13,9,21,4)建立二叉排序树,并完成指定元素的查询。输入输出示例同上。三、存储结构表示查找表的存储表示typedef struct{​int key;//关键字域}ElemType; typedef struct{​ElemType *R;​int length;}SSTable;树表的存储表示typedef struct ElemType{​​char key;}ElemType; typedef struct BSTNode{​ElemType data;​//结点数据域​BSTNode *lchild,*rchild;​//左右孩子指针}BSTNode,*BSTree;四、参考算法int Search_Seq(SSTable ST, int key){ //在顺序表ST中顺序查找其关键字等于key的数据元素。若找到,则函数值为 //该元素在表中的位置,否则为0 for (int i=ST.length; i>=1; --i) if (ST.R[i].keykey) return i;​​//从后往前找 return 0; }// Search_Seqint Search_Bin(SSTable ST,int key) { // 在有序表ST中折半查找其关键字等于key的数据元素。若找到,则函数值为 // 该元素在表中的位置,否则为0 int low=1,high=ST.length;​​​​​​​//置查找区间初值 int mid; while(low<=high) {​ mid=(low+high) / 2; if (keyST.R[mid].key) return mid; ​​//找到待查元素 else if (key<ST.R[mid].key) high = mid -1;​​//继续在前一子表进行查找 else low =mid +1; ​​//继续在后一子表进行查找 }//while return 0;​​​​​​​​​​//表中不存在待查元素}// Search_Bin//算法7.6 二叉排序树的创建void CreateBST(BSTree &T ) { //依次读入一个关键字为key的结点,将此结点插入二叉排序树T中 T=NULL; ElemType e; cin>>e.key; //??? while(e.key!=ENDFLAG){ ​//ENDFLAG为自定义常量,作为输入结束标志 InsertBST(T, e); ​//将此结点插入二叉排序树T中 cin>>e.key;​​​//??? }//while }//CreatBST//算法7.4 二叉排序树的递归查找BSTree SearchBST(BSTree T,char key) { //在根指针T所指二叉排序树中递归地查找某关键字等于key的数据元素 //若查找成功,则返回指向该数据元素结点的指针,否则返回空指针 if((!T)|| key==T->data.key) return T; ​ ​//查找结束 else if (keydata.key) return SearchBST(T->lchild,key);​//在左子树中继续查找 else return SearchBST(T->rchild,key); ​​ ​​​//在右子树中继续查找} // SearchBST 在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值