顺序表插入元素的移动次数

问题描述:

顺序表插入元素的移动次数
顺序表的移动次数很让人困惑,
i是数组下标,假如有一个长度为10的数组,现在第5个位置插入一个元素s,那么第5个位置的下标应该是4,那么向后移动的次数因该是10-4=6;但是,为什么会是n-i+1(也就是10-4+1,但和实际不符合啊!);

理解的关键是“插入”的意思,“插入”实际上不是在数据结点之间置入一个数据,而是在原来结点之上更新一个数据.
做个比喻.玩过玻璃珠跳棋吧,在棋盘里面连续的2个玻璃珠,你能插入一个玻璃珠吗?不能,只能把原来的后移一个.
实际上最能明白的是,一共多少数据,总数-不动的=移动的.你对照这个等式去看就明白了.我主要是不理解这个公式n-i+1;我始终都看到是n-i;假如n=5 ,表示有5个元素,要在第3个元素插入100,移动的是2个元素吧=5-3+1。5表示 的元素个数,不是数组下标。这里可以完全不去管下标,就是一个数个数的数学问题。那我们要查找啊!查找不是下标吗!在第三个元素位置,下标不是2吗!你如果按数个数算。查找也是3,但是这个3在程序里面一般都是用a[2]来体现,我们在程序里面一般都是n来表示这个2,因为是从0开始的。关键问题,你要理解n是什么意思。n-i+1只是一种计算公式,你可以把n-i看成没任何实际意义。实际上的计算过程是n-(i-1)=n-i+1。n表示总个数,i-1表示不动的数。那i呢,是什么意思啊!如果i是个数,那算法该如何设计,但我看到的算法是i是下标,如果i是下标,那么 第三个位置i=2;n 代表元素个数的总数,那么应该是n-i就可以了!i表示第几个开始移动,也就是表示i-1不会移动。如果一道应用题:小明班上10个同学站一竖排,新来了一个同学站原来同学第3号的位置,要移动的同学个数是多少?你把这题的n,i,i-1分清楚就明白了。