线性表总结

1. 代码段1简介:

按元素值查找LocateElement(L,e):该运算顺序查找第一个值域与相等的元素的逻辑序号(找到后返回一个大于0的值),若这样的元素不存在,则返回值为0。

1.1. 代码1

int LocateElem(SqList *L,ElemType)     //1
{                                                             //2
     int i=0;                                              //3
     while(i<L->length&&L->data[i]!=e)   //4
              i++;                                         //5
      if(i>=L->length)                               //6
              return0;                                   //7
      else                                                 //8
               return i+1;                              //9
}                                                            //10

1. 2. 不懂得地方

为什么第9行是返回·i+1,这里面是不是有数组的意思,逻辑序号是指data[0]这个值的逻辑序号是1吗?
我对代码的分析:
初始化 i 为0;应该是数组data[0]的意思吧;while里面的条件是让 i 小于链表L的长度,类似于i小于n的意思;还有个条件是链表里的值不等于e,应该是随着i的增加,链表指针往下跑一一与e相比较;所以一旦 i 的值大于链表长度后,符合return 0的条件,也就说明未找到与元素e相等的值域;若是因为找到与e相等的值域,就返回i+1。可是与e相等的不是data[i]吗,是说逻辑序号就往后加一位吗?

2. 代码段1简介:

删除数据元素ListDelete(&L,i,&e):该运算删除顺序表L的第 i (1<=i<=n)个元素。如果 i 值不正确,返回false;否则将线性表第 i 个元素以后的元素均向前移动了一个位置,并从元素a(i+1)开始移动起,这样覆盖了原来的第 i 个元素,达到了删除该元素的目的,最后顺序表的长度减1并返回ture。

2.1 代码1

bool ListDelete(SqList *&L,int i,ElemType &e)     //1
{                                                                            //2
        int j;                                                              //3
        if(i<1||i>L->length)                                        //4
              return false;                                            //5
        i--;                                                                 //6
        e=L->data[i];                                                 //7
        for(j=i;j<L->length-1;j++)                               //8
              L->data[j]=L->data[j+1];                          //9
         L->length--;                                                  //10
         return ture;                                                   //11
}                                                                            //12

2.2 自己不懂得地方

为什么第4行的 i 是小于1;而不是小于0;第一个不应该是data[0]吗?第6行为什么是i--?第7行是什么意思,要表示什么作用?
我对代码的分析:
如果 i 的值小于1,或者 i 的值大于链表的长度就返回false;如果输入正确的 i ,就进行删除,中间那段有些不懂,而for循环里面的就是使前一个值等于后一个值,使 i 后面的值往前移一位,然后成功删除后,长度减1;

posted @ 2019-03-25 22:55  方婷---  阅读(152)  评论(0编辑  收藏  举报