Contents

很多开发人员在学习编程的过程中,往往会轻视数据结构和算法对于编程的意义。

原因大致有:

  • 老师枯燥的授课(只讲原理不讲应用)
  • 不知道结构和算法的具体应用
  • 以学数学的态度学习计算机,死记硬背
  • 一般的开发工作在没有数据结构扎实的基础下也能进行

但是,这如上的原因不能成为我们不重视数据结构的理由。

那么,数据结构的意义是什么?

我理解的数据结构的意义,是找出综合时间和空间而言的极限最优解。

结构又分为逻辑结构和物理结构,比如数组是每门语言都包含的物理结构。而所有的逻辑结构,都可以由数组和链表实现。

比如数组的查找改查快,链表的增删快。综合其优点,于是有了链式哈希,哈希就像是数组和链表的结合。

比如说栈具有先进后出的特性,所以他用来实现函数内变量的存储,或者用来变量的临时存储以用于递归。栈的结构适用于树的先序遍历和图的深度有序遍历

比如说队列先进先出的特性,所以他适合用来维持秩序的,以及缓解一些会产生拥塞的情况。还有他先进先出的特性非常适合用来处理树的层次遍历和图的广度遍历

比如说二叉树的结构,本身就是一个递归的体现。树的一个应用场景就是依赖处理。树有先序后序层级的遍历,而二叉树只有中序。而算法中有名的快速排序和二分查找法都是基于二叉查找树这个结构。目前前端流行的require.js管理依赖关系都是基于树形结构

比如无向图,prim和kruskal用于最小生成树,作用是建立节点间的最小连接路线以降低成本。

比如有向图的应用场景,可以用在爬虫搜索和上。其中的最短路径法用于确定两点间的最短连接长度。有向图的深度广度遍历算法也是应用到编译原理中NFA(非确定有限状态机)转换DFA(确定有限状态机)上

综上,数据结构其实是在思维上的开阔,我认为算法是基于结构的,用合适的结构自然可以找到合适的算法。

Contents