五:查找表的初始化操作及应用

本文介绍了一种线性表的数据结构实现方法,并详细解释了包括创建、销毁、读取、插入、删除等基本操作的实现过程。此外,还探讨了几种不同的查找算法,如顺序查找、折半查找及索引顺序查找,并提供了相应的伪代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

结点类型

typedef struct{
		ElemType   *elem;     //数组的基地址
		int        length;   //表中记录的个数
}SSTable;

创建表: Create(&ST,n)

在这里插入代码片

销毁表: Destroy(&ST)

在这里插入代码片

读表元: Get(ST,pos)

在这里插入代码片

插入: Insert(&ST,e)

在这里插入代码片

删除: Delete(&ST,K)

在这里插入代码片

顺序查找: Search(ST,K)

int  Search(SSTable  ST, KeyType  K)  {
  //从表尾开始,顺序查找,  查找成功返回元素的位置下标
 //查找失败,返回0
	int i=ST.length;
  while(i>0 && ST.elem[i].key!=K) i--;
  return  i ;
}//search
int  Search(SSTable  ST, KeyType  K)   {
      //带哨兵的检索,从表尾开始,顺序查找
   //查找成功返回元素的位置下标;查找失败,返回0
	int i=ST.length;
	ST.elem[0].key=K;
	while(ST.elem[i].key!=K) i--;
	return i;
}

折半查找

int Search_Bin(SSTable ST, KeyType K){
	int low=1, high=ST.length;
	int mid;
	while(low<=high){
		mid=(low+high)/2;
		if(K<ST[mid].key)
			high=mid-1; 	//在左区间继续查找
		else if(K>ST[mid].key)
			low=mid+1; 	//在右区间继续查找
		else  return mid;	//查找成功的出口
   }//while
   return 0;      //查找失败的出口
}//Search_Bin

索引顺序查找

typedef struct{
		KeyType 	key;		//块内最大键值
		int 		stadr;    //块起始地址
}IndexItem;

typedef struct{
		IndexItem	*elem;	//索引表基地址
		int		length;	//索引表长度
}IndexTable;
int search_Idx( SSTable  ST,  IndexTable  ID,  KeyType  K ) {
	low=0;high=ID.length-1; found=FALSE;
	if(K>ID.elem[high].key) return 0;
	while(low<=high && !found){//折半查找索引表
		mid=(low+high)/2;
		if(K<ID.elem[mid].key) high=mid-1;
		else if(K>ID.elem[mid].key) low=mid+1;
		else {found=TRUE; low=mid;}
	}//while       *** 下一步顺序查找ST表的第low块 ***
	s=ID.elem[low].stadr;  //确定ST表的查找区间s..t
	if(low<ID.length-1) t=ID.elem[low+1].stadr-1;
  else  t=ST.length;  //low==ID.length-1最后一块
	for(i=s; i<=t&&ST.elem[i].key!=K; i++);//查找ST表
  if(k<=t) return i; //查找成功,返回目标在ST表的下标i
	else return 0;     //查找失败, 返回0
}//search_Idx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值