顺序表中在第i个数据元素位置上插入一个数据元素(修改)

来源:互联网 发布:天刀本地网络异常 编辑:程序博客网 时间:2024/05/22 06:30

 //在顺序表的第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;就可以将元素加到第一个位置上,

 

对于一般情况和在第一个位置上插入元素是一样的。

原创粉丝点击