//在顺序表的第i个数据元素位置插入一个数据元素
public void Insert(T item, int i)
{
if (IsFull())
{
Console.WriteLine("List is full");
return;
}
else if(i<1||i>last+2)
{
Console.WriteLine("Position is erro");
return;
}
else if (i == last + 2) //可以看到这里是把i=last+2单独拿出来考虑的
{
data[++last] = item;
}
else
{
for (int j = last; j >= i-1; j--)
{
data[j + 1] = data[j];
}
data[i - 1] = item;
}
last++;
}
其实把i=last+2单独拿出来是没有必要的,可以将上面的代码修改为下面情况.
public void Insert(T item, int i)
{
if (IsFull())
{
Console.WriteLine("List is full");
return;
}
else if(i<1||i>last+2)
{
Console.WriteLine("Position is erro");
return;
}
else
{
for (int j = last + 1; j >i-1; j--)
{
data[j] = data[j-1];
}
data[i-1] = item;
last++;
}
}
在这个函数中对于在最后插入一个元素的情况,即i=last+2时,进入最后的else循环可以得到此时,j=last+1、i-1=last+1所以程序不会进入for循环,直接执行
data[i-1] = item;
last++;
可以得出是在顺序表的末尾直接加入了这个元素
对于在第一个位置加入元素,即i=1时,有for可以看出,顺序表的所有元素都依次从后往前,向后移动了一个位子,即原来下标为last的元素移动到下标为last+1的位置上,依次下去,最后原下标为0的元素移到下标为1的位置上,这是j=0 不大于0(即i-1),推出循环,执行 data[i-1] = item;就可以将元素加到第一个位置上,
对于一般情况和在第一个位置上插入元素是一样的。