首页 > 编程笔记

顺序查找算法(C语言实现)

顺序查找法基本思路:对一组数据的遍历,这组数据是否排序并不重要,从第一个元素开始逐个与需要查找的元素进行比较,如果等于需要查找的元素,返回元素的下标i,工作结束,否则从下一个元素继续比较,直到查找到最后数据为止。

示例

利用顺序查找法编写下列示例。C语言编程代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX 50           /*最大数组容量*/
struct element          /*记录结构声明*/
{  int key;
};
typedef struct element record;
record data[MAX+1];
/*顺序查找*/
int seqsearch(int key)
{
    int pos;                 /*数组索引*/
    data[MAX].key=key;
    pos=0;                 /*从头开始找*/
    while(1)
    {
        if(key==data[pos].key)  /*是否找到*/
            break;
        pos++;                /*下一个元素*/
    }
    if(pos==MAX)            /*在最后*/
        return -1;
    else
        return pos;
}
/*主程序*/
int main()
{
    int checked[300];             /*检查数组*/
    int i,j,temp;
    srand(time(0));  /*使用时间初始随机数*/
    for(i=0;i<300;i++)
        checked[i]=0;                /*清除检查数组*/
    i=0;
    while(i!=MAX)                 /*生成数组值的循环*/
    {
        temp=rand() % 300;       /*随机数范围0~299*/
        if(checked[temp]==0)       /*是否是已有的值*/
        {
            data[i].key=temp;
            checked[temp]=1;       /*设置此值生成过*/
            i++;
        }
    }
    printf("随机产生的50个数据为:\n");
    for(j=0;j<i;j++)
        printf("%d  ",data[j]);
    printf("\n");
    while(1)
    {
        printf("\n请输入查找值 0-299(输入-1结束):");
        scanf("%d",&temp);       /*导入查找值*/
        if(temp!=-1)
        {
            i=seqsearch(temp);       /*调用顺序查找*/
            if(i!=-1)
                printf("找到查找值%d[第%d个]\n",temp,i+1);
            else
                printf("没有找到查找值%d\n",temp);
        }
        else
            exit(1);                     /*结束程序*/
    }
    return 0;
}
运行结果:

随机产生的50个数据为:
61  195  189  57  7  115  271  73  236  30  256  197  13  0  113  206  223  211  46  177  262  202  239  169  65  164  35  222  225  185  290  188  235  56  194  119  104  234  80  36  125  63  120  280  279  98  172  23  233  244

请输入查找值 0-299(输入-1结束):6
没有找到查找值6

请输入查找值 0-299(输入-1结束):271
找到查找值271[第7个]

请输入查找值 0-299(输入-1结束):0
找到查找值0[第14个]

请输入查找值 0-299(输入-1结束):-1

本例先使用随机函数,以时间为种子,生成了 50 个取值范围在 0~299 互不相同的一组随机整数。

第 40~45 行定义了 checked 数组,初始值为 0,temp 是生成的随机数。

我们以 temp 为下标,当 temp 第 1 次出现时,将以 temp 为下标的 checked 数组元素值设置为 1。

如果再次生成了 temp 值,检查相应的 checked 数组 temp 下标的值是否是 0,为 0 就说明 temp 是新数需要保存,为 1 就说明 temp 是已有数不用保存,需要重新产生一个值。

接下来调用顺序查找函数seqsearch(),根据用户输入值查找元素是否存在。查找方法是遍历数组,直到找到与用户输入值相等的元素,把该元素在数组中的下标返回给主函数。

优秀文章