查找1-3,每次循环都需要比较两次:(1)ST.R[i].key是否等于key(2)i是否>=1
查找4,在第0位设置监视哨,放置关键字。每次只需比较ST.R[i].key与给定关键字是否相等即可。
代码:
#include<iostream>
using namespace std;
#define MAXSIZE 100
#define OVERFLOW -2
#define OK 1
typedef int KeyType;
typedef char InfoType;
typedef struct{
KeyType key; //关键字项
InfoType otherinfo; //其他数据项
}ElemType;
typedef struct{
ElemType *R;
int length;
}SSTable;
//初始化
int Init_SSTable(SSTable &ST){
ST.R=new ElemType[MAXSIZE];
if(!ST.R) return(OVERFLOW);
ST.length=0;
return OK;
}
//创建顺序表
void Create_SSTable(SSTable &ST,int a[],int n){
for(int i=1;i<=n;i++){
ST.R[i].key=a[i-1];
ST.length++;
}
}
//显示顺序表
void Show_SSTable(SSTable ST,int n){
cout<<"长度为:"<<ST.length<<endl;
cout<<"数据元素为:";
for(int i=0;i<=n;i++){
cout<<ST.R[i].key<<' ';
}
}
//查找1(循环条件为i>=1)
//int Search_Seq(SSTable ST,KeyType key){
// for(int i=ST.length;i>=1;--i)
// if(ST.R[i].key==key) return i;
// return 0;
//}
//查找2(循环条件为ST.R[i].key!=key)
//int Search_Seq(SSTable ST,KeyType key){
// int i;
// for(i=ST.length;ST.R[i].key!=key;--i)
// if(i<=0) break;
// return i;
//}
//查找3(循环条件为ST.R[i].key!=key和i>=1)
//int Search_Seq(SSTable ST,KeyType key){
// int i;
// for(i=ST.length;ST.R[i].key!=key&&i>=1;--i);
// return i;
//}
//查找4(0号位设置监视哨)
int Search_Seq(SSTable ST,KeyType key){
ST.R[0].key=key;
int i;
for(i=ST.length;ST.R[i].key!=key;--i);
return i;
}
int main(){
SSTable ST;
int key;
int a[]={5,7,19,21,13,56,64,92,88,80,75};
Init_SSTable(ST);
Create_SSTable(ST,a,11);
Show_SSTable(ST,11);
cout<<endl<<"请输入要查找的元素:";
cin>>key;
cout<<"该元素所在位置:"<<Search_Seq(ST,key);
return 1;
}
查找成功
查找失败