什么是数据结构

什么是数据结构?

关于“数据结构”一词的解释众多,比如维基百科中对于“数据结构”的定义是这样的:“数据结构是计算机中存储、组织数据的方式”。又如《数据结构与算法分析》中的解释:“数据结构是ADT(抽象数据类型 Abstract Data Type)的物理实现”

.....很多资料中对于“数据结构”的解释都相当晦涩抽象,有没有一种比较生动形象的例子可以来介绍数据结构呢?在这里,我拿图书馆里的书来举个例子。

图书馆的书籍管理对于很多人是个非常麻烦的事情,书籍的数量通常多达万余册。假如我们有一个刚刚建好的图书馆,管理员需要将新书全部放入书架中,那么我们要如何规划图书的摆放呢?新书如何放入?怎么快速找到指定书?是随意放?如果选择随意放的话,借书就会是个非常麻烦的事,每借一次书,就需要将书架上的书翻个遍。有一个比随意放聪明点的方法,即利用“二分查找”的思想。我们可以按照所有书籍的首字母进行排序放置,比如《数据结构与算法分析》的首字母就是S,那么我们书架上的书籍就是A-Z的分布。当需要查找S开头的书时,就从书架的中间开始查找,如果发现中间(1/2处)的书籍是L开头的书,那么说明S开头的书还要在后面,那么就从后半段(1/2后)开始查找,后半段的中间(3/4)的书籍开头是W的话,那么说明我们的书籍就在1/2到3/4这一部分书中,接着按照二分查找的思想找下去.....这个方法是比随意放聪明多了,可是还是很繁琐。那么比较合理的一个方法就是先将书籍分类,然后再按照二分查找的方法摆放,这样会省很多力气。

由此可知,当查询一个数据怎么组织的时候,其实是和数据的规模有关,不同的规模,组织难度大不相同。解决问题方法的效率,和数据的组织形式有关。在进行编写程序的时候,效率通常还和空间的利用效率、算法的巧妙程度有关。

那么数据在计算机中的组织方式有哪些呢?

数据的逻辑结构分为线性结构和非线性结构。 
常用的线性结构有:线性表,栈,队列,双队列,数组,串。 
常见的非线性结构有:二维数组,多维数组,广义表,树(二叉树等),图,堆。

首先从逻辑结构上讲。如果我们把所有的书都放在同一层,所有的书都是紧挨着,除了第一本和最后一本,其余的所有书都是前后各有一本书,给所有的书贴上编号,每个编号对应一本书,一对一的逻辑结构,在数据结构中叫做线性结构。第二种,把图书分类,一类书对应着很多本不同的书,这是一对多的逻辑结构,在数据结构中用树来表示。第三种,我们要查询一本书都是何人借过?这个人还借过别的什么书?这就是多对多的逻辑,我们用图来表示。

然后从物理存储结构上来讲,这些逻辑结构在机器里如何放置?连续放还是一个东一个西无序的放?也就是是用数组还是链表?

以上就是数据的组织方式。

 

posted @ 2017-10-29 23:09  珵城  阅读(3084)  评论(0)    收藏  举报