前言

笔者正在自学数据结构,深感书中的知识偏向理论代码,而对逻辑本身有些忽视。

主要是图少,字多,以至于学者学习之后对于逻辑的理解不够,最终沦为大学中常见的结果——背书。
(笔者接触过一些同学如何学习计算机,深感背书的危害)

为了帮助别人也帮助自己理解,我尝试着为常见的几种结构绘制一些动态图。由于时间仓促,尚未全部完成。

逻辑结构和存储结构

逻辑结构只考虑数据元素之间的关系,不考虑具体实现。
存储结构考虑在计算机中如何表示。

线性表

image.png

逻辑结构:

  • 所有数据按线性结构储存
  • 参考元素前面的元素称为前驱
  • 参考元素后面的元素称为后继
  • 除第一个外,每个元素只有一个前驱
  • 处最后一个外,每个元素只有一个后继

存储结构:

顺序存储:

image.png

  • 提前申请出所有需要的内存地址
  • 逻辑位置相邻的数据元素物理位置也是相邻的
  • 插入数据时,插入位置之后的所有数据后移

优点:

  • 地址连续,查询速度快

缺点:

  • 长度固定,不能动态调整
  • 插入和删除元素时需要移动大量元素

线性表顺序存储.gif

链式结构:

image.png

  • 使用不连续的内存地址
  • 将数据元素分为数据域和指针域
  • 数据域存放数据
  • 头指针指向第一个元素
  • 指针域指向下一个元素
  • 插入数据时,改变插入位置的指针即可

优点:

  • 大小可变,灵活又节约空间
  • 插入方便,只需改变指针

缺点:

  • 遍历速度慢需要挨个寻找地址

线性表链式储存.gif

逻辑结构:

image.png

  • 后进先出
  • 仅能在栈顶进行操作

存储结构:

顺序栈:

image.png

  • 和顺序表类似,一次申请一段连续的地址
  • 容量不固定,当初始容量用完后,再按设定的增量进行扩充
  • 需要两个指针base和top,分别指向栈底和栈顶
  • 插入数据时,top上移;删除数据时,top下移
  • 插入数据的位置是top当前指向的地址

栈顺序存储插入.gif
栈顺序存储出栈.gif

链栈

image.png

链栈与链表几乎一致

  • 使用不连续的内存地址
  • 将数据元素分为数据域和指针域
  • 数据域存放数据
  • 栈顶指针指向第一个元素
  • 指针域指向下一个元素

不同之处在于:

  • 插入数据时,栈顶指向新插入的元素,新元素的指针域指向原来的栈顶

链栈入栈.gif
链栈出栈.gif

队列(未完待续)

逻辑结构:先进先出

总结

  1. 本周最大的收获是,经过一番查找和对比,终于掌握了超低成本的GIF制作方法
  2. 动画制作是一门重要技能,再细致的语言描述也不如一张图片更生动,再生动的图片也不如一段动画更直观
  3. 未来我会慢慢学完整本数据结构,之后的每一个知识点都会做一个动画,敬请期待

版权声明

本文作者:河北工业大学梦云智开发团队 - 刘宇轩
新人经验不足,有建议欢迎交流,有错误欢迎轻喷

LYX6666
1.6k 声望73 粉丝

一个正在茁壮成长的零基础小白