实验目的:
① .顺序表的建立
② 顺序表的顺序查询
③ 顺序表的折半查找
实验步骤:
1. 结构体的建立
#include<STdio.h>
#include<math.h>
#include<STdlib.h>
#include<malloc.h>
#defineOK 1
#defineFALSE 0
#defineTRUE 1
#defineERROR 0
#defineINFEASIBLE -1
#defineOVERFLOw -2
typedefchar Elemtype;
typedefint status;
typedefint Keytype;
#defineMAXSIZE 100
typedefstruct
{
Elemtype STrings[10];
Keytype key;
}message;
typedefstruct
{
message elem[MAXSIZE];
int length;
}SSTable;
2. 函数的声明
statusInsert_Seq(SSTable &ST,int n)
{
int i;
ST.length=n;
for(i=1;i<=n;i++)
{
printf("输入第%d个元素的序号:",i);
scanf("%d",&ST.elem[i].key);
printf("输入第%d个元素:",i); //限制在十个字符以内
scanf("%s",&ST.elem[i].STrings);
}
return OK;
}
intSearch_Seq(SSTable ST,int key)
{
ST.elem[0].key=key;
int i;
for(i=ST.length;;i--)
{
printf("ST.elem[i].key的值%d\n",ST.elem[i].key);
if(ST.elem[i].key==key)
break;
}
printf("找到的值%d",i);
return i;
}
intSearch_Bin(SSTable ST,int key)
{
int low,high,mid;
low=1;
high=ST.length;
while(low<=high)
{
mid=(low+high)/2;
if(ST.elem[mid].key==key)
return mid;
else if(ST.elem[mid].key>key)
high=mid-1;
else
low=mid+1;
}
return 0;
}
3. 主函数的建立
int main(int argc, char* argv[])
{
SSTableST;
intsum,m;
printf("输入你想要的输入的长度为:\n");
scanf("%d",&sum);
printf("输入数据:\n");
Insert_Seq(ST,sum);
printf("<---------------------顺序查找------------------------------>\n");
printf("输入你想要输入的数据:");
scanf("%d",&m);
int n;
n=Search_Seq(ST,m);
if(n==0)
printf("没有与输入的数相符的数据\n");
else
{
printf("相同数据对应的名称为%d\n",n);
printf("数据对应的数据为:%s",ST.elem[n].STrings);
printf("\n");
}
printf("<---------------------折半查找------------------------------>\n");
int l;
printf("输入你想要查找的数据:");
scanf("%d",&l);
n=Search_Bin(ST,l);
if(n==0)
printf("没有与输入的数相符的数据\n");
else
{
printf("相同数据对应的名称为%d\n",n);
printf("数据对应的数据为:%s",ST.elem[n].STrings);
}
printf("\n<---------------------数据输出------------------------------>\n");
inti;
for(i=1;i<=ST.length;i++)
{
printf("第%d个元素:%d\n",i,ST.elem[i].key);
printf("输出第%d元素的数据:%s\n",i,ST.elem[i].STrings);
}
system("pause");
return0;
}