(二)1.2_顺序表的插入与删除

一.顺序表的插入元素到指定位置

1.思路分析
  从指定位置,把往后所有元素(包括指定位置的元素)的位置都向后移动一个位置,注意要从最后一个元素开始移动,从后向前遍历,依次移动元素,直到遍历到指定位置元素,并把它移动,移动操作完成后,再把指定位置赋值为你要插入的元素

2.代码实现

//顺序表指定位置插入元素,参数:顺序表指针,插入元素,插入位置 
void  InsertElem(SqList *L1,ElemType elem,int pos)
{   
    //从顺序表的末尾向前遍历,元素依次往后挪,直到移动到指定位置的元素 
    for(ElemType* p=(L1->elem+L1->length);p>L1->elem+pos-1;--p)
    { 
       *p=*(p-1);  //将元素前一个位置的元素赋值给该位置就是相当于元素往后挪 
	}
	L1->elem[pos-1]=elem; //指定位置赋值你要插入的数 
	++(L1->length);       //顺序表元素数量加1 
} 

二.顺序表的删除指定位置元素

1.思路分析
  从指定位置,把往后所有元素(不包括指定位置的元素)的位置都向前移动一个位置,注意这里是从指定位置向后遍历,依次把元素往前挪,直到遍历到末尾最后一个元素,并把它移动,移动操作完成则删除操作完成.

2.代码实现

//顺序表删除指定位置的元素,参数:顺序表指针,删除位置 
void  DeleteElem(SqList *L1,int pos)
{  
	//从指定位置往后遍历到末尾,元素依次往前挪 
    for(ElemType* p=(L1->elem+pos-1);p<(L1->elem+L1->length-1);p++)
    {   
       *p=*(p+1);   //将元素后一个位置的元素赋值给该位置就是相当于元素往前挪
	}		
	L1->length--;   //顺序表元素数量减1  
} 
//实际上顺序表中的元素并没有减少,只是顺序表指定位置的元素被覆盖了而已,而现顺序表的末尾的
//后一个位置(L1[L1->length])的元素就是原顺序表末尾的元素,不过没关系,下次存储元素的时候会把
//它覆盖了

三.总结
  这里顺序表的插入与删除操作大同小异,都是移动元素的位置,但是要注意:实际上移动元素的位置是通过元素赋值,改变顺序表上原位置的元素的值来实现元素位置的改变,并不是顺序表的单元的物理位置发生了的移动,而是单元存储的元素的值发生了改变
  举个例子:上述顺序表的移动操作就好比在班级里换位置,本来你坐在第一排的位置,后来你被班主任安排移动到第二排.但是移动只是你人移动过去了,你人坐到了第二排的位置,而你原来所坐的椅子和桌子并没有移动,原来的椅子和桌子还在第一排.

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值