//修改好了,我用的VS2008,所以头文件用的是注释里边的。
//错误大概有三:头文件后边要有using namespace std;main函数要有返回值;
//建表函数的第一个参数应该是ST的引用,不能是新建的ST表。
#include
#include
#include
//#include
//#include
//#include "malloc.h"
using namespace std;
typedef struct//元素定义
{
int key;
}ElemType;
typedef struct{ //定义静态查找表类型
ElemType *elem;//表基址,elem[0]留空
int n; //表长
}SSTable;
void CreateTable(SSTable &ST, ElemType *A, int n)
{ //建立静态查找表
int i;
unsigned int Size;
Size = (n+1) * sizeof(ElemType); //分配空间字节数(因elem[0]留空,故需n+1个空间)
ST.elem = (ElemType *)malloc(Size);
ST.n = n;
for (i = 1; i <= n; i++)
ST.elem[i] = A[i-1];
}
int Search_Seq(SSTable ST, int k)
{ //顺序查找:在顺序表ST中找关键字为k的记录,若成功则返回记录位置,否则返回0
int j;
j = ST.n; //从表高端开始查找
ST.elem[0].key = k; //岗哨
while(ST.elem[j].key != k)
{
j--;
}
return j;
}
int Search_Bin(SSTable ST, int k)
{ //二分查找:在升序表ST中查找键值等于k的元素,若查找成功,返回该元素的位置号,否则返回0
int low, hig, mid;
low = 1; //低
hig = ST.n; //高
while(low <= hig)
{
mid = (low + hig) / 2;//MID
if(k == ST.elem[mid].key)
return mid;
else if(k < ST.elem [mid].key)
hig = mid - 1;
else
low = mid + 1;
}
return 0;
}
void ShowTable(SSTable ST)
{//显示表
int i, n;
n = ST.n;
printf("\n位置: ");
for (i = 1; i <= n; i++)
printf("%4d", i);
printf("\n元素: ");
for (i = 1; i <= n; i++)
printf("%4d", ST.elem[i]);
printf("\n表长: %4d\n", ST.n);
}
int main()
{
int k1,k2;
int i,i1,i2;
SSTable ST;
ElemType A[4];
int n=4; //表长为4
printf("输入表元素A[1..4]: ");
for(i=0;i
CreateTable(ST, A, n); //建立静态查找表ST
printf("关键字表: ");
ShowTable(ST);
printf("\n");
printf("输入查询的关键字k:");
scanf("%d",&k1);
i1 = Search_Seq(ST, k1);
printf("关键字为%2d的位置为%2d\n", k1, i1);
printf("输入查询的关键字k:");
scanf("%d",&k2);
i2 = Search_Bin(ST, k2);
printf("关键字为%2d的位置为%2d\n", k2, i2);
return 0;
}