凌阳教育的个人空间 https://blog.eetop.cn/204849 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

单链表的插入和删除

已有 528 次阅读| 2016-3-16 16:10

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

假设我们要在线性表的两个数据元素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,int i,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,int i,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


点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 1

    粉丝
  • 0

    好友
  • 1

    获赞
  • 3

    评论
  • 3815

    访问数
关闭

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

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

GMT+8, 2024-3-29 09:28 , Processed in 0.013272 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部