线性数据结构:数组、受限数组(栈、队列)、线性表

这篇具有很好参考价值的文章主要介绍了线性数据结构:数组、受限数组(栈、队列)、线性表。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 数组

数组定义

  数组(Array)是有序的元素序列。属于线性结构(有且仅有一个前驱、有且仅有一个后继)。

数组特点

  数组的关键在于在内存中的物理地址对应的是一段连续的内存。这意味着如果想要在任意位置删除/新增一个元素,那么该位置往后的所有元素,都需要往前挪/往后挪一个位置。假设数组的长度是 n,那么因增加/删除操作导致需要移动的元素数量,就会随着数组长度 n 的增大而增大,呈一个线性关系。所以说数组增加/删除操作对应的时间复杂度就是 O(n)

在js中的数组比较特殊,如果我们在一个数组中只定义了一种类型的元素,比如:

const arr = [1,2,3,4]

它是一个纯数字数组,那么对应的确实是连续内存。
但如果我们定义了不同类型的元素:

const arr = ['haha', 1, {a:1}]

它对应的就是一段非连续的内存。此时,JS 数组不再具有数组的特征,其底层使用哈希映射分配内存空间,是由对象链表来实现的。
谨记“JS 数组未必是真正的数组

2. 栈和队列(操作受限的数组)

  栈是一种后进先出(LIFO,Last In First Out)的数据结构。——只用 pop 和 push 完成增删的“数组”

  • 只允许从尾部添加元素
  • 只允许从尾部取出元素

队列

  队列(Queue)是一种先进先出(FIFO,First In First Out)的数据结构。——只用 push 和 shift 完成增删的“数组”。在栈元素出栈时,我们关心的是栈顶元素(数组的最后一个元素);队列元素出队时,我们关心的则是队头元素(数组的第一个元素)。

3. 链表

  链表和数组相似,线性结构(有且仅有一个前驱、有且仅有一个后继),不同点在于,链表中,数据单位的名称叫做“结点”,而结点和结点的分布,在内存中可以是离散的
一个内容为1->2->3->4->5的链表,在内存中的形态可以是散乱如下的:
线性数据结构:数组、受限数组(栈、队列)、线性表

在链表中,每一个结点的结构都包括了两部分的内容:数据域和指针域。JS 中的链表,是以嵌套的对象的形式来实现的:

{
    // 数据域
    val: 1,
    // 指针域,指向下一个结点
    next: {
        val:2,
        next: ...
    }
}

数据域存储的是当前结点所存储的数据值,而指针域则代表下一个结点(后继结点)的引用。
线性数据结构:数组、受限数组(栈、队列)、线性表

创建链表:

function ListNode(val) {
    this.val = val;
    this.next = null;
}
const node = new ListNode(1)  
node.next = new ListNode(2)

链表元素的添加和删除操作,本质上都是在围绕 next 指针做文章,例如在节点1和节点2之间插入节点3:
线性数据结构:数组、受限数组(栈、队列)、线性表

// 如果目标结点本来不存在,那么记得手动创建
const node3 = new ListNode(3)     
// 把node3的 next 指针指向 node2(即 node1.next)
node3.next = node1.next
// 把node1的 next 指针指向 node3
node1.next = node3

删除节点3:

node1.next = node3.next 

在涉及链表删除操作的题目中,重点不是定位目标结点,而是定位目标结点的前驱结点。做题时,完全可以只使用一个指针(引用),这个指针用来定位目标结点的前驱结点。

总结:链表的插入/删除效率较高,而访问效率较低;数组的访问效率较高,而插入效率较低。文章来源地址https://www.toymoban.com/news/detail-837667.html

到了这里,关于线性数据结构:数组、受限数组(栈、队列)、线性表的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据结构01-线性结构-链表栈队列-栈篇

    线性结构-栈 本系列为C++数据结构系列,会介绍 线性结构,简单树,特殊树,简单图等。本文为线性结构部分。 线性结构 【 3 】链表:单链表、双向链表、循环链表 【 3 】栈 【 3 】队列 栈是Stack一个后进先出Last In First Out,LIFO的线性表,他要求只在表尾对数据执行删除和插

    2024年02月16日
    浏览(38)
  • 【数据结构】线性表之栈、队列

    前面两篇文章讲述了关于线性表中的顺序表与链表,这篇文章继续讲述线性表中的 栈和队列。 这里讲述的两种线性表与前面的线性表不同,只允许在一端入数据,一段出数据,详细内容请看下面的文章。 顺序表与链表两篇文章的链接: 线性表之顺序表 线性表之链表 注意:

    2024年02月06日
    浏览(57)
  • 【Java数据结构】线性表-队列

    队列 :只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(FirstIn First Out) 入队列:进行插入操作的一端称为 队尾(Tail/Rear) 出队列:进行删除操作的一端称为 队头(Head/Front) 在Java中, Queue是个接口,底层是通过链表实现的。

    2023年04月15日
    浏览(52)
  • 【数据结构】受限制的线性表——队列

    🧧🧧🧧🧧🧧个人主页🎈🎈🎈🎈🎈 🧧🧧🧧🧧🧧数据结构专栏🎈🎈🎈🎈🎈 🧧🧧🧧🧧🧧上一篇文章:特殊的线性表——栈🎈🎈🎈🎈🎈 上一章我们讲了一种特殊的线性表只能在表尾进行插入和删除操作,接下来我们讲一个和栈很相似的数据结构,它也是一种特

    2024年04月10日
    浏览(37)
  • 【数据结构篇】线性表2 —— 栈和队列

    前言:上一篇我们介绍了顺序表和链表 (https://blog.csdn.net/iiiiiihuang/article/details/132615465?spm=1001.2014.3001.5501), 这一篇我们将介绍栈和队列,栈和队列都是基于顺序表和链表来实现的 目录 栈(Stack) 什么是栈 ? 栈的方法 和 使用 栈的模拟实现  先初始化一下栈  往栈里插入

    2024年02月09日
    浏览(39)
  • 【数据结构初阶】六、线性表中的队列(C语言 -- 链式结构实现队列)

    ========================================================================= 相关代码gitee自取 : C语言学习日记: 加油努力 (gitee.com)  ========================================================================= 接上期 : 【数据结构初阶】五、线性表中的栈(C语言 -- 顺序表实现栈)_高高的胖子的博客-CSDN博客  

    2024年02月08日
    浏览(41)
  • Java 数据结构篇-用链表、数组实现队列(数组实现:循环队列)

    🔥博客主页: 【 小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍   文章目录         1.0 队列的说明         1.1 队列的几种常用操作         2.0 使用链表实现队列说明         2.1 链表实现队列         2.2 链表实现队列 - 入栈操作         2.3 链表实现队

    2024年02月05日
    浏览(38)
  • 数据结构_栈、队列和数组

    目录 1. 栈 1.1 栈的定义 1.2 栈的基本操作 1.3 栈的顺序存储结构 1.3.1 顺序栈 1.3.2 顺序栈的基本运算 1.3.3 共享栈 1.4 栈的链式存储 1.5 栈相关应用 2. 队列 2.1 队列的定义 2.2 队列的基本操作 2.3 队列的顺序存储 2.4 循环队列 2.4.1 循环队列的操作 2.5 队列的链式存储 2.5.1 链式队列的

    2024年02月04日
    浏览(41)
  • 【数据结构】数组实现队列(详细版)

    目录 队列的定义 普通顺序队列的劣势——与链队列相比  顺序队列实现方法: 一、动态增长队列  1、初始化队列  2、元素入队  3、判断队列是否为空  4、元素出队  5、获取队首元素 6、获取队尾元素  7、获取队列元素个数 8、销毁队列  总结: 动态增长队列完整测试代

    2024年04月28日
    浏览(32)
  • C语言数据结构——线性表之栈和队列

    为什么会定义栈和队列这两种数据结构呢? 原因在于: 之所以会定义栈和队列这样的数据结构 是因为他们有两大特性 : 第一: 他们可以保存程序运行路径中各个点的信息,以便用于回溯操作或其他需要访问已经访问过的节点信息的操作。 比如: 栈用于解决迷宫问题,就

    2023年04月11日
    浏览(110)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包