在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
芯片精品文章合集(500篇!)    创芯人才网--重磅上线啦!
查看: 1800|回复: 3

[资料] 单链表的插入和删除

[复制链接]
发表于 2016-3-16 16:17:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x

在单链表中,又如何实现“插入”和“删除”操作呢?

假设我们要在线性表的两个数据元素ab之间插入一个数据元素x,已知p为其单链表存储结构中指向结点a的指针。

为插入数据元素x,首先要生成一个数据域为x的结点,然后插入在单链表中,根据插入操作的逻辑定义,还需要修改结点a中的指针域,令其指向结点x,而结点x中的指针域应指向结点b,从而实现3个元素abx之间逻辑关系的变化。插入后的单链表所示。假设s为指向结点x的指针,则上述指针修改用语句描述即为

s->next=p->nextp->next=s

反之,在线性表中删除元素b时,为在单链表中实现元素abc之间逻辑关系的变化,仅修改结点a中的指针域即可。假设p为指向结点a的指针,则修改指针的语句为

p->next= p->next->next

可见,在一直链表中元素插入或删除的确切位置的情况下,在单链表中插入或删除一个结点时,仅需修改指针而不需要移动元素。

Status ListInsert_L(LinkList &L,inti,ElemType e){

//在带头结点的单链线性表L中第i个位置之前插入元素e

p=Lj=0

while(p&&j<i-1){p=p->next;++j}//寻找第i-1个结点

if(!p||j>i-1)return ERROR;           //i小于1或者大于表长+1

s=(LinkList)malloc(sizeof(LNode));//生成新结点

s->data=e;s->next=p->next;          //插入L

p->next=s;

return OK;

}//ListInsert_L

void ListDelete_L(LinkList &L,inti,ElemType &e){

//在带头结点的单链线性表L中,删除第i个元素,并用e返回其值

p=L;j=0;

while (p->next&&j<i-1){//寻找第i个结点,并令p指向其前驱

p=p->next;++j;

}

if(!(p->next||j>i-1)return ERROR;//删除位置不合理

q=p->next;p->next=q->next;  //删除并释放结点

e=q->data;free(q);

return OK;

}//ListDelete_L

凌阳教育,全国唯一一家原厂式嵌入式培训机构,专业从事嵌入式人才培训13年,最近新开课程信息安全工程师培训,想了解更多嵌入式资料下载或者是凌阳教育的动态,请访问凌阳教育官网www.sunplusedu.com


发表于 2016-3-19 12:23:27 | 显示全部楼层
谢谢分享!
发表于 2016-3-19 12:44:09 | 显示全部楼层
谢谢分享!
发表于 2018-12-20 19:52:10 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-6-12 04:12 , Processed in 0.020335 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表