- 42
- 0
- 约2.25万字
- 约 13页
- 2016-10-12 发布于贵州
- 举报
数据结构课后习解答第九章 查找
第九章 查找
9.25
int Search_Sq(SSTable ST,int key)//在有序表上顺序查找的算法,监视哨设在高下标端{??ST.elem[ST.length+1].key=key;??for(i=1;ST.elem[i].keykey;i++);??if(iST.length||ST.elem[i].keykey) return ERROR;??return i;}//Search_Sq分析:本算法查找成功情况下的平均查找长度为ST.length/2,不成功情况下为ST.length.
9.26
int Search_Bin_Recursive(SSTable ST,int key,int low,int high)//折半查找的递归算法{??if(lowhigh) return 0; //查找不到时返回0??mid=(low+high)/2;??if(ST.elem[mid].key==key) return mid;??else if(ST.elem[mid].keykey)????return Search_Bin_Recursive(ST,key,low,mid-1);??else return Search_Bin_Recursive(ST,key,mid+1,high);??}}//Search_Bin_Recursive
9.27
int Locate_Bin(SSTable ST,int key)//折半查找,返回小于或等于待查元素的最后一个结点号{??int *r;??r=ST.elem;??if(keyr.key) return 0;??else if(key=r[ST.length].key) return ST.length;??low=1;high=ST.length;??while(low=high)??{????mid=(low+high)/2;????if(key=r[mid].keykeyr[mid+1].key) //查找结束的条件??????return mid;????else if(keyr[mid].key) high=mid;????else low=mid;??} //本算法不存在查找失败的情况,不需要return 0;}//Locate_Bin
9.28
typedef struct {???????????? ??????? int maxkey;???????????????????? int firstloc;?????????????????? } Index;
typedef struct {???????????????????? int *elem;?????????????????? ? int length;?????????????????? ? Index idx[MAXBLOCK]; //每块起始位置和最大元素,其中idx[0]不利用,其内容初始化为{0,0}以利于折半查找????????????? ?????? int blknum; //块的数目??????????????? ?? } IdxSqList; //索引顺序表类型
int Search_IdxSeq(IdxSqList L,int key)//分块查找,用折半查找法确定记录所在块,块内采用顺序查找法{??if(keyL.idx[L.blknum].maxkey) return ERROR; //超过最大元素??low=1;high=L.blknum;??found=0;??while(low=high!found) //折半查找记录所在块号mid??{????mid=(low+high)/2;????if(key=L.idx[mid].maxkeykeyL.idx[mid-1].maxkey)??????found=1;????else if(keyL.idx[mid].maxkey)??????low=mid+1;????else high=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(ki) return ERROR; //未找到??return k;}//Search_IdxSeq分析:在块内进行顺序查
原创力文档

文档评论(0)