当前位置: 首页 > news >正文

李春葆《数据结构》-查找-课后习题代码题

一:设计一个折半查找算法,求查找到关键字为 k 的记录所需关键字的比较次数。假设 k R[i].key 的比较得到 3 种情况,即 k==R[i].keyk<R[i].key 或者 k>R[i].key,计为 1 次比较(在教材中讨论关键字比较次数时都是这样假设的)。

代码:

int BinSearch1(RecType R[],int n,KeyType k){int low=0,high=n-1,mid,count=1;while(low<=high){mid=(low+high)/2;if(R[mid].key==k){return count;}else if(R[mid].key>key){high=mid-1;}else{low=mid+1;}count++;}count--;//没找到return count; 
} 

二:设计一个算法,判断给定的二叉树是否是二叉排序树。假设二叉树中结点关键字 均为正整数且均不相同。

代码:

KeyType pre=-32767
bool isBST(BSTNode *bt){int islBST,isrBST;if(bt==NULL){return true;}else{islBST=(bt->lchild);//判断左子树if(isBST==false) return false;if(bt->key<pre)   return false;pre=bt->key;isrBST(bt->rchild);//判断右子树 return isrBST }
}

三:设计一个算法,在一棵非空二叉排序树 bt 中求出指定关键字为 k 结点的层次。

代码:

int Level(BSTNode *bt,KeyType k){int level=1;BTNode *p=bt;while(p!=NULL&&p->key!=k){if(k<p->key){//左子树中找 p=p->lchild;}else{//右子树中找 p=p->rchild;}level++;}if(p!=NULL){return level;}else{return 0;//没有找到 }
} 

四:设计一个哈希表 ha[0..m-1]存放 n 个元素,哈希函数采用除留余数法 H(key)=ke % ppm),解决冲突的方法采用开放定址法中的平方探测法。

1)设计哈希表的类型。

2)设计在哈希表中查找指定关键字的算法

#define MaxSize 100 //定义最大哈希表长度
#define NULLKEY -1 //定义空关键字值
#define DELKEY -2 //定义被删关键字值
typedef int KeyType; //关键字类型
typedef char * InfoType; //其他数据类型
typedef struct{KeyType key; //关键字域InfoType data; //其他数据域int count; //探测次数域
} HashTable[MaxSize]; //哈希表类型
int SearchHT1(HashTable ha,int p,int m,KeyType k){//在哈希表中查找关键字 k int adr,adr1,i=1,sign;adr=adr1=k % p; //求哈希函数值sign=1;while (ha[adr].key!=NULLKEY && ha[adr].key!=k){adr=(adr1+sign*i*i) % m;if(sign==1){sign=-1;}else{//sign==-1sign=1;i++;} }if (ha[adr].key==k){//查找成功return adr;}else{//查找失败return -1;}
}

代码:

http://www.lryc.cn/news/494353.html

相关文章:

  • 【Git】:分支管理
  • C、C++ 和 Java的区别
  • 【Python-Open3D学习笔记】005Mesh相关方法
  • js原型、原型链和继承
  • 团队自创【国王的魔镜-2】
  • c++编程玩转物联网:使用芯片控制8个LED实现流水灯技术分享
  • 【Jenkins】docker 部署 Jenkins 踩坑笔记
  • Unreal Engine使用Groom 打包后报错
  • 嵌入式QT学习第3天:UI设计器的简单使用
  • 【连接池】.NET开源 ORM 框架 SqlSugar 系列
  • 图论入门编程
  • 在Java中使用Apache POI导入导出Excel(三)
  • UR开始打中国牌,重磅发布国产化协作机器人UR7e 和 UR12e
  • FRU文件
  • AI需求条目化全面升级!支持多格式需求,打破模板限制!
  • Java—I/O流
  • Huginn服务部署
  • 深入解析Java数据包装类型:特性、机制与最佳实践
  • 【Java基础入门篇】二、控制语句和递归算法
  • PostgreSQL WAL日志膨胀处理
  • 用户该怎么管理维护自己的服务器?
  • 【MYSQL数据库相关知识介绍】
  • 初窥 HTTP 缓存
  • yolov8的深度学习环境安装(cuda12.4、ubuntu22.04)
  • RSA算法和AES算法,哪种更安全
  • Vue教程|搭建vue项目|Vue-CLI新版脚手架
  • kdump调试分析(适用于麒麟,ubuntu等OS)
  • houdini肌肉刷pin点的方法
  • JMeter 并发策略-针对准点秒杀场景的压测实现
  • 龙迅#LT6912适用于HDMI2.0转HDMI+LVDS/MIPI,分辨率高达4K60HZ,支持音频和HDCP2.2