一切学习的本质都是从生活中的实际问题出发。
当我们遇到一个问题,先需要解决两个问题:
- 如何将数据储存在计算机中。
- 用什么方法策略解决问题。
前者所指便是数据结构,后者便是算法。两者相互依存,单独存在没有意义。
为什么要学习数据结构?
(1)学习数据有效存储的方法。
通过学习数据结构,更加准确和深刻地理解不同数据结构之间的共性和联系,学会选择和改进数据结构,高效地设计并实现各种算法,这才是数据结构的精髓。
(2)处理具有复杂关系的数据
并不是所有问题都能简单的调用库函数解决。我们需要运用所学的数据结构知识,高效处理具有复杂关系的数据。
什么是数据结构?
数据是计算机中的信息总和,而结构是指数据之间的关系,数据结构就是将数据及其之间的关系有效地存储在计算机中。
数据在计算机中的存储及获取
数据在计算机中的主要存储在两个位置:
- 内存
- 外存
内存和外存相比的不同点:
内存:
- 存储速度快
- 容量小
- 断电后不保留
- CPU可以直接访问
外存:
- 存储速度慢
- 容量大
- 断电后保留
- CPU要通过内存才能访问外存。
内存的基本单位是存储单元,一般一个存储单元对应一个字节。外存也可以将每一个扇区抽象成一个存储单元。这些存储单元一个个的连在一起,每个都有属于自己的编号,也就是地址。数据的存放便是放入这些存储单元中。
而当我们存放数据时,便涉及到两种存放策略:
- 顺序存放
- 间接存放
内存使用顺序存放数据:
- 内存的空间利用率高
- 碎片(就是未使用到,浪费的空间)少
- 删除旧有的数据很容易
解释:因为是顺序存放,当其中有内容被添加或删除,被影响的存储单元都要相应的后移或前移来保证地址相连。而内存存储速度快,调整存储单元也不会需要太大的时间开销。而正因为地址是一个连着一个,也保证了不会有太多的碎片。
外存使用间接存放:
- 内存存储速度慢,如果当有内容被添加或删除,需要像内存那样调整的话,时间开销太大。
- 如果不能像内存那样调整存储单元地址,又采用顺序存放,那么当有内容被删除时,原内容空出的空间不一定能够放入新内容。而若采用间接存放,原内容空出的空间加上地址之间空余的空间更有可能放入新的内容,可以尽可能减少碎片。
接下来我们便需要找到我们所需要的数据进行操作。
- 对于顺序存放数据:
通过头地址、索引、下标寻找便可以很方便的寻找到元素。
- 对于间接存放的数据:
那么我们就要在一个存储单元上面标记下一个存储单元的位置,这个标记就是下一个存储单元的地址(指针)。
我们可以通过这个指向关系,找到我们所需要的数据。