眼看马上要找工作了,虽然之前学习过数据结构这门课程,但已经是四年前的事情了,就以前的教材进行了一个系统的复习,下面是记的一些笔记。
作为一个程序员,要编程来实现某个功能,最最基本的是数据结构与算法,因为程序 = 数据结构 + 算法
。
数据结构
数据结构的背景:为了编写出一个“好”的程序,必须分析待处理的对象的特性以及各种处理对象之间存在的关系。
学科定义:数据是一门研究非数值的计算程序设计问题中和计算机的操作对象以及它们之间关系和操作等的学科。
数据结构的定义:相互之间存在一种或多种也定关系的数据元素的集合。
分类:
- 集合:结构中元素之间除了同属一个集合关系外,无其他关系;
- 线性结构:结构中元素之间存在一对一的关系;
- 树形结构:结构中元素之间存在一对多的关系;
- 图状结构或网状结构:结构中元素之间存在多对多的关系。
结构定义中的关系是描述数据元素之间的“逻辑关系”(或称逻辑结构),数据结构在计算机中表示(映像)称为“物理结构”(或称存储结构)。
数据的类型:
- 原子类型:非结构的,如:int,char,bool等;
- 结构类型:数组等。
算法
算法是对特定问题求解步骤的一种描述,它是指令的有些序列,其中每一条指令表示一个或多个操作。
算法还具有下列5个重要的特性:
- 有穷性
- 确定性
- 可行性
- 输入
- 输出
算法设计要求:
- 正确性
- 可读性
- 健壮性(鲁棒性)
经典算法:
- 分治法
- 动态规划
- 贪心算法
- 回溯法
- 分支定界法
算法的效率度量:
- 时间复杂度
- 空间复杂度
基本数据结构
基本数据结构:
- 线性表
- 栈和队列
- 字符串
- 数组和广义表
- 树和二叉树
- 图
- 查找表:由同一类型的数据元素(或记录)构成的集合。
- 静态查找表
- 动态查找表
- 哈希表
排序
排序是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列称一个按关键字有序的序列。
- 外部排序:
- 内部排序:
- 冒泡排序
- 快速排序
- 直接插入排序
- 希尔排序
- 简单选择排序
- 堆排序
- 归并排序
- 基数排序