数据结构——折半查找源代码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据结构折半查找源代码

源代码:

折半查找:

#include//cout,cin

#include"process.h"//exit()

#include"stdio.h"//EOF,NULL

typedef int T; //定义关键字的类型,这里就以整形来处理

//查找表类定义

template

struct Node

{

T key; //关键字域

/*

........ //其他域,可以自己根据需要添加

*/

};

template

class SSearch {

private:

Node *ST;

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::SSearch()

{//

ST=NULL;

len=0;

}

template

SSearch::~SSearch()

{//释放表空间

delete [] ST;

len=0;

}

template

void SSearch::Create(int n)

{

len=n;

ST=new Node[len];

Node e;

int i=0;

cout<<"输入"<

while(i

{

cin>>e.key;

ST[i]=e;

i++;

}

}

template

int SSearch::SeSearch(T key)

{//从表中最后一个元素开始顺序查找,若找到,返回位序,否则,返回-1 for(int i=len-1;i>=0;i--)

if(ST[i].key==key)

{

cout<<"查找成功!位居第"<

return i;

}

cout<<"末找到!"<

return -1;

}

template

void SSearch::Ascendsort()

{

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::BiSearch_1(T key)

{ //折半查找非递归算法

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::BiSearch2(int x,int y,T key)

{//折半查找递归算法

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::BiSearch_2(T key)

{

int k;

k=BiSearch2(0,len-1,key);

return k;

}

template

void SSearch::Display()

{//输出静态表中的数据元素

cout<<"静态表中的数据元素关键字依次为:\n";

for(int i=0;i

{

cout<

}

cout<

}

void main()

{

int choice,n,k;

SSearch a;

cout<<"注意:必须先创建静态表)\n";

cout<<"=======================\n";

T key;

cout<<"--- 1. 创建查找表------------------------\n"

<<"--- 2. 顺序查找-------------------------\n"

<<"--- 3. 折半查找<递归>----------------------\n"

<<"--- 4. 折半查找<非递归> -------------------\n"

<<"--- 5. 输出静态表中的所有数据元素关键字----\n"

相关文档
最新文档