数据结构-逻辑结构&存储结构

之前学习数据结构基本都是数组、链表、树、图一个个学过来。很少去总结他们的内在特点和联系。到底什么是数据结构呢?数据结构的三要素:

  1. 数据的逻辑结构。
  2. 数据的存储结构。
  3. 数据的运算。

这篇博客重点总结下数据的逻辑结构和存储和结构。

1.逻辑结构

1.1 集合结构

元素只是同属一个集合,元素之间没有任何逻辑联系。

1.2 线性结构

线性结构中的元素之间是一对一的关系。

1.3 树形结构

树形结构中的元素之间是一对多的关系。

1.4 图状结构

图状结构中的元素之间是多对多的关系。

2.关于逻辑结构的疑问思考

2.1 双向链表是线性结构么?

刚接触到逻辑结构的四种分类时候,有个疑问:双向链表,还是线性结构么?双向链表,每个节点(首位除外)都有一个前驱和一个后继,每个元素即是其它一个元素前驱同时也是另一个元素的后继,看起来一个元素不再对应一个元素而是对应两个元素。所以这样看起来双向链表不是线性结构而是图状结构。

这样理解的问题在哪里呢?

A、B两个元素,“A是B的前驱” & “B是A的后继”。这两句话看似表达了两个关系,实际上一件事。所以 B 有一个前驱节点A,有一个后继节点C。并不是 B 和A、C构成一对多的关系,只是 B 是 A 的后继,C 是 B 的后继的另一种表达。

所以,双向链表符合元素间是一对一的关系的定义,是线性结构。

3.存储结构

3.1 顺序存储

把逻辑上相邻的元素存储在物理位置上也相邻的存储单元里,元素之间的关系由存储单元的邻接关系来体现。

优点:可以实现随机存取,单个元素占用存储空间少。

缺点:需要连续的存储空间,不支持动态扩展,插入删除效率低。

3.2 链接存储

逻辑上相邻的元素在物理位置上不需要也相邻,借助指示元素存储地址的指针表示元素之间的逻辑关系。

优点:不要求连续的存储空间,支持动态扩展,插入删除效率高。

缺点:元素指针占用额外的存储空间,不支持随机访问,只能顺序访问。

3.3 索引存储

在存储元素信息的同时,还建立附加的索引表。索引表中的每一项称为索引项,索引项的一般形式是:(关键字,地址)。

优点:是检索速度快。

缺点:索引表会占用额外的存储空间,增加和删除数据时要修改索引表。

3.4 散列存储

又称为Hash存储,根据元素的关键字直接计算出该元素的存储地址。

优点:是检索、增加和删除结点的操作都很快。

缺点:散列函数计算增加耗时,散列函数不好可能出现元素存储单元的冲突。而解决冲突会增加时间和空间开销。