数据结构——折半查找源代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构折半查找源代码
源代码:
折半查找:
#include
#include"process.h"//exit()
#include"stdio.h"//EOF,NULL
typedef int T; //定义关键字的类型,这里就以整形来处理
//查找表类定义
template
struct Node
{
T key; //关键字域
/*
........ //其他域,可以自己根据需要添加
*/
};
template
class SSearch {
private:
Node
int len;//表长
public:
SSearch();//
~SSearch();//析构函数,删除表空间
void Create(int n); //创建时根据用户实际需求,再为相应的数据元素赋值void Display(); //输出静态表中的数据元素
int SeSearch(T key); //从表中最后一个元素开始顺序查找
void Ascendsort(); //升序排列
int BiSearch_1(T key);//折半查找,非递归算法
int BiSearch_2(T key);//折半查找,递归算法
int BiSearch2(int x,int y,T key);
};
template
SSearch
{//
ST=NULL;
len=0;
}
template
SSearch
{//释放表空间
delete [] ST;
len=0;
}
template
void SSearch
{
len=n;
ST=new Node
Node
int i=0;
cout<<"输入"< while(i { cin>>e.key; ST[i]=e; i++; } } template int SSearch {//从表中最后一个元素开始顺序查找,若找到,返回位序,否则,返回-1 for(int i=len-1;i>=0;i--) if(ST[i].key==key) { cout<<"查找成功!位居第"< return i; } cout<<"末找到!"< return -1; } template void SSearch { T t; for(int i=0;i { for(int j=0;j if(ST[j].key>ST[j+1].key) { t=ST[j].key; ST[j].key=ST[j+1].key; ST[j+1].key=t; } } } template int SSearch { //折半查找非递归算法 if(len==0 && ST==NULL) { cout<<"顺序表不存在,请先建立表\n"; return -1; } else { int low=0,high=len-1; int mid; while(low<=high) { mid=(high+low)/2; if(ST[mid].key==key) { cout<<"找到!位居"< return mid; } if(ST[mid].key>key) high=mid-1; else low=mid+1; } cout<<"末找到!"< return -1; } } template int SSearch {//折半查找递归算法 int mid=(x+y)/2; if(ST[mid].key==key) return mid; if(x>y) return -1; //表示没有找到 if(key return BiSearch2(x,mid-1,key); else return BiSearch2(mid+1,y,key); }// template int SSearch { int k; k=BiSearch2(0,len-1,key); return k; } template void SSearch {//输出静态表中的数据元素 cout<<"静态表中的数据元素关键字依次为:\n"; for(int i=0;i { cout< } cout< } void main() { int choice,n,k; SSearch cout<<"注意:必须先创建静态表)\n"; cout<<"=======================\n"; T key; cout<<"--- 1. 创建查找表------------------------\n" <<"--- 2. 顺序查找-------------------------\n" <<"--- 3. 折半查找<递归>----------------------\n" <<"--- 4. 折半查找<非递归> -------------------\n" <<"--- 5. 输出静态表中的所有数据元素关键字----\n"