数据结构课后习解答第九章 查找.docVIP

  • 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)

1亿VIP精品文档

相关文档