• 顺序查找


    基本思想:

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

    方法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");
    }

    结果显示:

  • 相关阅读:
    学习自建调试体系(二)
    寻找未导出函数的函数地址
    Http
    git忽略.gitignore
    Flask-sqlacodegen
    liunx速查
    BBS论坛项目
    vim操作
    部署
    python3 环境搭建
  • 原文地址:https://www.cnblogs.com/kkdd-2013/p/3299747.html
Copyright © 2020-2023  润新知