zoukankan      html  css  js  c++  java
  • 顺序表查找

    在这里我们采用最简单的查找算法,就是顺序查找。

    主要工作:

    1、新建一个数据结构SeqList代表顺序表。

    2、确定线性表长度,元素内容,和查找元素,返回元素的位置。

    1、当我们新建一个C++控制台应用程序之后,默认的给出的初始代码如下:

    1 #include "stdafx.h"
    2 
    3 int _tmain(int argc, _TCHAR* argv[])
    4 {
    5     return 0;
    6 }

    那么这个#include "stdafx.h" #include "stdio.h" 是什么关系呢,我们看一下stdfx.h的定义内容:

    #pragma once
    #include "targetver.h"
    #include <stdio.h>
    #include <tchar.h>

    这样就明白了,stdfx.h里面包含了stdio.h,这个问题就不用纠结了。

    2、明确一下,我们顺序表中的元素数据类型都是int类型,所以要提前定义一下:

    #define ElemType int

    为了演示方便我们限定一下列表的最大长度为100,同样需要提前声明一下:

    #define    MAXSIZE  100

    3、顺序表的数据结构

    1 typedef  struct
    2 {
    3     ElemType  elem[MAXSIZE];  /*线性表占用的数组空间*/
    4     int       last;    /*记录线性表中最后一个元素在数组elem[ ]中的位置(下标值),从0开始,空表置为-1*/
    5 }SeqList;

    4、查找函数

     
     1 int  Locate(SeqList L, ElemType e)
     2 {    
     3     int i=0;        /*i为扫描计数器,初值为0,即从第一个元素开始比较*/
     4     while ((i<=L.last)&&(L.elem[i]!=e))        /*顺序扫描表,直到找到值为key的元素, 或扫描到表尾而没找到*/
     5         i++; 
     6     if  (i<=L.last)
     7         return(i+1);  /*若找到值为e的元素,则返回其序号*/
     8     else
     9         return(-1);  /*若没找到,则返回空序号*/
    10 }

    需要注意的是在这里我们如果查找到相关元素,返回的是它的位置,不是索引,所以是从1开始。

    5、完整代码

     
     1 // SqlList.cpp : 定义控制台应用程序的入口点。
     2 //
     3 
     4 #include "stdafx.h"
     5 
     6 #define ElemType int
     7 #define    MAXSIZE  100  
     8 
     9 typedef  struct
    10 { 
    11     ElemType  elem[MAXSIZE]; 
    12     int       last;  
    13 }SeqList;
    14 
    15 int  Locate(SeqList L, ElemType e)
    16 {    
    17     int i=0;        /*i为扫描计数器,初值为0,即从第一个元素开始比较*/
    18     while ((i<=L.last)&&(L.elem[i]!=e))        /*顺序扫描表,直到找到值为key的元素, 或扫描到表尾而没找到*/
    19         i++; 
    20     if  (i<=L.last)
    21         return(i+1);  /*若找到值为e的元素,则返回其序号*/
    22     else
    23         return(-1);  /*若没找到,则返回空序号*/
    24 }
    25 
    26 int _tmain(int argc, _TCHAR* argv[])
    27 {
    28     SeqList l;
    29     int p,q,r;
    30     int i;
    31     printf("请输入线性表的长度:");
    32     scanf("%d",&r);
    33     l.last = r-1;
    34     printf("请输入线性表的各元素值:\n");
    35     for(i=0; i<=l.last; i++)
    36     {
    37         scanf("%d",&l.elem[i]);
    38     }
    39     printf("请输入要查找的元素值:\n");
    40     scanf("%d",&q);
    41     p=Locate(l,q);
    42     if(p == -1)
    43         printf("在此线性表中没有该元素!\n");
    44     else
    45         printf("该元素在线性表中的位置为:%d\n",p);
    46     return 0;
    47 }

    image

  • 相关阅读:
    第一章:简介
    2018年10月底新公司
    第四章:集成
    第三章:如何建模服务
    第二章:演化架构师
    第一章:微服务
    4、工厂模式
    5、单例模式
    8、模板方法模式
    3、字典介绍
  • 原文地址:https://www.cnblogs.com/humaoxiao/p/3042627.html
Copyright © 2011-2022 走看看