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

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

 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值