数据结构 单向链表详解和代码演示

本文详细介绍了单向链表的内存结构、逻辑结构,包括带头节点和不带头节点的链表。讨论了单链表在数据结构中的优势,如插入操作的时间复杂度为O(1),并给出了在Java中实现单链表增删改查操作的实例,包括如何按顺序添加节点和删除节点。
摘要由CSDN通过智能技术生成

单向链表

1.链表的介绍

链表是一种物理存储单元上非连续、非顺序的存储结构

数据元素的逻辑顺序是通过链表中的指针链接次序实现的

链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。

每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域

链表在插入的时间复杂度o(1)

查找一个节点则时间复杂度o(n)

线性表和顺序表相应的时间复杂度插入O(logn)和查询O(1)

链表是有序的列表,但是它在内存是存储如下:

1.1单链表的内存结构图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uNXfzpzo-1638611873067)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20211204144333345.png)]

1.链表是以节点的方式来存储
2.每个节点包含data域,next域指向下一个节点
3.链表的各个节点不一定是连续存储
4.链表分带头节点和没有头节点的链表,根据实际的需求来确定

1.2单链表(带头节点)逻辑结构示意图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oBIMpEHs-1638611873071)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20211204145013566.png)]

2.单链表的应用实例

2.1题目要求

使用带head头的单项链表实现-水浒英雄排行榜管理

1)完成对英雄人物的增删改查操作

2)第一种方式:在添加英雄时,直接添加到链表的尾部

3)第二种方式:根据排名将英雄插入到指定位置

(如果有这个排名,则添加失败,并给出提示)

img

2.2思路分析

2.2.1head节点:

1.不存放具体的数据
2.作用就是表示单链表头

2.2.2添加:next指向heroNode (添加到最后)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DcTiStl0-1638611873073)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20211204165132642.png)]

1.先创建一个head头节点,作用就是单链表的头
2.后面我们每添加一个节点,就直接加入到链表的最后遍历
遍历:
1.通过一个辅助变量
需要按照编号的顺序来添加
2.首先找到新添加的节点的位置,是通过辅助变量(指针)
3.新的节点next=temp.next
4.将temp.next=新的节点

2.2.3按照编号的顺序添加:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DsQn4a7a-1638611873074)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20211204165901985.png)]
1.首先找到新添加的节点的位置,是通过辅助变量(指针)通过遍历来
2.新的节点next=temp.next
3.将temp.next=新的节点

2.2.4单链表的修改

从单链表中删除一个节点的思路
1.我们先找到需要删除的这个节点的前一个节点temp
2.temp.next=temp.next.next
3.被删除的节点,将不会有其他引用指向,会被垃圾回收机制回收

2.3相关代码

public class SingleLinkedListDemo1 {
   
    public static void main(String[] args) {
   
        //测试
        HeroNode1 node1 = new HeroNode1(1, "宋江", "及时雨");
        HeroNode1 node2 = new HeroNode1(2, "卢俊义", "玉麒麟");
        HeroNode1 node3 = new HeroNode1(3, "吴用", "智多星");
        HeroNode1 node4 = new HeroNode1(4, "智多星", "豹子头");
        HeroNode1 node5 = new HeroNode1(5, "武松", "打虎");
        SingleHero singleHero = new SingleHero(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

抹泪的知更鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值