小肥柴慢慢手写数据结构(C篇)(5-4 中场小结)

小肥柴慢慢学习数据结构笔记(C篇)(5-4 中场小结)

  • 目录
    • 5-14 再看数据结构的基础问题
    • 5-15 接下来关于Tree你还需要学习和了解的内容
    • 参考文献和资料

目录

5-14 再看数据结构的基础问题

假设前面讨论的所有内容大家都已经自己编码实现了一遍,很容易作出以下推断:

(1)数据结构底层的具体存储结构无外乎两种,即:“数组”和“链表”,也就是很多资料/博客中描述的“顺序存储”和“链式存储”。

兜兜转转,咱们的讨论还是回到了第一次讨论数据结构的一个点,即:“数据的存储与组织”,算是扣题了。

(2)使用数组的优点:检索和修改快;使用数组的缺点:插入和删除操作慢,因为需要“挪位置”。

(3)使用链表的优点:插入和删除操作快,因为无需挪位置;实用链表的缺点:检索和修改慢。

【注】此处的“修改”,可以看做一种形式的“计算”;话说回来,计算机科学与技术的核心,不就是数据的“存储”与“计算”吗?巧不巧?哈哈哈…

而造成数组和链表优缺点相反的关键在于寻址机制的不同,有兴趣的话可以自行研究一下两者的汇编实现,引用他人的描述:

数组可以用基地址和偏移量访问的,有专门的汇编代码,move指令。而链表,对不起,单周机器指令不存在。

由此可知,数据结构在使用过程中应该根据实际需要选择合适的实现形式。但我们还是不禁要提出一个疑问:

【Q】有没有可能存在一种数据结构,它能够集合顺序存储和链式存储的优点呢?
【A】有,大家最熟悉的就是hash(散列表),且这个数据结构对应的数学理论研究和具体实现还在不断进化,譬如在JDK源码中HashMap的实现就非常有意思:
(1)它不仅能通过计算key值实现数据快速的查、取和尽可能的均匀、分散的存储。
(2)它还能根据同key节点上元素数量的变化,动态地将存储模式在单链结构和树形结构之间灵活切换,完全满足性能要求。

当然,这是后续章节需要讨论的内容,大家可以期待一下。

5-15 接下来关于Tree你还需要学习和了解的内容

主线任务先告一段落,对初学者我个人建议先绕后面的章节学习散列、堆、并查集和图论初步,因为从这儿开始之后的数据结构的复杂度(包括具体实现和数学推导)和学习难度陡增,需要投入更多的精力反复琢磨;但正式这些复杂的工具却往往是实际工程应用中最实用的基础部件,且在面试中属于面试官摸底的必选题库,属于典型的手搓费劲、用起来真香。以下有趣的高级数据结构,我们会逐一开贴讨论,莫急(讲真,数学推导已经把我捶打成小丑了)。

(1)有趣的伸展树(Splay Tree)
(2)经典的红黑树(RBTree)
(3)B树、B+树
(4)前缀树(Trie Tree 字典树)
(5)k-d树
(6)AA树
…(待补充)

【注】
(1)前四个是找工作的朋友必须掌握的,因为它们真的非常经典。
(2)treap树放在Heap(堆)中学习、讨论。

欲速不达,慢慢熟悉,慢慢打磨。

参考文献和资料

[1] labuladong相关博客
[2] liuyubobo相关博客
[3] 黑皮书
[4] 为什么数组索引数据那么快速、有效?
[5] 玩转《数据结构》顺序表和链表的比较
[6] 顺序存储和链式存储

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/689095.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

扶贫助农|基于springboot的扶贫助农系统设计与实现(源码+数据库+文档)

扶贫助农系统目录 目录 基于springboot的扶贫助农系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、用户信息管理 2、扶贫任务管理 3、论坛信息管理 4、扶贫公告管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐…

GIS工具maptalks——初始化

GIS工具maptalks开发手册(一)——hello world初始化 为何使用maptalks? ​ Maptalks项目是一个HTML5的地图引擎, 基于原生ES6、Javascript开发的二三维一体化地图。 通过二维地图的旋转、倾斜增加三维视角,通过插件化设计, 能与其他图形库echarts、d3.j…

旋转数组(java实现)

一、题目 新年第一题,避免老年痴呆! 题源:牛客 一个数组A中存有 n 个整数,在不允许使用另外数组的前提下,将每个整数循环向右移 M( M >0)个位置,即将A中的数据由(A0…

AI算法初识之分类汇总

一、背景 AI算法的分类方式多种多样,可以根据不同的学习机制、功能用途以及模型结构进行划分。以下是一些主要的分类方式及相应的代表性算法: 1. 按照学习类型 - **监督学习**: - 线性回归(Linear Regression) …

【Redis】深入理解 Redis 常用数据类型源码及底层实现(4.详解Hash数据结构)

Hash数据结构 看过前面的介绍,大家应该知道 Redis 的 Hash 结构的底层实现在 6 和 7 是不同的,Redis 6 是 ziplist 和 hashtable,Redis 7 是 listpack 和 hashtable。 我们先使用config get hash*看下 Redis 6 和 Redis 7 的 Hash 结构配置情况(在Redis客户端的命令行界面…

android pdf框架-3,对开源库的探究1

目录 pdfiumandroid相关的库 基于vudroid的 库 非开源库:

C/C++内存管理详解

目录 一、C内存分布 二、C语言与C内存管理方式 1、C语言中动态内存管理方式:malloc/calloc/realloc/free 2、C中的内存管理方式:new/delete 三、operator new与operator delete函数 1、函数概念: 2、函数使用: 3、底层原理…

android pdf框架-3,基于recyclerview修改

基于recyclerview的实现版本 解析使用的是pdifum.这个库缺点是缩放功能不行.点击链接功能没有.只有渲染. GitHub - danjdt/android-pdfviewer: A Android PDF Viewer that render pdf using PdfRenderer and displays it in a RecyclerView. recyclerview的滑动并不是像ios那…

Nginx补充

backup: upstream wwwPools {server 192.168.233.140 down; # 前端服务器1,标记为宕机状态server 192.168.233.141 down; # 前端服务器2,标记为宕机状态server 192.168.233.144 backup; # 备用服务器,只有在其他服务器都宕机时才会使用 }…

Javaweb之SpringBootWeb案例之AOP通知顺序的详细解析

3.2 通知顺序 讲解完了Spring中AOP所支持的5种通知类型之后,接下来我们再来研究通知的执行顺序。 当在项目开发当中,我们定义了多个切面类,而多个切面类中多个切入点都匹配到了同一个目标方法。此时当目标方法在运行的时候,这多…

鸿蒙新手入门-环境准备问题解析

Node.js版本与API配套关系 由于SDK的部分工具依赖Node.js运行时,推荐使用配套API版本的Node.js,保证工程的兼容性。 匹配关系见下表: API LevelNode.js支持范围API Level≤914.x(≥14.19.1)、16.xAPI Level>914.…

2024前端面试准备之TypeScript篇(二)

全文链接 1. TypeScript中的装饰器是什么以及如何使用 装饰器是一种特殊的函数,用于修改或增强其他函数的功能。在TypeScript中,装饰器可以用于类、方法、属性和参数上。 装饰器使用特殊的语法符号@,后跟一个装饰器函数。装饰器函数可以接收不同的参数,具体取决于装饰器…

利用R语言绘制相关性热图

数据示例(归一化处理后): install.packages("corrplot") install.packages("ggplot2") install.packages("ggpubr") library(corrplot) install.packages("GGally") library(GGally) library(ggplot…

读十堂极简人工智能课笔记06_自然语言处理

1. 聊天机器人 1.1. 人工智能往往掌握不了跨越几段对话语境的讨论 1.1.1. 抓不住连贯的主题,只能单独处理每个句子 1.1.2. 不能将其答案与现实联系起来 1.1.3. 可能会遵循语言规则、统计相关性,甚至查找有关事实来为每个新句子提供答复 1.2. 聊天机…

html 动态设置下拉选项

在HTML中&#xff0c;如果你想动态设置下拉选项&#xff08;<select>元素中的<option>&#xff09;&#xff0c;你可以使用JavaScript。以下是一个示例&#xff0c;展示了如何使用JavaScript来动态添加下拉选项&#xff1a; <!DOCTYPE html> <…

【JVM篇】什么是类加载器,有哪些常见的类加载器

文章目录 &#x1f354;什么是类加载器&#x1f6f8;有哪些常见的类加载器 &#x1f354;什么是类加载器 负责在类加载过程中&#xff0c;将字节码信息以流的方式获取并加载到内存当中 &#x1f6f8;有哪些常见的类加载器 启动类加载器 启动类加载器是有Hotspot虚拟机通过的类…

ETAS安装OS Port需要注意事项

安装OS Port用来配置OS和相关的中断&#xff1b;按照安装手册《HowToInstallingRTA-CAR.pdf》安装完OS PORT如下位置会有安装包&#xff08;正确的安装位置&#xff09; VRTA为虚拟OS &#xff1a;没有具体芯片和编译器的试用

【牛客】寒假训练营1 I-It‘s bertrand paradox. Again! 题解

传送门&#xff1a;It’s bertrand paradox. Again! 标签&#xff1a;随机 题目大意 有两个人分别用两种方式在二维平面上随机生成1e5个圆&#xff0c;每个圆上的每一个点(x,y)都满足-100<x<100且-100<y<100&#xff0c;现在将某个人生成的1e5个圆的圆心和半径告…

云原生之容器编排实践-在K8S集群中使用Registry2搭建私有镜像仓库

背景 基于前面搭建的3节点 Kubernetes 集群&#xff0c;今天我们使用 Registry2 搭建私有镜像仓库&#xff0c;这在镜像安全性以及离线环境下运维等方面具有重要意义。 Note: 由于是测试环境&#xff0c;以下创建了一个 local-storage 的 StorageClass &#xff0c;并使用本地…

机器学习算法的最新进展

前言 随着技术的不断发展&#xff0c;机器学习&#xff08;Machine Learning, ML&#xff09;已经从理论研究的象牙塔走向了实际应用的前线。现代机器学习算法不仅在诸多领域取得了显著的成就&#xff0c;更是推动了人工智能&#xff08;Artificial Intelligence, AI&…