区别顺序表的位序和数组下标。为何在插入操作中判断插入位置是否合法时 if语句中用length+1,而移动元素的for语句只用length?

557 阅读2分钟

书.jpg 注意:为何在插入操作中判断插入位置是否合法时 if语句中用length+1, 而移动元素的for语句只用length?

第一问: 答:首先我们要做的是,给已有的顺序表L(长度为length,已有length个元素),在第i位插入e元素,让他变长变强。那我们有多少种插法?看下图位序示意。我可以让他排头,也可以让他直接排到队伍末尾。排头就是在1位插,末尾就直接接上去就完事了,也就是让他直接成为length+1位的那个人。所以,我的e,可以站在1,2,3..一直到length+1 都可以。直接导出 i的区间是 [1 , length+1] ,所以不能超,也就是1到负无穷不包括1,length+1到正无穷不包括length+1。

第二问: 答:其实本质就是大家看电影位置都做好了,你说vip来了,给串个座位,所以从vip选择那个座位开始的人,都往后串一个位。for循环就是在做这个。因为data是数组,所以他下标从0开始,现在原来的数组,是从0到length-1都有人,那么我需要让length-1那个人去length往后坐,所以data[length] = data[length -1] , j直接从最后的空位置length开始,一直到串到i-1去了i,也就是data[i] = data[i-1],所以j最小等于i。即闭区间[ i,length ]

笔.jpg

(图里有另一种想法,就是 j> i-1 ,这样理解是因为我可以想要做几次赋值操作,我肯定要从数组最后那个人length-1开始给他换座位,一直换到i-1为止,以为我底下赋值用的data[j] = data[j-1] 所以等于i的时候,i-1被挪走了,所以j只能最小等于i,也就大于i-1)