博客
关于我
线性数据结构
阅读量:677 次
发布时间:2019-03-17

本文共 1480 字,大约阅读时间需要 4 分钟。

线性数据结构之数组与链表

在线性数据结构中,数组链表是最常见的两种类型,它们在数据存储和操作上各有优劣之处。

数组

数组的核心特点是固定长度,存储空间必须是连续的,这使得数组在内存中占用较为紧凑。然而,数组的长度无法随意更改,这也是数组性能优越的原因之一。

延伸思考:为什么数组不能直接向后扩容?这是因为操作系统分配内存时通常会分配一个较大的连续块,当数组长度不足时,系统需要通过重新分配一个更大的存储空间,并将原数组数据复制到新位置。这种操作虽然效率不高,但由于被优化了,作为开发者,我们不需要手动管理数组长度。

数组的优点

  • 查询速度快:由于数组存储是基于偏移地址访问的,直接通过a[x]可以快速访问特定位置的元素。
  • 内存紧凑:数组的存储空间是连续的,减少了碎片问题。
  • 数组的缺点

  • 内存碎片:当数组较大时,系统可能出现内存碎片,影响新存储空间的获取。
  • 长度不灵活:数组的长度固定,难以进行添加或删除操作。
  • 链表

    与数组不同,链表以动态链接的方式存储数据,其节点通常包含数据值和指向下一个节点的引用。链表的关键特点是柔性,高度灵活。

    链表的特点

  • 空间利用低效:每个节点都需要额外存储一个引用指向下一个节点。
  • 查询速度慢:要访问链表中的某个节点需要逐步遍历到该节点,时间复杂度为O(n)。
  • 链表的优点

  • 灵活性高:支持高效添加和删除操作。
  • 内存利用高效:链表可以扩展到需要的大小,无需担心内存碎片。
  • 链表的缺点

  • 查询效率低:需要从头节点开始逐步访问,导致查找某个节点时间较长。
  • 内存浪费:每个额外节点需要额外的存储空间,增加了内存占用。
  • 链表的使用场景

    链表特别适合需要频繁插入、删除操作且数据规模不大或无法预先确定大小的场景。

    链表操作示例

    // 创建链表节点function Node(value) {    this.value = value;    this.next = null;}// 例子:var a = new Node(1);var b = new Node(2);var c = new Node(3);var d = new Node(4);a.next = b;b.next = c;c.next = d;// 遍历链表function loopLink(root) {    var temp = root;    while (temp != null) {        console.log(temp.value);        temp = temp.next;    }}// 递归遍历function loopLink1(root) {    if (root == null) {        return;    }    console.log(root.value);    loopLink1(root.next);}// 链表逆置function nizhi(root) {    if (root.next == null) {        return root;    }    var lastNode = nizhi(root.next);    root.next = null;    // 上结点的前一个指向当前上结点的前一个    if (root.next != null) {        root.lastNode = root;    }    return lastNode;}

    链表在实际应用中的表现取决于具体需求,两者各有优劣,选择时需要综合考虑数据规模和操作频率。

    转载地址:http://hzjhz.baihongyu.com/

    你可能感兴趣的文章
    idea thymeleaf页面变量报错解决
    查看>>
    云游戏,打响5G第一战
    查看>>
    Docker 拉取镜像速度太慢
    查看>>
    HUAWEI防火墙通过IKE方式协商IPSec隧道(采用预共享密钥认证)
    查看>>
    计网复习3
    查看>>
    JDK动态代理的实现原理
    查看>>
    Spring Security 架构与源码分析
    查看>>
    教程丨使用MeterSphere做Dubbo接口测试
    查看>>
    【毕设-STM32f103寄存器版本】智能防盗系统
    查看>>
    Vue Itea软件里直接npm run build 报错npm ERR! missing script :build
    查看>>
    勒索病毒Kraken2.0.7分析
    查看>>
    MySQL错误1366处理方法
    查看>>
    Error running Address localhost:1099 is already in use(已解决)
    查看>>
    pytorch深度学习中每个epoch运行时间的统计代码
    查看>>
    VxWorks 操作系统学习笔记
    查看>>
    链表插入和删除算法
    查看>>
    断言(assert)的用法
    查看>>
    主机与虚拟机(ubuntu)可以互ping,虚拟机不能上网解决办法
    查看>>
    驱动程序之_1_字符设备_13_USB设备_1_基本概念
    查看>>
    wxPython下载安装教程
    查看>>