数据结构与算法复习笔记一

在这里插入图片描述
在这里插入图片描述
一.基本数据结构
1.数组、字符串
优点:
构建一个数组非常简单
能让我们在O(1)的时间里根据数组下标查询某个元素
缺点:
构建时必须分配一段连续的空间
查询、删除、添加某个元素时须遍历整个数组

2.链表
单链表:链表中的每个元素实际上是一个单独的对象,而所有对象都通过每个元素中的引用字段链接在一起。

双链表:双链表的每个结点中都含有两个引用字段。

优点:灵活分配空间
缺点:查询元素需要O(n)时间

解题技巧:
利用快慢指针(有时需要三个指针)
加链表头
例如:
两个排序链表进行整合排序
将链表的奇偶数按原定顺序分离,生成前半部分为奇数,后半部分为偶数的链表

3.栈
特点:后进先出

算法基本思想:
可以用一个单链表实现
只关心上一次操作
处理完上一次操作后,能在O(1)时间内查找到更前一次的操作。

4.队列
特点:先进先出

双链表实现

常用场景:
广度优先搜索

5.树
特点:结构直观
常考算法:递归
常考树的形状:
普通二叉树
平衡二叉树
完全二叉树
二叉搜索树
红黑树

树的遍历应用场景:
前序遍历:多应用于树的创建和搜索
中序遍历:二叉搜索树
后序遍历:在对某个节点进行分析的时候,需要来自左子树和右子树的信息。

二.高级数据结构
1.优先队列

与普通队列区别:
保证每次取出的元素是队列中优先级最高的
优先级别可自定义

常用场景:
从杂乱无章的数据中按照一定的顺序(或优先级)筛选数据
求前k个……的题目

本质:二叉堆

2.图
基本知识点:

  • 阶、度
  • 树、森林、环
  • 有向图、无向图、完全有向图、完全无向图
  • 连通图、连通分量
  • 存储和表达方式:邻接矩阵、邻接链表

算法:

  • 遍历:深度优先、广度优先
  • 环的检测、树的检测:有向图、无向图
  • 拓扑排序
  • 最短路径算法
  • 连通性相关算法:Kosaraju、Tarjan、求解孤岛数量、判断是否为树
  • 图的着色、旅行商问题
  • 联合-查找算法(Union-Find)

3.前缀树(字典树)
字典查找:例如给定一系列构成字典的字符串,要求在字典中找出所有以“ABC"开头的字符串

性质:
1.每个节点至少包含两个基本属性

  • children:数组或集和,罗列出每个分支当中包含的所有字符
  • isEnd:布尔值,表示该节点是否为某字符串的结尾
    2.根节点是空的
    3.除了根节点,其他所有节点都有可能是单词结尾,叶子节点一定都是单词的结尾。

基本操作:
1.创建:

  • 遍历一遍输入的字符串,对每个字符串的字符进行遍历
  • 从前缀树的根节点开始,将每个字符加入到节点的children字符集当中。
  • 如果字符集已经包含了这个字符,则跳过
  • 若当前字符是字符串的最后一个,则把当前节点的isEnd标记为真。

2.搜索:
从根节点出发,逐个匹配输入的前缀字符,如果遇到了就继续往下一层搜索,若没遇到就立即返回。

4.线段树
线段树:一种按照二叉树的形式存储数据的结构,每个节点保存的都是数组里某一段的总和。

5.树状数组
基本特征:
利用数组表示多叉树,和优先队列类似
优先队列是用数组来表示完全二叉树,而树状数组是多叉树
树状数组第一个元素是空节点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值