数据结构中有关顺序表的问题:为何判断插入位置是否合法时if语句中用length+1,而移动元素的for语句中只用length?

bool ListInsert(SqList &L,int i, ElemType e){
    if(i<1||i>L.length+1)    //判断i的范围是否有效
        return false;
    if(L.length>=MaxSize)    //当前存储空间已满,不能插入
        return false;
    for(int j=L.length;j>=i;j--)    //将第i个元素及之后的元素后移
        L.data[j] = L.data[j-1];
    L.data[i-1] = e;
    L.length++;
    return true;
}

 

 

(有关顺序表)

第一个问题回答:

  1.首先明确length的含义?

  ——length表示当前表中拥有元素的个数,也就是顺序表的表长

  2.为什么if语句中用length+1

  ——要判断当前插入的 i 的位置是否合法,也就是必须存在可以包含 i  这个位置的表长(在确定数组长度是可以包含的之后,是表长不是数组长度),在其中很容易理解(因为数数是从1开始,顺序表中的也是从 1 开始数数)所以不能输入 i 小于 1。如果我们不是限定为  i>L.length+1 而是限定为  i>L.length+2 ,此时我们就会发现(当给表中添加一个新的元素后的表的长度只增加 1 ,而我们规定判别i>L.length+2,就会导致表中在1到 i>L.length+2 中出现一个断空,从而违背了顺序表的定义(一组地址连续的存储单元逻辑上相邻的两个元素的物理位置上也相邻),而如果我们是规定i>L.length时我们就会将最后一个元素丢失。

 

 

第二个问题回答:

  在for循环中时,此时我们就要考虑数组下标和位序的关系了。虽然for循环中定义 j=L.length,但是它映射到数组时候对应为数量的L.length+1(注:数组的开始下标为0)

 

posted @ 2020-07-15 10:51  我不叫庄子  阅读(4355)  评论(0编辑  收藏  举报