线性表的链式存储


一,链表的定义与分类
二,单链表的插入删除
三,双向链表的插入与删除

一,链表的定义与分类

顺序存储表在进行操作的时候特别费时间
为了改变这一缺点,引入了链式存储

单链表:

单链表的逻辑次序和物理次序不一定一致 链表用一组任意的存储单元来放线性表的结点 存储单元可以连续也可非连续
每个线性链表的结点只有一个next指针域,所以为单链表

二,单链表的插入与删除

插入:
在带头结点的单链表L中第i个位置前插入一个元素的过程分为三部分

1,查找:
在单链表中找到第i-1个结点并由指针pre提示
2,申请:
申请新结点s,将数据域的值置为e
3,插入挂链:
通过修改指针域将新结点s挂入单链表L

主要代码如下:

s = (Node *) malloc(sizeof(Node))   /申请一个新结点/
s - > data = e 
s - >next = pre - > next  /修改指针,完成插入操作/
pre - > next = s

删除
比如要删除第i个结点,过程分为两步:

1,查找 通过计数方式找到第i-1个结点并由指针pre指示
2,删除 删除第i个结点并释放结点空间 主要

代码如下:
r = pre -> next
pre -> next= pre-> next -> next
free(r)


三,双向链表的插入与删除

为了让查找删除等操作的时间变得更短,引入了双向链表
每个结点不仅有后继指针,还有前驱指针,为某些运算提供了很大的便利
结构定义如下:

typedef struct DNode
{   ElemType data ;
    struct DNode * prior, *next;
}DNode , * DoubleList;

插入:

在这里插入图片描述

主要算法如下:
t->prior=p;
t->next=p->next;
p->next->prior=t;
p->next=t;

删除:

在这里插入图片描述

主要算法如下:
p->prior->next=p->next;  //p前驱结点的后链指向p的后继结点
p->next->prior=p->prior; //p后继节点的前链指向p的前驱结点
free(p) ;               //释放*p的空间
                        "前两行的语句可以颠倒"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值