数据结构与算法
第一章 预备知识
一、使用数据结构的三个原因:效率,抽象,重用性。
二、算法设计的一般方法:1.随机法(eg:快速排序)
2.分治法:步骤:分解,求解,合并
Eg:归并排序
3动态规划
4贪心法
5近似法
三、软件工程:模块化,可读性,简洁性,一致性
第二章 指针操作
存储空间分配:数据存储空间分配(1直接声明一个变量。2运行时动态的分配存储空间)
注:当声明一个指针时,仅仅只是为指针本身分配了存储空间,并没有为指针所引用的数据分配空间。
第三章 递归
一、基本递归:重复调用函数自身实现循环
二、尾递归:所有递归形式的调用都出现在函数的末尾
第四章 算法分析
一、最坏情况分析
二、O表示法:指明函数的上限值,表示算法增长规律的方法
三、复杂度:O表示法
第五章 链表
链表:一组元素以一种特定的顺序组合或链接在一起
一、单链表:单独指针
二、双向链表:两个指针,可正向,可反向
三、循环链表
链表的应用包括:邮件列表,滚动列表
第六章 栈和队列
定义:检索数据的常用结构
栈:后进先出
队列:先进先出
第七章 集合
特点:1无序2每个成员都只在集合中出现一次
第八章 哈希表
链式哈希表
开地址哈希表
第九章 树
二叉树:将结点按照层次结构组织起来的数据结构
树的周游算法:先序遍历(根,左子,右子),中序遍历(左子,根,右子),后序遍历(左子,右子,根),层级遍历(首先根,然后依次向下层处理,按照从左到右的顺序访问每层的结点)
树的平衡:满足所有树的叶子结点都在同一层上,或者所有叶子结点都在最后两层上,且倒数第二层是满的
第十章 堆和优先队列
堆:一种树形组织,使我们能够迅速确定包含最大值的结点。堆是一颗二叉树,子结点比父结点小的堆称为最大值堆,子结点比父结点大的值称为最大值堆
优先队列:从堆自然衍生而来的数据结构
第十一章 图
图:一种灵活的数据结构,一般作为一种模型用来定义对象之间的关联或联系。对象由顶点表示,而对象之间的关系或关联则通过顶点之间的边来表示
组成:顶点和边,顶点代表对象,边则建立起对象之间的关系或关联
第十二章 排序
一、 插入排序
从无序数据集中取出一个元素,扫描已排好序的数据集,并将它插入有序集合合适的位置上。不需要额外的存储空间,最佳应用场景是对一个小的数据集合进行递增排序
优点:当将元素插入一个有序数据集中时,只需要对有序数据集最多进行一次遍历,而不需要完整地运行算法。
二、 快速排序
快速排序是一种分治排序算法,解决一般问题的最佳算法,同插入排序一样,快速排序也属于比较排序的一种,而且不需要额外的存储空间最佳应用场合是应用于大型数据集。
三、 归并排序
归并排序是另一种运用分治法排序的算法,与快速排序一样,它依赖于元素之间的比较来排序,需要额外的存储空间来完成排序过程。最佳应用场合是超大数据集中。
分:将数据集等分为两半。
治:分别在两个部分用递归的方式继续使用归并排序法;
合:将分开的两个部分合并成一个有序的数据集;
四、 计数排序
计数排序是一种高效的现行排序,它通过计算一个集合中元素出现的次数来确定集合如何排列,不需要进行元素比较。只能用于整型或者那些可以用整型来表示的数据集合。
五、 基数排序
基数排序是另外一种高效的线性排序算法。方法是将数据按位分开,并从数据的最低有效位到最高有效位进行比较,依次排序,从而得到有序数据集合。
六、 二分查找