数据结构与算法(1)- 数据结构概览

声明:虽然本系列博客与具体的编程语言无关。但是本文作者对c++相对比较熟悉,其次是java,所以难免会有视角上的偏差。举例也大多是和这两门语言相关。

今天先来看看有哪些常见的数据结构(C++ STL视角,其他应该也大同小异吧。哈哈,我猜的!)。所以之后的内容大多从STL出发,然后顺便对比下java中对应的数据结构。作为一名合格的软件开发人员,我们有时不需要深入对这些结构进行深度了解(原子级了解),但是至少我们得知道这些结构的基本原理、构成以及代价(时间空间代价)。如果你想对这些结构深度了解,建议阅读《STL源码剖析》这本书,java的话可以直接读相关的源码就行了。这个系列博客只会分析这些结构的基本原理、代价以及应用时注意的细节,而不会用代码实现。那么废话不多说,先来个表:

C++ STL里将上表出现的这些重要的数据结构称为容器。容器也就是装东西之物,数据结构乃是装数据之物。这么理解数据结构其实很简单。说白了数据结构就是构造了一块空间,然后制定了/构造了一些规则来更方便的管理和操作这些数据。那么根据“数据在容器中的排列”特性,这些数据结构可以分为序列式(sequence)和关联式(associative)两种。

所谓序列式容器,其中的元素都可序(ordered),但未必有序(sorted)。  --侯捷

所谓关联式容器,观念上类似关联式数据库(实际上则简单许多):每笔数据(每个元素)都有一个键值(key)和一个实值(value)。       --侯捷

所以这下子我们就清楚啦,表1左侧的数据都是可序的,右侧的数据数据都是由键值对构成的。那么他们到底有啥区别呢,又有什么性能上的差异呢,空间占用又是啥情况呢?这些问题就随着我们的博客一步一步来揭开咯。

小秘密:下一篇将讲解序列容器中的vector。另外可以透漏个小秘密,根据数据组织的不同序列式容器大致可以分为三种哦!一是基于数组的,一是基于列表,再是基于树结构的哟。

See you next time. Happy Coding!!!

我的GitHub???????
---------------------
作者:dnhua
来源:CSDN
原文:https://blog.csdn.net/dnhua/article/details/84658982
版权声明:本文为博主原创文章,转载请附上博文链接!

原文地址:https://www.cnblogs.com/dnhua/p/10087954.html

时间: 2024-10-11 14:21:28

数据结构与算法(1)- 数据结构概览的相关文章

[0x01 用Python讲解数据结构与算法] 关于数据结构和算法还有编程

忍耐和坚持虽是痛苦的事情,但却能渐渐地为你带来好处. ——奥维德 一.学习目标 · 回顾在计算机科学.编程和问题解决过程中的基本知识: · 理解“抽象”在问题解决过程中的重要作用: · 理解并实现抽象数据结构: · 复习Python编程语言 二.写在前面 自第一台电子计算机使用线路和开关传达人类的指令以来,我们编程的思考方式有了很大的改变,在很多方面,计算机技术的发展为计算机科学家提供了众多的工具和平台去实现他们的想法.高性能理器,高速网络和大内存使得计算机研究者必须掌握在这样复杂的螺旋式通道中

数据结构与算法系列研究四——数组和广义表

稀疏矩阵的十字链表实现和转置 一.数组和广义表的定义 数组的定义1:一个 N 维数组是受 N 组线性关系约束的线性表.           二维数组的逻辑结构可形式地描述为:           2_ARRAY(D,R)              其中 D={aij} | i=0,1,...,b1-1; j=0,1,...,b2-1;aij∈D0}              R={Row,Col}              Row={<aij,ai,j+1>|0<=i<=b1-1;

数据结构与算法系列研究三——字符串

字符串的研究和KMP算法分析和实现 一.串的定义 串是计算机非数值处理的基本对象.串是一种特殊的线性表,它的每个结点仅由一个字符组成,并且单个元素是无意义的.    1.串(string):是由0个或多个字符组成的有限序列,记作:          S="a1a2...an"  (n>=0)          其中:S是串名,两个双引号括起来的字符序列为串的值.双引号不属于串.                   ai(1<=i<=n)为字母.数字或其它符号.    

如何学好算法和数据结构之我见——51CTO名家访谈实录

最近受邀参加"51CTO名家访谈"就算法与数据结构话题论道做答,希望这些问题能够解答各位读者朋友的心中疑惑. 活动网址如下: http://book.51cto.com/act/exp/zuofei 下面是活动中Q&A环节我的一些作答,希望可以作为正在学习算法的朋友们的一些经验参考. 算法到底是什么? 非形式地说,算法是为实现某个任务而构造的简单指令集.以日常用语来说,算法又称为 过程或者方法.算法在数学中也起着非常重要的作用.古代数学文献中就包含有执行各种各样计算任务的算法描

数据结构与算法系列研究二——栈和队列

栈和队列的相关问题分析 一.栈和队列定义 栈和队列是两种重要的数据结构.从结构特性角度看,栈和队列也是线性表,其特殊性在于它们的基本操作是线性表的子集,是操作受限的线性表,可称为限定性的数据结构:从数据类型角度看,其操作规则与线性表大不相同,是完全不同于线性表的抽象数据类型.                    图1 栈的结构                                                 图2 队列的结构   1.1.栈是限定在表的一端进行插入和删除操作的线性

编程中最没用的东西是源代码,最有用的东西是算法和数据结构(转载)

重要的不是你用什么开发,而是你在开发什么. 程序=算法+数据结构 过程=对象+属性+方法+事件 程序员的秘诀是:编程.编程.再编程. 编程的秘诀是:思索.思索.再思索. 自由固不是钱所能买到的,但能够为编程而卖掉. 编程为了生活,生活为了编程. 不要认为编程是一项任务,其实是一次让人羡慕的机会! 编程之乐何处寻,数点梅花天地心. 假如编程易懂得,那么程序员就不会热情地写出注释,也不会有得到编程的快乐. 编程中最没用的东西是源代码,最有用的东西是算法和数据结构. 编程之久除了算法和数据结构,什么也

【数据结构与算法】

数据结构与算法概述 数据结构的定义 我们如何把现实中大量而且非常复杂的问题以特定的数据类型(个体)和特定的存储结构(个体的关系)保存到相应的主存储器(内存)中,以及在此基础上为实现某个功能而执行的相应操作,这个相应的操作也叫做算法. 数据结构 == 个体 + 个体关系 算法 == 对存储数据的操作 数据结构的特点 数据结构是软件中最核心的课程. 程序 = 数据的存储 + 数据的操作 + 可以被计算机执行的语言. 算法 衡量算法的标准 时间复杂度 指的是大概程序执行的次数,而非程序执行的时间. 空

数据结构与算法学习之(介绍)

数据结构与算法介绍 数据结构与算法的重要性 算法是程序的灵魂,优秀的程序可以在海量数据计算时,任然保持高速运算 框架和缓存技术的核心时算法 高薪 数据结构与算法的关系 数据(data)结构(Structure)是一门研究组织数据方式的学科,有了编程语言也就有了数据结构 程序 = 数据结构 + 算法 数据结构是算法的基础 数据结构包括线性结构与非线性结构 线性结构 线性结构是最常用的数据结构,特点是元素之间存在一对一的线性关系 线性结构有两种不同的存储结构,即顺序存储结构和链式存储结构 线性结构常

数据结构与算法学习(介绍)

数据结构与算法介绍 数据结构与算法的重要性 算法是程序的灵魂,优秀的程序可以在海量数据计算时,任然保持高速运算 框架和缓存技术的核心时算法 高薪 数据结构与算法的关系 数据(data)结构(Structure)是一门研究组织数据方式的学科,有了编程语言也就有了数据结构 程序 = 数据结构 + 算法 数据结构是算法的基础 数据结构包括线性结构与非线性结构 线性结构 线性结构是最常用的数据结构,特点是元素之间存在一对一的线性关系 线性结构有两种不同的存储结构,即顺序存储结构和链式存储结构 线性结构常

javascript数据结构和算法 一(本书组织结构)

环境 我们在本书中使用的Javascript编程环境是基于SpiderMonkey 引擎的javascript shell. 第一章讲述了在你的环境中下载 shell的介绍. 其他的shell例如Nodejs同样可以工作,虽然你可能需要简单的改变下代码. 除了shell,唯一你要准备的就是文本编辑器. 本书的组织结构 第一章:javascript语言的概览,至少是在本书中使用的javascript的一些特征.这一章同时展示了在整本书中使用的一些编程风格. 第二章:讨论了在计算机科学中最通用的数据