数据结构复习大纲

前言:1976年,一个瑞士计算机科学家写一本书《Algorithms + Data Structures = Programs》。即:算法 + 数据结构 = 程序。40多年过去了,这个等式依然成立。

数据是程序的核心要素,因此数据结构的价值不言而喻。无论你在写什么程序,你都需要与数据打交道,比如员工工资、股票价格、杂货清单或者电话本。在不同场景下,数据需要以特定的方式存储,我们有不同的数据结构可以满足我们的需求。

不管是面试还是工作,最重要的从来不是代码语言工具,而是算法思想。算法思想决定程序员的上限,所以学好数据结构至关重要。

本科学的用来考试了,以前不是很重视,现在想重新拾起。

 

一、什么是数据结构?

数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。

 

二、为什么我们需要数据结构?

通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。

程序员的目标是为当前的问题选择最优的数据结构。

 

三、数据的逻辑结构

指反映数据元素之间的逻辑关系的数据结构,其中的逻辑关系是指数据元素之间的前后件关系,而与他们在计算机中的存储位置无关。
①线性结构
数据结构中的元素存在一对一的相互关系;
②树形结构
数据结构中的元素存在一对多的相互关系;
③图形结构
数据结构中的元素存在多对多的相互关系。

 

四、常用的八种数据结构

我直接按照《数据结构、算法语言与应用 C++描述》教科书大纲和自己常遇到的算法问题安排了下面的复习顺序。

  • 数组

     合并两个有序数组

     找到数组中第一个重复/不重复的整数

  • 链表

     合并链表

     反转链表

     线程栈  栈桢 

     括号匹配

     老鼠迷宫

  •  队列

     电路布线

     图元识别

  • 散列表(即哈希表)

      LZW文本压缩

     深入理解 HashMap底层实现原理

  • 树:

      二叉搜索树:前序、中序和后序遍历

      字典树(前缀树)

      红黑树

      B+树:数据库索引

  • 堆(即优先级队列):

     堆排序

    TopN问题

     霍夫曼编码

  • 图:

     BFS

     DFS

    Dijkstra单源最短路径

    最小生成树算法

  • 算法设计思想

     贪婪算法:拓扑排序、Dijkstra单源最短路径

     分而治之:快速/归并排序

     动态规划

     回溯

     分支定界

     其实还有更高级且常用的方法,如线性规划、整数规划、中心网络、遗传算法和模拟退火。上文提到的书没有涉及,

    有兴趣的同学可以去了解一下  《算法导论》。

五、各种基础排序算法和时间复杂度计算

 

参考链接:

代码面试需要知道的8种数据结构

面试题目汇总(JAVA算法/数据结构)

 

 

 

你可能感兴趣的:(数据结构与算法)