思想 在表的一端设置一个称为“监视哨”的附加单元,存放要查找元素的关键字。从表的另一端开始查找如果在“监视哨”找到元素的关键字,返回查找失败信息,否则返回下标。(表可以理解为一个数组)
a.设置监视哨的顺序查找
#include<stdio.h>
int main()
{
int i,n;
int a[10];
int x;//x为要查找的元素
scanf("%d",&n);
for (i=1; i<=n; i++)
scanf("%d",&a[i]);
scanf("%d",&x);
a[0]=x;//设a[0]为哨兵
while(a[n]!=x)
{
n--;
}
/*设置哨兵 查找元素从高往低处查找
如果表中有数据就直接结束循环
如果没有查找会进行到 a[0] 查到哨兵位就结束循环*/
if(n==0)
printf("表中没有%d\n",x);
else
printf("%d在位置%d\n",x,n);
}
b.一般查找
#include<stdio.h>
int main()
{
int i,n;
int x;//要查找的元素
int a[10];
int flag=0;//查找元素标记位
/*flag值为1 代表找到元素*/
scanf("%d",&n);
for (i=0; i<n; i++)
scanf("%d",&a[i]);
scanf("%d",&x);
i=n-1;
//一般查找要防止数组越界在这 i>=0就是用来限制不要超出范围
while(i>=0)
{
if(a[i]==x)
{
flag=1;
break;
}
i--;
}
if(flag)
printf("%d在表中位置为%d\n",x,i+1);
else
printf("没有找到%d\n",x);
return 0;
}
总结:一般查找中循环控制条件,用以判断查找过程是否越界。加上监视哨可以省去这个条件,从而提高程序查找效率。