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

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

一:设计一个折半查找算法,求查找到关键字为 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==-1
			sign=1;
			i++;
		} 
	}
	if (ha[adr].key==k){//查找成功
		return adr;
	}else{//查找失败
		return -1;
	}
}

代码:


http://www.kler.cn/a/415528.html

相关文章:

  • 某航客服部满意度调查及管理改进项目纪实
  • js 16进制加密
  • 嵌入式Qt使用ffmpeg视频开发记录
  • HarmonyOS(60)性能优化之状态管理最佳实践
  • vue3 发送 axios 请求时没有接受到响应数据
  • Basemap 在地图上显示图例
  • TiDB 架构
  • mysql集群NDB方式部署
  • 基于Java Springboot 易家宜超市云购物系统
  • Conda 管理python开发环境
  • npm和pnpm区别
  • CIKM23|基于会话推荐的因果关系引导图学习
  • OpenAI:2025年ChatGPT将成为“企业大脑”,并向Agent过渡
  • 【科研】9如何高效阅读和理解学术论文
  • Ps:存储 Adobe PDF - 输出
  • 零售餐饮收银台源码
  • 龙迅#LT8711GX适用于Type-C/DP1.4a 转 HDMI2.1 应用领域,分辨率高达8K30HZ,内置程序,可提供技术支持!
  • Linux 命令 pwd:探索当前工作目录的奥秘
  • Nginx篇之实现nginx转发兼容HTTP和Websocket两种协议
  • [CA] 尝试深入理解core.cpp -1
  • C++11-lambda表达式
  • mac maven编译出现问题
  • 回文链表(java)
  • Swift——类与结构体
  • 力扣刷题TOP101:6.BM7 链表中环的入口结点
  • ClickHouse 中利用Map类型存储多key数组并进行高效查询