数据结构
数据结构是计算机中存储、组织数据的方式。通常情况下,精心选择的数据结构可以带来最优效率的算法。
举例:现在有一些书架,还有一堆图书,你要怎样把它们放到书架上去呢?换言之说,有一堆数据,给了你一些存储空间,你要怎么把这些数据存起来呢?
一、关于数据对象的逻辑结构
比如说,我们一开始把书架想象成简单的一长条,这么一层的架子,然后所有的书是一个一个挨着放的,除了一头一尾的书以外,每一本书的前面和后面都只有一本书,如果每一本书都有一个编号的话,那么这一个编号对应的就是一本书,那么这种结构是一对一的结构,我们管它叫线性结构。
另外一种组织方式就是先把图书分类,如果我给每一个类一个编号的话,那么这一个类别的编号里面对应着很多本书,那么这是一个一对多的逻辑结构,这个结构有个名字叫做树。
再说图书馆,假设我们还统计这样一些信息:这一本书都有那些人买过,买了这本书的人还买过其它的什么书,于是呢,其实是一本书对应着很多人,而一个人又对应了很多本书,这是一个多对多的、很复杂的一个关系网,那么这个关系网对应的逻辑结构叫叫做图
二、关于对象的物理存储结构
除了逻辑结构之外,我们还有数据对象再计算机里面的物理存储结构,也就是我们说的这些逻辑结构在机器的内存里到底要怎么放,是连续放呢还是东一个西一个隔开放呢?也就是说用一个数组来存它呢,还是用一个链表来存它呢?这个就属于物理存储结构。
抽象数据类型(ADT)
数据类型,它包含了两个东西,一个是“数据对象集”,就是我们说的“是什么东西”,第二个是“数据集合相关联的操作集”,对数据的操作。类似于Java的类,把这个数据集跟它相关的操作集封装在一个类里面。
抽象,抽象的意思就是“不具体”,就是说,描述数据类型的方法是不依赖于具体的实现的。
例子:比如栈和队列这两种数据结构,分别使用了数组和链表来实现,比如栈,对于使用者只需要知道pop()和push()方法或其它方法的存在以及如何使用即可,使用者不需要知道使用的数组或是链表来实现的。