该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
实在是恼火,现在运行又出问题,你帮我看看这个程序
#include
#include
#define MaxSize 100
#define IndexSize 20
typedef int KeyType;
typedef struct
{
KeyType key;
}DataType;
typedef struct
{
DataType list[MaxSize];
int length;
}SSTable;
typedef struct
{
KeyType maxkey;
int index;
}IndexTable[IndexSize];
int SeqSearch(SSTable S, DataType x)
{
int i = 0;
while(i < S.length && S.list[i].key != x.key)
i ++;
if(S.list[i].key == x.key)
return i + 1;
else
return 0;
}
int BinarySearch(SSTable S, DataType x)
{
int low, high, mid;
low = 0, high = S.length - 1;
while(low <= high)
{
mid = (low + high) / 2;
if(S.list[mid].key == x.key)
return mid + 1;
else if(S.list[mid].key < x.key)
low = mid + 1;
else if(S.list[mid].key > x.key)
high = mid - 1;
}
return 0;
}
int SeqIndexSearch(SSTable S, IndexTable T, int m, DataType x)
{
int i,j,b1;
for(i = 0; i < m; i ++)
if(T[i].maxkey >= x.key)
break;
if(i >= m)
return 0;
j = T[i].index;
if(i < m - 1)
b1 = T[i + 1].index - T[i].index;
else
b1 = S.length - T[i].index;
while(j < T[i].index + b1)
if(S.list[j].key == x.key)
return j + 1;
else
j ++;
return 0;
}
void main()
{
SSTable S1;
SSTable S2;
SSTable S3;
int i;
printf("请输入顺序表主表,输入结束请按#号键:");
for(i = 0; i < MaxSize; i ++)
{
scanf("%d", &S1.list[i].key);
if(S1.list[i].key == '#') break;
}
printf("\n请输入顺序表主表长度,输入结束请按#号键:");
scanf("%d", &S1.length);
printf("\n请输入折半查找主表:");
for(i = 0; i < MaxSize; i ++)
{
scanf("%d", &S2.list[i].key);
if(S2.list[i].key == '#') break;
}
printf("\n请输入折半查找表主表长度,输入结束请按#号键:");
scanf("%d", &S2.length);
printf("\n请输入索引顺序表主表:");
for(i = 0; i < MaxSize; i ++)
{
scanf("%d", &S3.list[i].key);
if(S3.list[i].key == '#') break;
}
printf("\n请输入索引顺序表主表长度:");
scanf("%d", &S3.length);
IndexTable T;
DataType x;
printf("\n请输入关键字:");
scanf("%d", &x.key);
int pos1, pos2, pos3;
if((pos1 = SeqSearch(S1, x)) != 0)
printf("顺序表的查找: 关键字%d在主表中的位置是: %2d\n", x, pos1);
else
printf("查找失败\n");
if((pos2 = BinarySearch(S2, x)) != 0)
printf("折半查找: 关键字%d在主表中的位置是: %2d\n", x, pos2);
else
printf("查找失败\n"); if((pos3 = SeqIndexSearch(S3, T, 4, x)) != 0)
printf("索引顺序表的查找: 关键字%d在主表中的位置是: %2d\n", x, pos3);
else
printf("查找失败\n");
}