欢迎来到天天文库
浏览记录
ID:48621215
大小:72.02 KB
页数:20页
时间:2020-01-30
《《数据结构题集》答案 第9章 查找.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第九章查找9.25intSearch_Sq(SSTableST,intkey)//在有序表上顺序查找的算法,监视哨设在高下标端{ ST.elem[ST.length+1].key=key; for(i=1;ST.elem[i].key>key;i++); if(i>ST.length
2、
3、ST.elem[i].key4、_Bin_Recursive(SSTableST,intkey,intlow,inthigh)//折半查找的递归算法{ if(low>high)return0;//查找不到时返回0 mid=(low+high)/2; if(ST.elem[mid].key==key)returnmid; elseif(ST.elem[mid].key>key) returnSearch_Bin_Recursive(ST,key,low,mid-1); elsereturnSearch_Bin_Recursive(ST,k5、ey,mid+1,high); }}//Search_Bin_Recursive9.27intLocate_Bin(SSTableST,intkey)//折半查找,返回小于或等于待查元素的最后一个结点号{ int*r; r=ST.elem; if(key=r[ST.length].key)returnST.length; low=1;high=ST.length; while(low<=high) { mid=(low+high)/2; 6、if(key>=r[mid].key&&key7、 int*elem; intlength; Indexidx[MAXBLOCK];//每块起始位置和最大元素,其中idx[0]不利用,其内容初始化为{0,0}以利于折半查找 intblknum;//块的数目 }IdxSqList;//索引顺序表类型intSearch_IdxSeq(IdxSqListL,intkey)//分块查找,用折半查找法确定记录所在块,块内采用顺序查找法{8、 if(key>L.idx[L.blknum].maxkey)returnERROR;//超过最大元素 low=1;high=L.blknum; found=0; while(low<=high&&!found)//折半查找记录所在块号mid { mid=(low+high)/2; if(key<=L.idx[mid].maxkey&&key>L.idx[mid-1].maxkey) found=1; elseif(key>L.idx[mid].maxkey) low=mi9、d+1; elsehigh=mid-1; } i=L.idx[mid].firstloc;//块的下界 j=i+blksize-1;//块的上界 temp=L.elem[i-1];//保存相邻元素 L.elem[i-1]=key;//设置监视哨 for(k=j;L.elem[k]!=key;k--);//顺序查找 L.elem[i-1]=temp;//恢复元素 if(k10、监视哨,则必须先保存相邻块的相邻元素,以免数据丢失.9.29typedefstruct{ LNode*h;//h指向最小元素 LNode*t;//t指向上次查找的结点 }CSList;LNode*Search_CSList(CSLis
4、_Bin_Recursive(SSTableST,intkey,intlow,inthigh)//折半查找的递归算法{ if(low>high)return0;//查找不到时返回0 mid=(low+high)/2; if(ST.elem[mid].key==key)returnmid; elseif(ST.elem[mid].key>key) returnSearch_Bin_Recursive(ST,key,low,mid-1); elsereturnSearch_Bin_Recursive(ST,k
5、ey,mid+1,high); }}//Search_Bin_Recursive9.27intLocate_Bin(SSTableST,intkey)//折半查找,返回小于或等于待查元素的最后一个结点号{ int*r; r=ST.elem; if(key=r[ST.length].key)returnST.length; low=1;high=ST.length; while(low<=high) { mid=(low+high)/2;
6、if(key>=r[mid].key&&key7、 int*elem; intlength; Indexidx[MAXBLOCK];//每块起始位置和最大元素,其中idx[0]不利用,其内容初始化为{0,0}以利于折半查找 intblknum;//块的数目 }IdxSqList;//索引顺序表类型intSearch_IdxSeq(IdxSqListL,intkey)//分块查找,用折半查找法确定记录所在块,块内采用顺序查找法{8、 if(key>L.idx[L.blknum].maxkey)returnERROR;//超过最大元素 low=1;high=L.blknum; found=0; while(low<=high&&!found)//折半查找记录所在块号mid { mid=(low+high)/2; if(key<=L.idx[mid].maxkey&&key>L.idx[mid-1].maxkey) found=1; elseif(key>L.idx[mid].maxkey) low=mi9、d+1; elsehigh=mid-1; } i=L.idx[mid].firstloc;//块的下界 j=i+blksize-1;//块的上界 temp=L.elem[i-1];//保存相邻元素 L.elem[i-1]=key;//设置监视哨 for(k=j;L.elem[k]!=key;k--);//顺序查找 L.elem[i-1]=temp;//恢复元素 if(k10、监视哨,则必须先保存相邻块的相邻元素,以免数据丢失.9.29typedefstruct{ LNode*h;//h指向最小元素 LNode*t;//t指向上次查找的结点 }CSList;LNode*Search_CSList(CSLis
7、 int*elem; intlength; Indexidx[MAXBLOCK];//每块起始位置和最大元素,其中idx[0]不利用,其内容初始化为{0,0}以利于折半查找 intblknum;//块的数目 }IdxSqList;//索引顺序表类型intSearch_IdxSeq(IdxSqListL,intkey)//分块查找,用折半查找法确定记录所在块,块内采用顺序查找法{
8、 if(key>L.idx[L.blknum].maxkey)returnERROR;//超过最大元素 low=1;high=L.blknum; found=0; while(low<=high&&!found)//折半查找记录所在块号mid { mid=(low+high)/2; if(key<=L.idx[mid].maxkey&&key>L.idx[mid-1].maxkey) found=1; elseif(key>L.idx[mid].maxkey) low=mi
9、d+1; elsehigh=mid-1; } i=L.idx[mid].firstloc;//块的下界 j=i+blksize-1;//块的上界 temp=L.elem[i-1];//保存相邻元素 L.elem[i-1]=key;//设置监视哨 for(k=j;L.elem[k]!=key;k--);//顺序查找 L.elem[i-1]=temp;//恢复元素 if(k
10、监视哨,则必须先保存相邻块的相邻元素,以免数据丢失.9.29typedefstruct{ LNode*h;//h指向最小元素 LNode*t;//t指向上次查找的结点 }CSList;LNode*Search_CSList(CSLis
此文档下载收益归作者所有