【数据结构与算法】3、虚拟头节点、动态数组的缩容、动态数组和单链表的复杂度、数组的随机访问

news/2024/11/23 13:11:11/

目录

  • 一、虚拟头节点
  • 二、数组的随机访问
  • 三、动态数组、链表复杂度分析
  • 四、动态数组 add(E element) 复杂度分析
  • 五、动态数组的缩容

一、虚拟头节点

🌼 为了让代码更加精简,统一所有节点的处理逻辑,可以在最前面增加一个虚拟的头节点(不存储数据)

在这里插入图片描述
修改 node(int) 方法:

    /*** 返回 index 位置的节点*/private Node<E> node(int index) {rangeCheck(index);// 从虚拟头节点的下一个节点开始寻找Node<E> moveNode = first.next;for (int i = 0; i < index; i++) {moveNode = moveNode.next;}return moveNode;}

修改添加和删除方法:

    @Overridepublic void add(int index, E element) {rangeCheck4Add(index);// 拿到【index - 1】位置的节点Node<E> prev = (index == 0) ? first : node(index - 1);prev.next = new Node<>(element, prev.next);size++;}
    @Overridepublic E remove(int index) {rangeCheck(index);Node<E> prev = (index == 0) ? first : node(index - 1);Node<E> node = prev.next;prev.next = node.next;size--;return node.element;}

在这里插入图片描述

二、数组的随机访问

在这里插入图片描述
🎉数组的随机访问速度非常快
🎉elements[n] 的效率与 n 是多少无关

三、动态数组、链表复杂度分析

在这里插入图片描述

🎉 这里的链表是单链表

四、动态数组 add(E element) 复杂度分析

在这里插入图片描述

🎉 扩容操作不是每次都会发生

在这里插入图片描述

  • 什么情况下适合使用均摊复杂度?
    🎉经过连续的多次复杂度比较低的情况后,出现个别复杂度比较高的情况

五、动态数组的缩容

🎁 如果内存使用比较紧张,动态数组有比较多的剩余空间,可以考虑进行缩容操作

🎁 比如剩余空间占总容量的一半时,就进行缩容(size 大于总容量的一半的时候进行缩容)

🎁 缩容操作在动态数组的删除方法中进行

  private void trim() {int oldCapacity = elements.length;int halfCapacity = oldCapacity >> 1;// size 大于总容量的一半, 总容量小于等于默认容量的时候不缩容if (size >= halfCapacity || oldCapacity <= DEFAULT_CAPACITY) return;E[] newElements = (E[]) new Object[halfCapacity];for (int i = 0; i < size; i++) {newElements[i] = elements[i];}elements = newElements;System.out.println(oldCapacity + "缩容为" + halfCapacity);}

🎁 如果扩容倍数、缩容时机设计不得当,有可能会导致复杂度震荡


http://www.ppmy.cn/news/561798.html

相关文章

青龙脚本—咔咔

咔咔下载&#xff1a;https://h5.imkaka.com/fep/fun-kaka/invitation.html?codeDLMCH3Q 填写邀请码 DLMCH3Q 领取五元&#xff0c;不填不给。 拉库 ql raw http://sbu.ajouter.cn/kk.js 抓包关键字搜 info 变量 kkhd

黑咔相机-大片神器

现在市面上各种美颜相机&#xff0c;拼图软件&#xff0c;调色软件数不胜数&#xff0c;这款修图软件主要用来修饰天空&#xff0c;满满的艺术气息&#xff0c;超美的动态效果&#xff0c;一键生成你的魔法星空&#xff5e; 你没见过的视频照片特效都在这里&#xff5e;&#x…

青龙面板之咔咔脚本

1&#xff1a;拉库地址 ql raw https://raw.githubusercontent.com/kk000001/auto/main/kaka.js 2&#xff1a;羊毛脚本 我的咔咔邀请码【9N405FQ】 不填写似乎是没有奖金的&#xff08;我的-右上角-中间按钮&#xff09; 咔咔下载&#xff1a;点我下载 也可以扫码下载&…

哔咔服务器维护时间,哔咔

摘要 腾兴网为您分享:屏幕亮度控制器&#xff0c;羞花影院&#xff0c;日记本&#xff0c;扬州发布&#xff0c;中邮速递易&#xff0c;流氓软件卸载&#xff0c;华建中远,word文档阅读器&#xff0c;萤石&#xff0c;人力资源四级题库&#xff0c;人体穴位模型&#xff0c;国家…

青龙羊毛之咔咔(长毛)

青龙羊毛之咔咔 首次得5元&#xff0c;一天1-10毛 应用类型&#xff1a;app 下载地址&#xff1a;传送门 码子&#xff1a;PKUTNNC 工具来源&#xff1a;leafxcy大佬 拉取地址&#xff1a; ql raw https://github.com/leafxcy/JavaScript/blob/main/kaka.js定时规则&#…

咔咔嘭:厨师的远征

咔咔嘭是由广州盈正推出的系列单机游戏&#xff0c;在咔咔嘭HD Pro荣登苹果官方中国区一周最佳应用榜首之后&#xff0c;又连续推出了咔咔嘭•红&#xff08;免费版&#xff09;和咔咔嘭•蓝&#xff08;免费版&#xff09;&#xff0c;出色的游戏设计&#xff0c;精致的画面和…