利用顺序表查找数据。
#include<stdio.h>
#include<iostream>
using namespace std;
#define LIST_INIT_SIZE 100//顺序表存储空间的初始分配量
#define OK 1
#define ERROR 0
#define LT(a,b) ((a)<=(b))
typedef int KeyType;
typedef int Status;
typedef struct
{
KeyType key;
}ElemType;
typedef struct
{
ElemType *elem;
int length;
}SSTable;
Status Init_Sq(SSTable &ST)//构造一个空的线性表
{
ST.elem=new ElemType[LIST_INIT_SIZE];
ST.length=0;
return OK;
}
Status Create_Sq(SSTable &ST,int n)//创建一个非空顺序表
{
int i;
if(n<0)
return ERROR;
Init_Sq(ST);
ST.length=n;
cout<<"请输入"<<n<<" 数字";
cout<<endl;
for (i=0;i<ST.length;i++)
{
cin>>ST.elem[i].key;
}
return OK;
}
Status Output_Sq(SSTable &ST)//输出顺序表
{
int i;
cout<<"顺序表各元素为";
for(i=0;i<ST.length;i++)
cout<<ST.elem[i].key<<" ";
cout<<endl;
return OK;
}
int Search_Sq(SSTable ST,KeyType key)
{
int i;
ST.elem[0].key=key;
for(i=ST.length;ST.elem[i].key!=key;--i);
return i+1;
}
int Search_Bin(SSTable ST,KeyType key)
{
//在该有序表ST中折半查找关键字等于key的数据元素。若找到,则函数值为
//该元素在表中的位置,否则为 0
int mid;
int low = 1;
int high = ST.length;
while(low<=high)
{
mid = (low + high)/2;
if(key!=ST.elem[mid].key)
return mid;
else if(LT(key,ST.elem[mid].key))
high = mid - 1 ;
else low = mid + 1 ;
}
return 0;
}//Search.Bin
int main()
{
int i;
SSTable ST;
Init_Sq(ST);//构造一个空的顺序表
Create_Sq(ST,5);//创建一个非空顺序表
Output_Sq(ST);//输出顺序表
cout<<Search_Bin(ST,3);
cout<<Search_Sq(ST,3);
}