这篇文章里面结合了百度百科较为正式的文章作为参考加上自己理解进行总结,但是有许多观点和正式文档有出入,希望看到这篇文章的人能够对数据结构有更清晰的了解,但如果有不准确的地方还请指正。
一、数据结构理解
以下内容是阅读参考资料后对数据结构自己的理解以及对百度百科关于数据结构词条的看法。
两种数据结构的分类方式:1)根据数据结构的使用目的分类 2)根据数据主要结构分类
1)定义
这里定义用最简单的的话总结。
定义:数据结构是在计算机中根据使用目的将数据合理组织的结构
2)数据结构的使用目的分类
1、数据的逻辑结构:研究在不同的业务逻辑中怎样的数据组织方式符合业务逻辑。
2、算法的数据结构:研究在不同算法中使用那种数据组织方式最高效。
3、数据的存储结构:研究在不同储存介质中那种数据组织方式最高效。
在词条中称之为研究对象,主要分为数据的逻辑结构 、数据的物理结构 、数据存储结构,个人认为数据的物理结构 、数据存储结构表达的内容重复,所以重新整理。根据总结的概念数据结构是根据使用目的划分的所以这里就将研究对象改为使用目的分类,主要分为三类:数据的逻辑结构、算法的数据结构、数据的存储结构,这三类分别对应了数据的逻辑、运算、和存储。
从数据的使用目的其实可以按照这三个目的进行分类,但是在实际开发中大多数的数据结构需要同时考虑逻辑、运算和储存所以这种分类类方式指作为对数据结构的理解。
另外例举一下比较明显的按照使用目的分类的数据格式,在音视频开发中常用MP4、MP3等格式储存到硬盘中,这种格式就是典型的根据数据储存而设计的数据结构,这种结构的特点就是在不同储存介质将数据的主体部分进行压缩达到高效存储,当视屏从硬盘读取到内存时一般都会经过解压,但是解压后并不能直接解压成为RGB的颜色值,解压后是YUV数据这种数据不能像RGB数据那样根据值就知道它的逻辑含义,所以YUV就是针对算法的数据结构,而RGB就是针对逻辑的数据结构。如果没做过音视屏开发可能不能理解以上所说的针对逻辑的算法结构和针对算法的数据结构。当然音视频只是相对明显的例子,另外还可以从链表和树种理解什么是针对算法的结构和针对逻辑的结构。链表、树都是在不连续的内存空间中通过收尾指针联系起来,你无法直接通过收尾指针就知道前后的顺序,然而通过一定的算法将你需要的数据从链表或者树种查找出来放到数据集合中你就能看明白你所需要的数据以及他们的前后顺序,所以链表和树是针对算法的数据结构,而数组集合就是针对逻辑的数据结构。
3)数据结构主要分类
在百度词条总例举了8个常用的数据结构,以及在研究目的中发现了另一种分类,我发现这种分类方式更符合我们的日常开发以及学习研究。在词条中只将其分为四个分类,我将词条中的8个常用数据结构分别分入到了四个分类中,这样8个常用数据结构和这四个类别也能一一对应,但是我发现这8个常用数据结构其实只是在研究算法过程中常使用到的数据结构,其中并不包含我们在开发中根据不同业务逻辑所指定的数据结构(例如在图书管理系统中Book、Student的数据结构),所以这四个分类只是狭义上的数据结构分类,因为它只是表达了在研究算法中使用到的数据结构。根据实际开发情况我将四个分类扩展为五个分类,添加了一个对象结构,对象结构就是在我们开发中的数据结构,经过扩展我们所用到的数据结构也就可以分门别类的放入到这五个分类中方便我们学习和记忆数据结构。
除了添加了一个分类外我将各分类的解释根据我的理解重新做了总结。
1、对象结构:连续空间,描述一个对象的数据组合。例如:图书管理系统中Book、Student
对象结构是数据结构的最小单位,开发过程中根据不同用途定义的结构体。
2、集合结构:连续空间,中的同一种类型的数据组。例如:数组。
集合结构是一个连续的内存空间,用于储存相同的对象结构的集合结构。
3、线性结构:不连续空间,数据之间是线性关系结构。例如:栈、队列、链表、散列表
性线性结构是 把在不连续内存空间的对象结构按照一定方法逐个链接起来的数据结构。
4、树型结构:不连续空间,数据之间是一对多且有方向的数据结构。例如:树、堆
树型结构是 把在不连续内存空间的对象结构按照一对多的关系向一个方向链接起来的数据结构。
5、图形结构:不连续空间,数据之间是一对多且无方向的数据结构。例如:图
图形结构 把在不连续内存空间的对象结构按照一对多的关系无方向链接起来的数据结构。
另外这里将这五个分类的区别做了总结,目的是方便分类还有就是验证这五个分类的完整性。
对象结构与集合结构的区别:对象结构使用不同的数据类型描述一个对象,集合结构是相同类型数据的集合。
集合结构与线性结构的区别:集合结构是连续空间储存数据,线性结构是按照一定的方法将不连续的对象链接起来。
线性结构与树型结构的区别:线性结构是一对一的链接方式,树型结构是一对多的链接方式。
树型结构与图形结构的区别:树型结构是自上而下有方向的链接,图形结构是没有方向的链接。