1.实验所涉及的知识点
(1)顺序查找
(2)折半查找
2.程序源码
#include "stdafx.h"
#include<string.h> // 字符串函数头文件
#include<ctype.h> // 字符函数头文件
#include<malloc.h> // malloc()等
#include<limits.h> // INT_MAX等
#include<stdio.h> // 标准输入输出头文件,包括EOF(=^Z或F6),NULL等
#include<stdlib.h> // atoi(),exit()
#include<io.h> // eof()
#include<math.h> // 数学函数头文件,包括floor(),ceil(),abs()等
#include<sys/timeb.h> // ftime()
#include<stdarg.h> // 提供宏va_start,va_arg和va_end,用于存取变长参数表
// 函数结果状态代码。在教科书第页
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
// #define INFEASIBLE -1 没使用
// #define OVERFLOW -2 因为在math.h中已定义OVERFLOW的值为,故去掉此行
typedef int Status; // Status是函数的类型,其值是函数结果状态代码,如OK等
typedef int Boolean; // Boolean是布尔类型,其值是TRUE或FALSE,第、章用到
typedef int KeyType;
#define EQ(a,b) ((a)==(b))
#define LT(a,b) ((a)<(b))
#define LQ(a,b) ((a)<=(b))
typedef struct{
KeyType key;
}SElemType;
typedef struct{
SElemType *elem;
int length;
}SSTable;
Status Search_Seq(SSTable ST,KeyType key){
int i;
ST.elem[0].key = key;
for(i=ST.length; !EQ(ST.elem[i].key,key); --i);
return i;
}
Status Search_Bin(SSTable ST,KeyType key){
int low,mid,high;
low=1;high=ST.length;
while(low<=high){
mid=(low+high)/2;
if(EQ(key,ST.elem[mid].key))
return mid;
else if (LT(key,ST.elem[mid].key))
high=mid-1;
else
low=mid+1;
}
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
SSTable ST;
int i,num,mykeyname,flag;
int Search_Seq(SSTable ST,int mykeyname);
int Search_Bin(SSTable ST,int mykeyname);
printf("请输入表长:");
scanf_s("%d",&ST.length);
ST.elem=(SElemType*)malloc(sizeof(SElemType)*(ST.length));
printf("请输入表中每个元素:");
for(i=1;i<=ST.length-1;i++)
{
scanf_s("%d",&num);
ST.elem[i].key=num;
printf("%d ",ST.elem[i]);
}
printf("请输入所要查找的元素:");
scanf_s("%d",&mykeyname);
ST.elem[0].key=mykeyname;
flag=0;
flag=Search_Bin(ST,mykeyname);
if (flag)
printf("ok. position:%d",flag);
else
printf("not found");
system("pause");
return 0;
}