数据结构与算法大纲小结

第 1 章 基础
1、数据结构:存储、组织数据的方式
2、数据结构形式:物理+逻辑
3、算法是什么:方法+思路
4、算法复杂度:时间+空间
5、数据结构和算法关系:数据结构+算法=程序,两者是一体的
6、抽象数据类型ADT:数据+动作,目的是简化开发难度

第 2 章 快速入门
1、算法特性:量入出题题能解,行有意步步可为
a.输入: 算法具有0个或多个输入
b.输出: 算法至少有1个或多个输出
c.有穷性: 算法在有限的步骤之后会自动结束而不会无限循环,并且每一个步骤可以在可接受的时间内完成
d.确定性:算法中的每一步都有确定的含义,不会出现二义性
e.可行性:算法的每一步都是可行的,也就是说每一步都能够执行有限的次数完成
2、算法的评判标准:步骤数量*单位时间 = 代码执行总时间(算法复杂度)
3、时间复杂度:做一件事情需要花费多少时间,全称是渐近时间复杂度,特点:大O记法、规律趋势
4、时间复杂度分类:最优(梦想),最坏(保证),平均(参考)
5、时间复杂度规则:基本O(1)、顺序O(n)、循环O(n3)+O(logn)、分支(最坏)、抓主干
6、空间复杂度:代码量,目的是空间换时间
7、常见时间复杂度:数字最小,n越多,值越大,效率越低
8.timeit模块使用原则:
(1)生成测试对象,
(2)指定测试次数查看测试效果(平均执行时间)

第 3 章 数据结构 进阶
3.1 线性表
1、线性表定义:按线性关系存储数据的方式
2、线性表特性:最基本,最广的数据结构之一,是复杂的数据结构的实现基础
3、线性表常见存储模型:顺序表,链表
3.2 顺序表
1、顺序表形式:基本布局(同类数据)+元素外置(异类数据)
2、顺序表结构:一体式+分离式(灵活)
一体式:基本信息+存储空间
分离式:基本信息(地址容量+元素个数)+元素存储空间的逻辑地址
3、顺序表容量扩充策略:线性(频繁)+倍增(工作推荐)
4、顺序表元素增加:头[保序、O(n)]+尾[保序、O(1)]+位置[非保序、O(1)]
5、顺序表元素删除:头[保序、O(n)]+尾[保序、O(1)]+位置[非保序、O(1)]
3.3 单向链表
单向链表定义:基本单位-结点(内容+下一元素地址),多个结点结成串
单向链表术语:结点,头,尾,前驱,后继
单向链表特性:头找尾,尾的next为None,保存单向链表只需保存头结点
单向链表基本属性:自动获取头结点,
单向链表信息查看思路:找头,找尾,内容匹配
单向链表增加思路:示例化结点-找位置-改属性 (add/append/insert)
单向链表删除思路:判空-内容匹配-找位置-改属性-处异常 (remove)
链表vs顺序表:结构+成本
3.4 双向链表
双向链表定义:两个反方向的单向链表叠加
双向链表特点: 结点属性(pre+item+next),
头结点pre=None,
尾结点next=None
双向链表增加思路:示例化结点-找位置-改属性
双向链表删除思路:判空-内容匹配-找位置-改属性-处异常
3.5 单向循环链表
单向循环链表定义: 一个特殊的单向链表,尾结点的下一个结点是当前头结点
单向循环链表特点:结点属性(item+next),尾结点next=self__root
单向循环链表增加思路:示例化结点-找位置-改属性
单向循环链表删除思路:判空-内容匹配-找位置-改属性-处异常
3.6 栈
1、栈的定义:只能单端操作的数据结构
2、栈的特点:后进先出\先进后出
3、栈的术语:栈顶、栈底、栈顶元素、栈底元素、入栈、出栈
3.7 队列
1、单向队列定义:只能一端操作的数据结构
2、单向队列特性:后进后出\先进先出
3、双向队列定义:两个(反方向)栈/队列的组合
4、队列的操作关键点:list的len(),insert(),pop()方法运用
3.8 树
1.树的基本概念:数据结构 + 基本单位是节点 + 关系(前后&层次)
2.树的其他术语:
节点角度:父、子、兄弟、叶子、度
整体角度:祖先、树高度、树的度
3.树的种类:有序 + 无序
4.树的存储:
顺序存储:从上到下、从左到右
父找子:左(2i+1);右(2i+2)
子找父:左(i-1)/2;右(i-2)/2
5.二叉树的种类:
完美:儿女双全
完全:叶不全,左对齐
完满:非叶度2
6.二叉树实践:
增加顺序:父-左-右
辅助工具(队列特性/先进先出)

第 4 章 算法 进阶
4.1 排序
1、排序定义:无序变有序,入无序,出有序
2、排序算法:无序变有序的思路
3、排序算法关键点:入无序:满变空;出有序:空变满
4、排序算法稳定性:队列中的相同元素,排序前后有无顺序变化。变则不稳,不变则稳
5、常见排序算法:三基冒插选,中快高堆归,其基希尔桶,冒快会归并
6、冒泡排序原理:相邻比较,大移后,数比较,大至底,数冒泡,小顺大。
7、冒泡排序实践步骤:大小比较-内部比较循环-外部冒泡循环-异常考虑
8、选择排序原理:无序最小第一交换,数次over。
9、选择排序实践步骤:无序选小,小一替换-外部选择循环-异常考虑
10、插入排序原理:无序第一进有序,有序内冒泡,数循环over。
12、插入排序实践步骤:无构有序-有序冒泡-外部插入循环-异常考虑
13、希尔排序原理:两两-四四-八八…一所有元素,插入元素
14、希尔排序实践步骤:组内插入——一次希尔次数——希尔递归循环——异常考虑
15、快速排序原理:挑元素、划分组、分组重复前两步
16、快速排序实践步骤:
划分组:准备工作 + 左右移动 + 元素归位
递归:函数自调用 + 退出条件
17、归并排序原理:分组排序、合并新队列
18、归并排序实践步骤:
分组排序:递归分组 + 异常分组 + 分组合并
合并新队列: 组间比较,小归新后移标,已空对拼接
19、堆排序原理:无序构堆,头尾替换,恢复堆后再继续。
20、堆排序实践步骤:
堆调整:
准备工作:2标签+临时空间
选择最大子节点
最大子节点和临时堆顶元素的比较
选择最大的j范围
临时堆顶元素归位
堆排序:
构建堆:从最后一个包含子节点的父节点开始 n/2 - 1
首尾换:无序队列中堆顶和堆尾元素替换
关键:构建堆是从下向上,调整堆是从上向下
21、技术上:
冒小左移,选追加,
插入合适,分希尔,
快速两半,归新列,
顺表构造首尾堆
22、成本上:快速排序 < 归并排序 < 堆 排 序 < 希尔排序 < 选择排序 < 插入排序 < 冒泡排序
4.2 搜索
1、搜索:在队列中找到一个特定元素的算法过程
常见的搜索有:顺序、二分、二叉树、哈希
2、二分原理:定中间,判内容,小左大右二分重
3、递归实践:定中匹内,函数自调用,异常
4.3 二叉树
1、两种遍历方法:广度 + 深度(先中后)
2、四种遍历方法的特点:
广度(从上到下,从左到右),
先序(根左右),中序(左根右),后序(左右根)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值