前言
本篇博客是整个数据结构知识点梳理的起点,通过本篇博客可以跳转到其他与数据结构相关的知识,整个系列文章在不断的更新中,需要花费上一点时间。关于一些名词的意思这里就不多赘述了,主要讲讲在我学习数据结构与算法的时候认为比较重要的概念。
数据结构绪论
一、数据的逻辑结构与物理结构
1.逻辑结构
逻辑结构即指数据在逻辑上的相互关系,是人理解或想象数据样貌的方式,理解数据的逻辑结构对学校数据结构乃至后续使用和开发算法都至关重要 。逻辑结构有以下四种:
- 集合结构
除同属一个集合外没有其他关系 - 线性结构
元素之间是一对一的关系 - 树形结构
元素之间是一对多的关系 - 图形结构
元素之间是多对多的关系
不同的逻辑结构的差异主要体现在对应关系上面
2.物理结构
物理结构就是数据实际在计算机中的存储结构,这个把握物理结构有助于我们的分析一种数据类型或者一种算法的时间和空间复杂度是开发出节约高效算法的基础。物理结构分为两种:
- 顺序存储结构
即数据在计算机中是连续存储的,同一组数据在占用一块连续的内存,例如我们刚开始学习编程语言用到的数组就是一个经典的顺序结构 - 链式存储结构
用链式存储结构的数据在计算机中不是连续存储的,也就是零零散散分散在计算机内存的各个角落,那我们要如何将这些数据串联起来呢?这就需要我们牺牲一点空间,来存储每个元素后一个元素的位置 - 两种存储结构的比较
比较点 | 顺序存储结构 | 链式存储结构 |
---|---|---|
灵活性 | 线性存储结构在插入删除时,为了维持其在物理存储上连续的结构,必须要移动大量的元素 | 由于链式存储结构在物理结构上并没有严格的前后关系,所以链式存储结构在插入和删除时性能比前者要好 |
空间性能 | 一个萝卜一个坑,顺序存储结构要啥就存啥 | 链式存储结构每个元素为了指出他下一个元素的位置,往往需要多用上一个指针,这使得他的空间性能不够完美 |
二、抽象数据类型(Abstract Data Type,ADT)
他的确切定义是一个数学模型及定义在该模型上的一组操作,这东西一看感觉就和他的名字一样抽象,其实就可以直接把他看成c的结构体加一系列函数或者c++的类。通过对一堆基本数据结构的叠加构成我们所想要表达的对象,比如说人,我们想要通过身高,年龄,性别,学历等(根据问题而定)数据来刻画这个人(抽象数据类型)那就把他们封装成结构体就好了,如果问题里还说要刻画这个人在吃饭(操作),很简单再写一个关于吃饭的函数就好,然后把数据和操作打包,注意他的结构,整个东西就叫做抽象数据类型