{数据结构}顺序查找

/****************

顺序表的查找 

*****************/

#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这个元素的.因此,通过返回找到元素的位置就能判断

是否找到该元素了. 

*********************/

你可能感兴趣的:({数据结构}顺序查找)