顺序查找
using namespace std;
typedef struct
{
ElemType *elem;
int length;
} SSTable;
int Search_Seq(SSTable ST,keytype key)
{
int i;
for(i=ST.length; !(ST.elem[i]==key)&&i>0; i--);
return i;
}
void Init_table(SSTable &ST,ElemType e)
{
ST.elem = (ElemType *)malloc(sizeof(SSTable)*Default_size);
ST.length = 1;
ST.elem[ST.length] = e;
char b;
b = getchar();
while(b!='\n')
{
if(b!=' ')
{
ST.length++;
ST.elem[ST.length] = b-'0';
}
b = getchar();
}
}
int main()
{
keytype key;
SSTable ST;
ElemType e;
while(cin>>e)
{
Init_table(ST,e);
scanf("%d",&key);
cout<<Search_Seq(ST,key)<<endl;
}
return 0;
}
折半查找
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#define ElemType int
#define keytype int
#define ERROR 0
#define OK 1
#define Status int
#define Default_size 1000
using namespace std;
typedef struct
{
ElemType *elem;
int length;
} SSTable;
int Search_half(SSTable ST,keytype key)
{
int left,right;
left = 1;
right = ST.length;
int mid = (left+right)/2;;
while(left<=right)
{
mid = (left+right)/2;
if(key==ST.elem[mid])
return mid;
else if(key>ST.elem[mid])
{
left = mid+1;
}
else
right = mid-1;
}
return 0;
}
void Init_table(SSTable &ST,ElemType e)
{
ST.elem = (ElemType *)malloc(sizeof(SSTable)*Default_size);
ST.length = 1;
ST.elem[ST.length] = e;
int b;
char temp;
cin>>b;
while(cin>>b)
{
if(b!=' ')
{
ST.length++;
ST.elem[ST.length] = b;
}
cin>>b;
temp = (char)b;
}
cout<<"输入结束,共"<<ST.length<<"个元素"<<endl;
}
int main()
{
keytype key;
SSTable ST;
ElemType e;
while(cin>>e)
{
Init_table(ST,e);
scanf("%d",&key);
cout<<Search_half(ST,key)<<endl;
}
return 0;
}