数据结构之链表---单向链表

逻辑结构:

集合结构:所有数字可以看做一个整体

线性结构:一条有顺序的线把所有的数字串起来

树状结构:所有数字都是从一个数字开始向一个方向扩展出来的

网状结构:任何两个数字之间都有直接的联系,不同数字之间联系互相无关

物理存储结构:

1.顺序存储:内存空间开辟是连续
   例如数组,内存空间连续开辟,数据元素类型相同
2.链式存储:通过地址将数据元素联系在一起
3.索引存储:通过索引表找到数据元素存放位置,拿到数据
                     存在两个表格--》索引表  和  数据表
4.散列存储结构  (哈希存储):数据元素的存放和位置之间,存在一个关系,有一个关键key值,通过key值带入存在的关系函数,可以得到数据的存放位置。

链表属于一种线性链式结构,由多个结构体存储区构成,任意两个结构体存储区之间用指针连接,每个结构体存储区叫一个节点,链表不支持随机访问,适合插入和删除,节点动态分配,可任意改变个数

链表还分为单向链表,双向链表,单向循环链表,双向循环链表 

单向线性链表:是简单地链式物理结构,所有节点可用一条线串起来,任何两个节点之间都有前后顺序,每个节点需要一个指针,最后一个节点为空指针

无头单向链表,所有节点的数据域都是有效的,例如:

有头单向链表:存在一个头节点,数据域无效,指针域有效,也就是有一个空的头节点

遍历列表

单向链表由于只有一个指针,因此只支持向一个方向遍历,为了遍历链表可以申请两个空的无用的头节点和尾节点进行遍历,用三个指针分别指向第一个第二个第三个节点,然后依次往后+1指向,完成遍历,这仅仅为了方便后续对链表进行增删改查,因此申请了4个遍历节点,当然不申请这么多也是可以的,就要注意增删时链接的顺序,注意不要先让指针指向了新节点后,有没有存储后面链表的地址而丢失链接地址,到了需要使用时再申请指针需要暂时存放地址也没问题;

 用代码看一下:

插入删除节点:

 下面使用链表实现对线性链式结构的管理,有空的头节点和尾节点,个人较为习惯这种方法

 

 

 

仅申请一个空的头节点,无空尾结点的情况,先来看看头文件

 然后是各个函数的实现:

 

 

 

 

 

 测试函数以及运行结果

 

 单向循环链表实际上就是让尾节点指针不为空,指向头节点地址,这样就构成了一个首尾连接的状态,也就是单向循环链表,解决约瑟夫问题,也可以说是选猴王,其实有点像生成随机数 ,n像是随机数的种子

代码演示:

 

其实本质上是一种用结构体和指针的方式连接本不连续的存储区的思想,实现方法是不固定的,只要能实现这种思想即可

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值