/****************
顺序表的查找
*****************/
#include<stdio.h>
#include<stdlib.h>
typedef struct
{
int *elem;
int length;
}SSTable;
void Initial_Seq(SSTable *ST)
{
int i;
printf("请输入表的长度:");
scanf("%d",&(ST->length));
ST->elem = (int *)malloc(sizeof(int)*(ST->length+1));
printf("输入表中数据:");
for(i = 1; i <= ST->length; i++)
{
scanf("%d",ST->elem+i);
}
}
int Search_Seq(SSTable ST, int key)
{
int i;
ST.elem[0] = key;
for(i = ST.length; ST.elem[i] != key; --i);
return i;
}
int main()
{
int x;
SSTable s;
Initial_Seq(&s);
printf("输入要查找的元素:");
scanf("%d",&x);
if(Search_Seq(s,x))
printf("查找成功!");
else
printf("查找失败!/n");
return 0;
}
/*******************
算法说明: 顺序查找(Sequential Search)的查找过程:从表中最后一个记录开始,逐个
进行记录的关键字和给定值的比较,若某个记录的关键字和给定值比较相等,则查找成功,
找到所查记录,反之,若直至第一个记录,其关键字和给定值比较都不相等,则表明表中没
有所查记录,查找不成功
对于一个长度为n的查找表来说,应用顺序表进行查找,则需要分配(n+1)*sizeof(int)
个空间,因为顺序表的第一个元素,即elem[0]中存放的是要查找的元素key.这样做的目的
是不需要时刻判断是否遍历完表.由于在elem[0]中存放了key.因此在表中是一定能找到
key这个元素的,只不过看位置上的区别.如果位置不等于0,则说明表中存在该元素,如果
位置为0,则说明表中原本是没有key这个元素的.因此,通过返回找到元素的位置就能判断
是否找到该元素了.
*********************/