zoukankan      html  css  js  c++  java
  • 数据结构和算法系列9 五大查找之顺序查找

    从这一篇开始要介绍算法中的查找技术了。查找在我们生活中无处不在,比如查公交,查机票,查酒店。。。这些都是查找。

    首先来看一下查找技术的分类。如下图:

    ds34

    那么这篇要总结的是顺序表中的顺序查找技术。

    什么是顺序查找呢?顺序查找的原理很简单,就是遍历整个列表,逐个进行记录的关键字与给定值比较,若某个记录的关键字和给定值相等,则查找成功,找到所查的记录。如果直到最后一个记录,其关键字和给定值比较都不等时,则表中没有所查的记录,查找失败。

    下面是顺序查找的算法实现代码。

    C#版:

    namespace SequenceSearch.CSharp
    {
        class Program
        {
            static void Main(string[] args)
            {
                List<int> list = new List<int> { 50, 10, 90, 30, 70, 40, 80, 60, 20 };
                
                Console.WriteLine("********************顺序查找********************
    ");
                Display(list);
                int result = SequenceSearch(list, 30);
                if (result != -1) Console.WriteLine("30在列表中的位置是:{0}", result);
                else Console.WriteLine("对不起,列表中不存在该元素!");
                
                Console.ReadKey();
            }
    
            /// <summary>
            /// 顺序查找
            /// </summary>
            /// <param name="list">待查列表</param>
            /// <param name="key">关键字</param>
            /// <returns>返回关键字在列表中的位置</returns>
            public static int SequenceSearch(List<int> list, int key)
            {
                //遍历查找列表
                for (int i = 0; i < list.Count; i++)
                {
                    //找到该记录,返回位置序号
                    if (list[i] == key) return i;
                }
                
                //没有找到
                return -1;
            }
    
            private static void Display(IList<int> list)
            {
                Console.WriteLine("
    **********展示结果**********
    ");
    
                if (list != null && list.Count > 0)
                {
                    foreach (var item in list)
                    {
                        Console.Write("{0} ", item);
                    }
                }
                Console.WriteLine("
    **********展示完毕**********
    ");
            }
        }
    }

    程序运行结果如图:

    ds32

    C语言版:

    /*包含头文件*/
    #include "stdio.h"
    #include "stdlib.h"   
    #include "io.h"
    #include "math.h" 
    #include "time.h"
    
    #define OK 1
    #define ERROR 0
    #define TRUE 1
    #define FALSE 0
    #define MAXSIZE 20
    
    typedef int Status; 
    typedef struct
    {
        int data[MAXSIZE];
        int length;    
    }SeqList;
    
    /*顺序查找算法*/
    int SequenceSearch(SeqList *seqList,int key)
    {
        int i;
    
        //遍历顺序表
        for (i=0;i<seqList->length;i++)
        {
            //找到该元素
            if (seqList->data[i]==key) return i;
        }
    
        //没有找到
        return -1;
    }
    
    
    /*打印结果*/
    void Display(SeqList *seqList)
    {
        int i;
        printf("
    **********展示结果**********
    ");
    
        for (i=0;i<seqList->length;i++)
        {
            printf("%d ",seqList->data[i]);
        }
    
        printf("
    **********展示完毕**********
    ");
    }
    
    #define N 9
    void main()
    {
        int i,j;
        SeqList seqList;
    
        //定义数组和初始化SeqList
        int d[N]={50,10,90,30,70,40,80,60,20};
    
        for (i=0;i<N;i++)
        {
            seqList.data[i]=d[i];
        }
        seqList.length=N;
    
        printf("***************顺序查找***************
    ");
        Display(&seqList);
        j=SequenceSearch(&seqList,70);
        if (j!=-1) printf("70在列表中的位置是:%d
    ",j);
        else printf("对不起,没有找到该元素!");
    
        getchar();
    }

    程序运行结果:

    ds33

  • 相关阅读:
    VUE动态组件component以及<keep-alive>
    git flow工作流
    vue组件通讯
    webpack加载器和自动打包工具
    webpack的插件使用,以及引入vue文件的注意事项
    webpack起步以及手动配置config文件
    git 基本操作
    C++中静态成员变量的可以在类内初始化吗?
    python 环境变量设置PYTHONPATH
    vector中resize和reserve的区别
  • 原文地址:https://www.cnblogs.com/mcgrady/p/3266065.html
Copyright © 2011-2022 走看看