首页 > 其他分享 >数据结构【线性表之单链表】

数据结构【线性表之单链表】

时间:2024-01-04 23:32:19浏览次数:36  
标签:结点 单链 线性表 复杂度 链表 数据结构 指针

链表

链表:线性表还可以使用链式存储方式保存,即线性表中的各个元素保存在各自的存储空间中,形成一个个节点。这些结点在内存的地址不要求是相邻的,它们之间通过指针连接起来。

特点:

  1. 灵活存储,不要求预先分配一块连续的空间,而是按需分配,随时需要,随时分配
  2. 不要求分配的空间必须是相邻的
  3. 没有容量上限,除非计算机资源耗尽

单链表

单链表是由一组动态分配的结点形成的链表,每个节点保存线性表中的一个元素及指针,指针指向保存其后继元素的结点。

可以将单例表想象成火车,火车头后面连着着一节一节的车厢(是不是很形象)

数据结构【线性表之单链表】_数据结构

指针head指向单链表中的表头结点,head成为表头指针或头指针。每个结点中都有一个指针,指向保存其后继元素的节点。表尾元素所在结点的指针为空,表示单链表的结束。在程序中,使用null表示空指针,而在图中使用“∧"表示。

单链表中的”“表示每个节点中仅含有一个指针。

时间复杂度

在带头结点的单链表中进行操作时,如果给定了当前指针,则插入操作和删除操作的时间复杂度均为0(1),因为操作过程中不需要进行元素的移动,也不需要将当前指针从表头后移到当前位置。


在判定单链表是否为空时,只需要查看表的头结点中指针域的值,时间复杂度也为0(1),对于清空表操作,因为要将所有数据结点占用的空间释放,所以时间复杂度是0(n)。

对于求表长操作,如果在头结点中保存了链表的长度,则时间复杂度是0(1)。如果采用的是计数方式,即从表头开始,逐个结点进行计数,则时间复杂度为0(n)。

查找操作的时间复杂度是根据查找目标在链表中的位置而定的。若在单链表中一定能找到查找目标,则在最优的情况下,比较1次就能找到,时间复杂度为0(1);而在最坏的情况下,需要进行n次比较,时间复杂度为0(n)。平均来看,需要查找链表的约一半元素,所以时间复杂度是0(n)。在查找失败时,查找操作的时间复杂度也是0(n)。


在线性表采用链式存储结构时,每个结点中除存储元素值以外,还需要保存一个指针。指针的空间属于额外的空间开销。对于有n个元素的线性表,若采用单链表存储,则占用的空间为nx(E+P),其中E是结点中数据域占用的空间量,P是结点中指针域占用的空间量,用于数据的部分是nxE,属于有效部分,用于额外开销的部分是nxP,属于结构性开销。


标签:结点,单链,线性表,复杂度,链表,数据结构,指针
From: https://blog.51cto.com/AmbitionGarden/9105884

相关文章

  • 数据结构线性表之顺序表
    定义:一个线性表是由同类型数据元素构成的有限序列一般地,当表示一个由n(n>=0)个元素组成的线性表L时,将线性表中的所有元素列在一对括号中,每个元素之间以逗号分隔,如L=(a0,a1,....,an-1)不搞的像数据那么麻烦了,按我理解的来表项:线性表中的数据元素表头元素:线性表的第一个元素表尾元素:......
  • Redis 底层数据结构
    在Redis数据结构和对象机制中提到的图中,我们知道,可以通过redisObject对象的type和encoding属性。可以决定Redis主要的底层数据结构:SDS、QuickList、ZipList、HashTable、IntSet、ZskipList。一、简单动态字符串(SDS)先来看看传统的C语言如何存储字符串的:比如一个"Redis"......
  • 数据结构简介之算法
    时间复杂度算法的时间复杂度_算法时间复杂度-CSDN博客时间复杂度可以参考这篇文章超级详细!!!为什么不使用算法的绝对运行时间来衡量算法的时间效率?同一个算法处理不同数量的数据时,所花的绝对运行时间可能不同。同一个算法处理相同数量的数据时,在不同配置的电脑上的绝对运行时间也可能......
  • 数据结构简介
    什么是数据?数据是指所有能输入计算机并被计算机程序处理的符号的集合。源程序、文档、地图、照片其实都是数据。数据结构数据结构分为逻辑结构和物理结构。逻辑结构:主要是数据元素之间的逻辑关系,物理结构指的是数据结构在计算机种的表示及存储方式。逻辑结构包含集合、线性结构、树......
  • 做题记录:数据结构 I
    标*的题目是个人认为质量较高或比较符合个人喜好的题目。*I.P5278算术天才⑨与等差数列尝试寻找一个序列满足为等差数列的充分必要条件。显然需要有\(\max-\min=(r-l)k\)。直接要求等差的话,信息不好合并。但等差的限制有一个必要条件是,差分序列的\(\gcd\)为\(k......
  • 【数据结构】详细剖析线性表
    顺序表与链表的比较导言大家好,很高兴又和大家见面啦!!!经过这段时间的学习与分享,想必大家跟我一样都已经对线性表的相关内容比较熟悉了。为了更好的巩固线性表相关的知识点,下面我们一起将线性表这个章节的内容梳理一遍吧。一、线性表线性表的相关概念线性表时具有相同数据类型的个数据......
  • 2023 408数据结构总结
    持续更新完善中。一、线性表顺序存储的有序表非空双向链表时间复杂度二、栈、队列和数组稀疏矩阵3三元组:(行、列、值)表示矩阵非0元素三、树与二叉树二叉树二叉树的遍历5先序遍历NLR(根左右)中序遍历LNR后序遍历LRN==【题目】==树与二叉树的应用4哈弗曼编码的加......
  • 【数据结构】链式家族的成员——循环链表与静态链表
    循环链表与静态链表导言大家好!很高兴又和大家见面啦!!!经过前面的介绍,相信大家对链式家族的成员——单链表与双链表的相关内容都已经熟练掌握了。前面我们重点介绍了通过C语言来实现单链表与双链表的一些基本操作,希望大家私下能够多多练习一下,帮助自己去吸收消化这些内容。在今天的篇......
  • 数据结构应用之桶排序
    问:有10G的订单数据,希望订单金额(假设都是正整数)进行排序,但我们内存有限,只有几百MB,如何进行排序?答:因内存有限,需要排序的数据量巨大,所以,此时需要外部排序,外部排序采用的是一种分治思想,外部排序最常用的是多路归并排序,即将大数据切成多份一次可以载入内存的小数据,对小数据进行内......
  • 【数据结构】C语言实现双链表的基本操作
    双链表导言大家好,很高兴又和大家见面啦!!!经过前面几个篇章的内容分享,相信大家对顺序表和单链表的基本操作都已经熟练掌握了。今天咱们将继续分享线性表的链式存储的第二种形式——双链表。在今天的内容中,咱们将介绍双链表的创建以及一些基本操作,接下来跟我一起来看看吧!一、单链表与双......