从数据结构说起(一)

1 揭开数据结构神奇的面纱

1.1 初识数据结构

    在C++的标准库模板(Standard Template Library,STL)课程上,我初次结识了《数据结构》。C++语言提供的标准库模板是面向对象程序设计与泛型程序设计思想相结合的典范。所谓的泛型编程就是编写不依赖于具体数据类型的程序。

    STL容器的底层实现依赖于数据结构。向量(vector)是一种顺序容器,可视为一种动态数组。集合(set)和映射(map)的底层是用红黑树(Red Black Tree)实现的。无序集合(unordered set)和无序映射(unordered map)的底层是哈希表(hash table)实现的。从上面的分析可以看出,STL容器的实现依赖了大量的数据结构。

    作为面向对象程序设计的经典,C++的标准库模板封装了大量的数据结构。数据结构知识的匮乏可能会导致STL理解的困难。笔者认为,在学习STL这一部分的内容之前,读者应该对数据结构有一个基本的认识。


1.2 数据结构的学习

    在搜索引擎上搜索“如何学习数据结构”,网友不是给你推荐五花八门的书籍,就是给你推荐各种刷题技巧。对于一个初学者来说,最重要的是掌握数据结构的基本原理。如若拘泥于各种繁杂是数学推导,那么你在学习了几节之后变会觉得索然无味,书籍也自然而然地束之高阁了。

    对于初学者,笔者比较推荐通过网络视频来学习。笔者比较推荐电子科技大学戴波老师的数据结构与算法慕课课程,该课程讲解深入浅出,并且给出了大量的实现代码。想了解更多数据结构知识,推荐读者阅读数据结构与算法教程。

    在学习完成基础课程之后,读者可以在解锁leetcode刷题网站,强烈建议读者从探索板块的数据结构专栏开始刷题。通过大量的联系,我相信读者对数据结构的理解一定会更加深入,编程能力亦能极大地提高。

1.3 数据结构知识体系

    数据结构是带有结构的数据原始的集合。数据结构有两大用途:(1)用于存放要处理的数据;(2)用于实现的算法策略。数据结构可由一个四元组组成:

                                                DataStructuue=(D,L,S,O)

    上式表示数据结构由数据原始、数据原始之间的逻辑关系、逻辑关系在计算机中的存储表示及所规定的操作组成。

    按照逻辑结构,数据结构可以分为线性结构、树形结构、图形结构和结合结构等。下图为逻辑结构分类示意图。

逻辑结构分类示意图

    按照存储结构,数据结构可分为顺序存储、链式存储和哈希存储等。顺序存储结构:把逻辑上相邻的元素存储在物理位置相邻的存储单元中。链式存储结构:在数据元素中添加一些地址或辅助结构,用于存储数据原始之间的关系。下图反映了数据的逻辑结构和存储结构之间的联系。


逻辑结构和存储结构之间的联系

        数据结构的操作,主要包括查找、插入、删除、遍历和排序等。

数据结构知识网络


喜欢的朋友记得点赞、收藏、关注哦!!!

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

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

相关文章

JAVA--- 关键字static

之前我们学习了JAVA 面向对象的一些基本知识,今天来进阶一下!!! static关键字 static表示静态,是JAVA中的一个修饰符,可以修饰成员方法,成员变量,可用于修饰类的成员(变…

4.27比赛总结

文章目录 T1T2法一:倍增求 LCA法二:Dijkstra 求最短路法三:dfs 求深度 T3T4总结 T1 一道非常简单的题,结果我因为一句话没写挂了 80pts…… 题目中没写 a a a 数组要按照 b b b 数组的顺序,所以对于最大方案&#x…

数据一致性巡检总结:基于分桶采样的设计与实现

数据一致性巡检总结:基于分桶采样的设计与实现 背景 在分布式系统中,缓存(如 Redis)与数据库(如 MySQL)之间的数据一致性问题是一个常见的挑战。由于缓存的引入,数据在缓存和数据库之间可能存…

SpringBoot与Druid整合,实现主从数据库同步

通过引入主从数据库同步系统,可以显著提升平台的性能和稳定性,同时保证数据的一致性和安全性。Druid连接池也提供了强大的监控和安全防护功能,使得整个系统更加健壮和可靠。 我们为什么选择Druid? 高效的连接管理:Dru…

在Linux系统中安装MySQL,二进制包版

1、检查是否已安装数据库(rpm软件包管理器) rpm -qa | grep mysql rpm -qa | grep mariadb #centOS7自带mariadb与mysql数据库冲突2、删除已有数据库 rpm -e –nodeps 软件名称 3、官网下载MySQL包 4、上传 # 使用FinalShell或Xshell工具上传&#…

【含文档+PPT+源码】基于SpringBoot电脑DIY装机教程网站的设计与实现

项目介绍 本课程演示的是一款 基于SpringBoot电脑DIY装机教程网站的设计与实现,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套…

Spring Boot 缓存机制:从原理到实践

文章目录 一、引言二、Spring Boot 缓存机制原理2.1 缓存抽象层2.2 缓存注解2.3 缓存管理器 三、入门使用3.1 引入依赖3.2 配置缓存3.3 启用缓存3.4 使用缓存注解3.5 实体类 四、踩坑记录4.1 缓存键生成问题4.2 缓存过期与更新问题4.3 事务与缓存的一致性问题 五、心得体会5.1 …

Spark读取Apollo配置

--conf spark.driver.extraJavaOptions-Dapp.idapollo的app.id -Denvfat -Dapollo.clusterfat -Dfat_metaapollo的meta地址 --conf spark.executor.extraJavaOptions-Dapp.idapollo的app.id -Denvfat -Dapollo.clusterfat -Dfat_metaapollo的meta地址 在spark的提交命令中&…

[逆向工程]如何理解小端序?逆向工程中的字节序陷阱与实战解析

[逆向工程]如何理解小端序?逆向工程中的字节序陷阱与实战解析 关键词:逆向工程、小端序、字节序、二进制分析、数据解析 引言:为什么字节序是逆向工程师的必修课? 在逆向工程中,分析二进制数据是最基础的任务之一。…

项目三 - 任务2:创建笔记本电脑类(一爹多叔)

在本次实战中,我们通过Java的单根继承和多接口实现特性,设计了一个笔记本电脑类。首先创建了Computer抽象类,提供计算的抽象方法,模拟电脑的基本功能。接着定义了NetCard和USB两个接口,分别包含连接网络和USB设备的抽象…

ElasticSearch深入解析(六):集群核心配置

1.开发模式和生产模式 Elasticsearch默认运行在开发模式下,此模式允许节点在配置存在错误时照常启动,仅将警告信息写入日志文件。而生产模式则更为严格,一旦检测到配置错误,节点将无法启动,这是一种保障系统稳定性的安…

【Prometheus-MySQL Exporter安装配置指南,开机自启】

目录 1. 创建 MySQL 监控用户2. 配置 MySQL 认证文件3. 安装 mysqld_exporter4. 配置 Systemd 服务5. 启动并验证服务6. 修改Prometheus配置常见错误排查错误现象排查步骤 6. 验证监控数据关键注意事项 7. Grafana看板 1. 创建 MySQL 监控用户 mysql -uroot -p123456 # 登录M…

redis未授权访问漏洞学习

一、Redis常见用途 1. Redis介绍 全称与起源: Redis全称Remote Dictionary Service(远程字典服务),最初由antirez在2009年开发,用于解决网站访问记录统计的性能问题。发展历程: 从最初仅支持列表功能的内存数据库,经过十余年发展已支持多种…

4.27搭建用户界面

更新 router下面的index.js添加新的children 先区分一下views文件夹下的不同vue文件: Home.vue是绘制home页面的所有的表格。 Main.vue是架构头部和左侧目录的框架的。 研究一下这个routes对象,就可以发现重定向redirect的奥妙所在,我们先把…

【MySQL】(8) 联合查询

一、联合查询的作用 由于范式的规则,数据分到多个表中,想要查询完整的信息,就需要联合查询多张表。比如查询学生的学生信息和所在班级的信息,就需要联合查询学生表和班级表。 二、联合查询过程 案例:查询学生姓名为孙…

图漾官网Sample_V1版本C++语言完整参考例子---单相机版本

文章目录 1.参考例子 主要梳理了图漾官网Sample_V1版本的例子 1.参考例子 主要增加了从storage区域读取相机参数的设置,使用图漾PercipioViewer软件,如何将相机参数保存到srorage区,可参考链接:保存相机参数操作 保存参数设置 注…

关于本地端口启动问题

如何启动一个本地端口 1. Node.js (使用Express框架) 使用node.js的方法 注意:下列bash命令最好在管理员权限运行的cmd窗口中进行,否则可能会有权限错误 首先,确保您已经安装了Node.js和npm。然后,创建一个新的Node.js项目并安…

产销协同的作用是什么?又如何对各部门发挥作用?

目录 一、产销协同的对象有哪些? 1. 客户需求 2. 市场趋势 3. 供应链伙伴 4. 企业战略目标 二、产销协同的作用是什么? 1. 提高客户满意度 2. 降低企业成本 3. 增强市场竞争力 4. 优化资源配置 三、产销协同对各部门怎么发挥作用?…

React Router v7 从入门到精通指南

一、设计思想与核心原理 1. 设计哲学 组件即路由&#xff1a;路由以 <Route> 组件形式声明&#xff0c;与 React 组件树深度集成声明式导航&#xff1a;通过 <Link> 和 useNavigate 实现无刷新路由跳转动态匹配机制&#xff1a;路径参数、通配符、优先级匹配规则…

Python爬虫实战:获取网yi新闻网财经信息并做数据分析,以供选股做参考

一、引言 在财经领域,股市信息对投资者意义重大。网yi新闻作为知名新闻资讯平台,其股市板块蕴含丰富的最新股市热点信息。然而,依靠传统人工方式从海量网页数据中获取并分析这些信息,效率低下且难以全面覆盖。因此,利用爬虫技术自动化抓取相关信息,并结合数据分析和机器…