顺序查找

基本思想:

      用所给关键字与线性表中各个数据进行逐一比较,直到成功或失败。

方法1:对查找数组中的某元素(逐一比较)

#include<stdio.h>
#include<time.h>
#include<stdlib.h>

#define max_len 20
#define N 6

int SearchFun(int a[],int n,int x) //在给定长度的数组中查找数据元素x
{
    int i,f=-1;
    for(i=0;i<n;i++)
    {
        if(x==a[i])
        {
            f=i;
            break;
        }
    }
    return f;
}

void main()
{
    int i;
    int k;   //定义变量为要查找的元素
    int res; //定义变量为查找函数的返回值
    int shuzu[N];

    srand(time(NULL));  //随机种子
    for(i=0;i<N;i++)
    {
        shuzu[i]=rand()%(1000-100)+100;
    }
    printf("数组序列为:
");
    for(i=0;i<N;i++)
    {
        printf("%d ",shuzu[i]);
    }
    printf("

");
    printf("输入要查找的元素:");
    scanf("%d",&k);
    res=SearchFun(shuzu,N,k);
    if(res<0)
        printf("该元素不存在!
");
    else
        printf("该元素在表中的位置为:第%d个!
",res+1);

    printf("
");
    system("pause");
}

结果显示:

方法2(针对顺序表):

      这里主要按照关键字进行查找

      从表中的最后一个记录开始,逐个比较记录中的关键字与给定关键字。若查找成功,函数返回该元素所在表中的位置

#include<stdio.h>
#include<stdlib.h>

#define max_len 20

typedef struct
{
    int key;
    char data;
}Record;

typedef struct
{
    Record r[max_len+1]; //令r[0]存放待查数据元素
    int length;
}seqTable;

int SeqSearch(seqTable st,int k)
{
    int i;
    st.r[0].key=k;
    i=st.length;
    while(st.r[i].key!=k)
        i--;
    return i;
}

void main()
{
    seqTable st;
    int i;
    int len;//定义变量为待查表的长度
    int ch; //定义变量为记录关键字
    int k;  //定义变量为要查找的元素
    int res;//定义变量为查找函数的返回值
    printf("输入所查表的长度:");
    scanf("%d",&len);
    st.length=len;
    printf("输入查找表的%d个记录的关键字值(用空格隔开):
",len);
    for(i=1;i<=len;i++)
    {
        scanf("%d",&ch);
        st.r[i].key=ch;
    }
    printf("输入要查找的元素:");
    scanf("%d",&k);
    res=SeqSearch(st,k);
    if(res==0)
        printf("该元素不存在!
");
    else
        printf("该元素在表中的位置为:第%d个!
",res);

    printf("
");
    system("pause");
}

结果显示:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

#define max_len 100

typedef struct
{
    char key[10];
    char name[20];
    int age;
}Record;

typedef struct
{
    Record r[max_len+1]; //令r[0]存放待查数据元素
    int length;
}seqTable;

void STInit(seqTable *st)   //初始化顺序表
{
    st->length=0;
}

int STLength(seqTable st)   //返回顺序表的元素个数
{
    return(st.length);
}

int STAdd(seqTable *st,Record data)   //添加元素到顺序表的尾部
{
    if(st->length>=max_len)
    {
        printf("顺序表已满,不能再添加结点了!
");
        return 0;
    }
    st->r[++st->length]=data;
    return 1;
}

Record *STFindByNum(seqTable *st,int n)      //根据序号查询节点,返回数据元素
{
    if((n<1)||(n>st->length+1))
    {
        printf("节点序号错误,不能返回节点!
");
        return NULL;
    }
    return &(st->r[n]);
}

int STFindByKey(seqTable *st,char *k)  //按照关键字查询节点
{
    int i;
    for(i=1;i<=st->length;i++)
    {
        if(strcmp(st->r[i].key,k)==0)
        {
            return i;
        }
    }
    return 0;
}

int STPrint(seqTable st)   //显示顺序表中的所有节点
{
    int i;
    for(i=1;i<=st.length;i++)
    {
        printf("(%s,%s,%d)
",st.r[i].key,st.r[i].name,st.r[i].age);
    }
    return 0;
}

void main()
{
    int i;
    seqTable st; //定义变量顺序表
    Record data; //定义变量为保存数据类型
    Record *pdata;//定义节点保存指针变量

    char kk[10];  //定义变量为查询关键字
    int res; 


    printf("顺序表操作演示开始!
");

    STInit(&st);//初始化顺序表
    printf("顺序表初始化完成!
");

    do
    {
        printf("输入添加的节点数据(学号 姓名 年龄):");
        fflush(stdin); //清空输入缓冲区
        scanf("%s%s%d",&data.key,&data.name,&data.age);

        if(data.age!=0)  //若年龄不为0
        {
            if(!STAdd(&st,data))  //若节点添加失败
            {
                break;  //退出死循环
            }
        }
        else
        {
            break;  //退出死循环
        }
    }
    while(1);

    printf("
顺序表中的节点顺序为:
");
    STPrint(st);               //显示顺序表节点数据

    fflush(stdin); //清空输入缓冲区

    /* 按节点序号查询  */    
    printf("
要查询的节点序号:");
    scanf("%d",&i);
    pdata=STFindByNum(&st,i);
    if(pdata)
    {
        printf("
第%d个节点为:(%s,%s,%d)
",i,pdata->key,pdata->name,pdata->age);
    }

    fflush(stdin); //清空输入缓冲区

    /* 按关键字查询 */
    printf("
输入要查询的关键字:");
    scanf("%s",&kk);
    res=STFindByKey(&st,kk);
    if(res==0)
        printf("
该记录不存在!
");
    else
        printf("
该记录在顺序表中的位置为:第%d个
",res);
    printf("
");
    system("pause");
}

结果显示:

原文地址:https://www.cnblogs.com/kkdd-2013/p/3299747.html