前言
笔者正在自学数据结构,深感书中的知识偏向理论和代码,而对逻辑本身有些忽视。
主要是图少,字多,以至于学者学习之后对于逻辑的理解不够,最终沦为大学中常见的结果——背书。
(笔者接触过一些同学如何学习计算机,深感背书的危害)
为了帮助别人也帮助自己理解,我尝试着为常见的几种结构绘制一些动态图。由于时间仓促,尚未全部完成。
逻辑结构和存储结构
逻辑结构只考虑数据元素之间的关系,不考虑具体实现。
存储结构考虑在计算机中如何表示。
线性表
逻辑结构:
- 所有数据按线性结构储存
- 参考元素前面的元素称为前驱
- 参考元素后面的元素称为后继
- 除第一个外,每个元素只有一个前驱
- 处最后一个外,每个元素只有一个后继
存储结构:
顺序存储:
- 提前申请出所有需要的内存地址
- 逻辑位置相邻的数据元素物理位置也是相邻的
- 插入数据时,插入位置之后的所有数据后移
优点:
- 地址连续,查询速度快
缺点:
- 长度固定,不能动态调整
- 插入和删除元素时需要移动大量元素
链式结构:
- 使用不连续的内存地址
- 将数据元素分为数据域和指针域
- 数据域存放数据
- 头指针指向第一个元素
- 指针域指向下一个元素
- 插入数据时,改变插入位置的指针即可
优点:
- 大小可变,灵活又节约空间
- 插入方便,只需改变指针
缺点:
- 遍历速度慢需要挨个寻找地址
栈
逻辑结构:
- 后进先出
- 仅能在栈顶进行操作
存储结构:
顺序栈:
- 和顺序表类似,一次申请一段连续的地址
- 容量不固定,当初始容量用完后,再按设定的增量进行扩充
- 需要两个指针base和top,分别指向栈底和栈顶
- 插入数据时,top上移;删除数据时,top下移
- 插入数据的位置是top当前指向的地址
链栈
链栈与链表几乎一致
- 使用不连续的内存地址
- 将数据元素分为数据域和指针域
- 数据域存放数据
- 栈顶指针指向第一个元素
- 指针域指向下一个元素
不同之处在于:
- 插入数据时,栈顶指向新插入的元素,新元素的指针域指向原来的栈顶
队列(未完待续)
逻辑结构:先进先出
总结
- 本周最大的收获是,经过一番查找和对比,终于掌握了超低成本的GIF制作方法
- 动画制作是一门重要技能,再细致的语言描述也不如一张图片更生动,再生动的图片也不如一段动画更直观
- 未来我会慢慢学完整本数据结构,之后的每一个知识点都会做一个动画,敬请期待
版权声明
本文作者:河北工业大学梦云智开发团队 - 刘宇轩
新人经验不足,有建议欢迎交流,有错误欢迎轻喷
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。