【数据结构】认识链表和模拟实现单链表(1)

简介: 【数据结构】认识链表和模拟实现单链表

1.链表

1.1 链表的概念

链表是一种物理存储结构上非连续存储结构,数据元素的逻辑顺序是通过链表中的引用链接次序实现的


链表的特点:①空间上,按需给空间  ②不要求物理空间连续,头部和中间的插入删除,不需要挪动数据


1.2 链表的逻辑结构图和物理结构图

1.2.1 链表的逻辑结构图

去.png

通过以上的逻辑结构图,我们可以看出链表是由结点组成,每个结点都包括两部分:数据域和指针域,通过指针域指向下一个结点来完成结点与结点之间的相连


数据域:用来存储数据

指针域:用来指向下一个结点

1.2.2 链表的物理结构图

请.png


通过以上的物理结构图,我们可以看到除了最后一个结点的指针指向null,其余的指针域都存储下一个结点的地址,所以指针域是用来存储下一个结点的地址来完成链接的


1.3链表结构的分类

1.3.1 链表通过什么进行结构的分类

链表通过以下表格中的六种情况组合起来进行结构的分类:


单向 双向
带头 不带头
循环 非循环

可以分为以下八种结构:


单向不带头循环链表
单向不带头非循环链表
单向带头循环链表
单向不带头循环链表
双向不带头循环链表
双向不带头非循环链表
双向带头循环链表
双向带头非循环链表

1.3.2 不同链表结构的逻辑图

①单向


其.png


单向:只要一个指针域存储下一个结点的地址


②双向


前.png


双向:有两个指针域,前指针域是用来存储前一个结点的地址,后指针域是用来存储后一个结点地址


③带头

我.png



带头:有一个哨兵位结点(head),数据域一般给一个无效值,当做头结点


④不带头

为.png



不带头:没有哨兵位结点


⑤循环

五.png



循环:最后一个结点没有指向空而是指向了第一个结点


⑥非循环


玩.png


非循环:最后一个结点直接指向了空


2.模拟实现一个单向链表

现在我们知道了什么是链表,以及链表的分类,那么接下来我们就来模拟实现一个存放整型数据的单向不带头非循环链表


我们首先需要创建一个类来实现这样一个链表:


public class MyLinkedList {
}

接下来我们就需要将这个实现链表的过程全部放在 MyLinkedList 这个类中


2.1 MyLinkedList类的内部类

我们知道链表是用结点来存储数据的,并且还是用结点来实现结点与结点之间的链接


那我们现在就需要在 MyLinkedList类 中创建一个内部类当做结点类


private class Node {
    private int data;//数据域
    private Node next;//链接域
    private Node(int data) {
        this.data = data;
    }
}

data:用来存放数据

next:用来存储下一个结点的地址,从而达到结点与结点之间的链接

构造方法:每实例化一个结点类时,都需要调用构造方法,来把数据放入数据域

2.2 MyLinkedList类的成员属性

我们需要给第一个结点设置为头结点,这样用户才知道链表应该从哪里开始,这样单链表才不会因为没有被指向而被回收


private Node head;//记录第一个结点

注:只要第一个结点没有被回收,其他结点也不会被回收,因为前一个结点的 next 存储着后一个结点的地址,这样前一个结点的指针域就指向了后一个结点  


相关文章
|
2月前
|
存储 算法 Perl
数据结构实验之链表
本实验旨在掌握线性表中元素的前驱、后续概念及链表的建立、插入、删除等算法,并分析时间复杂度,理解链表特点。实验内容包括循环链表应用(约瑟夫回环问题)、删除单链表中重复节点及双向循环链表的设计与实现。通过编程实践,加深对链表数据结构的理解和应用能力。
65 4
|
12天前
|
数据库
数据结构中二叉树,哈希表,顺序表,链表的比较补充
二叉搜索树,哈希表,顺序表,链表的特点的比较
数据结构中二叉树,哈希表,顺序表,链表的比较补充
|
2月前
|
存储 缓存 算法
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
74 5
|
2月前
|
存储 C语言
【数据结构】手把手教你单链表(c语言)(附源码)
本文介绍了单链表的基本概念、结构定义及其实现方法。单链表是一种内存地址不连续但逻辑顺序连续的数据结构,每个节点包含数据域和指针域。文章详细讲解了单链表的常见操作,如头插、尾插、头删、尾删、查找、指定位置插入和删除等,并提供了完整的C语言代码示例。通过学习单链表,可以更好地理解数据结构的底层逻辑,提高编程能力。
119 4
|
2月前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习之单双链表精题详解(9)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第2.3章之IKUN和I原达人之数据结构与算法系列学习x单双链表精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
2月前
|
存储 Web App开发 算法
2024重生之回溯数据结构与算法系列学习之单双链表【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构之单双链表按位、值查找;[前后]插入;删除指定节点;求表长、静态链表等代码及具体思路详解步骤;举例说明、注意点及常见报错问题所对应的解决方法
|
2月前
|
算法
数据结构之购物车系统(链表和栈)
本文介绍了基于链表和栈的购物车系统的设计与实现。该系统通过命令行界面提供商品管理、购物车查看、结算等功能,支持用户便捷地管理购物清单。核心代码定义了商品、购物车商品节点和购物车的数据结构,并实现了添加、删除商品、查看购物车内容及结算等操作。算法分析显示,系统在处理小规模购物车时表现良好,但在大规模购物车操作下可能存在性能瓶颈。
54 0
|
3月前
|
存储
[数据结构] -- 单链表
[数据结构] -- 单链表
29 1
|
2月前
|
C语言
【数据结构】双向带头循环链表(c语言)(附源码)
本文介绍了双向带头循环链表的概念和实现。双向带头循环链表具有三个关键点:双向、带头和循环。与单链表相比,它的头插、尾插、头删、尾删等操作的时间复杂度均为O(1),提高了运行效率。文章详细讲解了链表的结构定义、方法声明和实现,包括创建新节点、初始化、打印、判断是否为空、插入和删除节点等操作。最后提供了完整的代码示例。
79 0
|
3月前
|
存储
[数据结构] -- 双向循环链表
[数据结构] -- 双向循环链表
30 0