线性数据结构

线性结构:

顺序存储结构:数组。 需要先开辟内存。连续地址,读取方便,插入删掉复杂。

链式存储结构: 单链表、静态链表、循环链表、双向链表

                     单链表:地址随机,可能不连续。插入删除方便,读取不方便。单向的,头结点开始,依次指向后继元素。指向为空时,到达尾部

                           

组成头结点,指向下一个的地址中间元素,指向下个地址中间元素,指向下个地址尾结点,指向空
datanull234

address
x0x1x2x3
pointer234null

 

               静态链表:静态列表是数组形式的一种伪装。初始给定足够的数组空间。每个空间中,包含,数据data,自己的数组下标index,和指向下一位置的游标cur。游标存放的是数组的下标。删除,插入操作时,更新游标,以完成目的。

                               规则:头结点游标 始终指向第一个空闲空间。 尾结点游标始终指向第一个有值的空间。 最后一个有值空间,游标指向头结点。删除插入操作后,要更新游标指向,数组内容顺序不变

datanullnullnullnullnullnullnull
index0123456
cur1234560
加入一条数据操作之后状态
datanullanullnullnullnullnull
index0123456
cur2034561
加入3条数据操作之后状态
datanullabcnullnullnull
index0123456
cur4230561
在第2条数据前面插入1条数据操作之后状态 顺序 a d b c(0,1,4,2,3,5,6)
datanullabcdnullnull
index0123456
cur5430261
删除第1条数据之后状态  实际顺序为:d b c (0,4,2,3,1,5,6)   
datanullnullbcdnullnull
index0123456
cur1530264

                     循环列表:循环列表就是把单向列表的未指针,指向了头元素。形成闭合的循环。用数组模拟如下:

datanullabcd
point (指向目标节点的地址) abcdnull
address selfx0x1x2x3x4

                 双向链表:双向链表就是把每个元素中,存放指向后续元素的指针,和上一个元素的指针。构成双向循环。数组模拟如下:

 

datanullabcde
point (指向next目标节点的地址)abcdenull
address selfx0x1x2x3x4x5
point(指向last目标节点的地址)enullabcd

对于链表的插入和删除操作:

       单链表,只需将指向被删除元素的节点,修改为被删除元素指向的节点即可。同时,要释放被删除元素占用的内存:数组模拟,删除b元素 "()"内为注释,删除前状态

datanullanull(b)cd
point (指向目标节点的元素)ac(b)null(c)dnull
address selfx0x1null(x2)x3x4

      双向链表,将指向被删除元素的节点,修改为被删除元素指向的节点。将被删除元素指向的元素的指向上一个元素的节点,修改为被删除元素的指向上一个元素的节点。被删除元素的向前向后节点,置空,然后释放该元素。 数组模拟,删除b元素 "()"内为注释,删除前状态

datanullanull(b)cde
point (指向next目标节点的地址)ac (b)null(c)denull
address selfx0x1null(x2)x3x4x5
point(指向last目标节点的地址)enullnull(a)a (b)cd

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值