首页 > 技术文章 > 数据结构线性表2----查找算法

zulkar 2019-06-02 11:53 原文

今天呢,我来说一说顺序存储结构的,查找,插入,删除操作。

首先我们先回顾一下昨天的顺序存储结构的结构体的定义

#define MaxSize 100
typedef struct
{
    int  data[MaxSize];
    int  Length;
}Sqlist;

1.查找算法(在顺序表中查找第一个值等于e的元素)

其实看过上一个博客的我们都知道,顺序表可以理解为就是数组,那数组中怎么查找呢?

不就是用数组的下标嘛!

硬货来了哈!

#define Status int
Status findElem(Sqlist L, int e)
{
     int i;
     for(i=0;i<L.Length;++i)
     {
          if(e==L.data[i])
           {
                return i;        //若找到返回下标
            }
      }
      return -1;              //没有找到,返回-1,表示无
}
     

接下来我给小萌新们讲解讲解,你们的第一个疑惑点,很多时候你们一上来看到的是这个

Status findElem(Sqlist L, int e);

有的同学就迷惑了,Status 是什么 对不对,而且书上是没有这句的 #define Status int,所以加上了之后是不是就大概懂了

是什么意思呢,实际上你可以理解为Status 就是函数的返回类型,我在上面定义为 int类型,其实还可以是是void,cahr,等等。

第二个疑惑点(不如称为注意点)

for(i=0;i<L.Length;++i)   和   for(i=0;i<L.Length;i++)   二者的区别大家能分清吗?

++i:先自增在引用,什么意思呢,在第for循环中,第一次判断的时候i=1,不再是0,(因为++i,先自增,再把值传给函数引用)

i++:先引用再自增,所以在第一次循环判断的时候i=0;第二次i才等于1;

那接下来就是萌新们的第三个疑惑点,数组的下标不是从0开始的嘛,让i先自增再引用,取不到第一个数组元素啊

所以这个大家要转换一下自己的思维,C语言的下标是0开始的,但是数据结构是军师级别的东西,所以第一个元素就是第一个

,与就是说数据结构里的下标是从1开始的,又到了 No pic say a J8 环节了!

for(i=0;i<L.Length;++i)             //大家有没有发现其实i是有范围的
                                    //1<=i<=Lentg
     {                              //也就是说现在数组中有5个元素,你不能取查找第99个元素,你也不能取查找第-1个元素
                                    //那都是没有意义的
          if(e==L.data[i-1])      
                                    //这里就是循环查找
           {                        //当e=data[i-1]时就返回那个位置i
                                   
                return i;              

            }                  
                                  
      }                          

啊,说了半天才说了一个 查找操作啊。

插入和删除只能时下此讲解咯!

 

推荐阅读