前言

  • 背景:算法与数据结构作为技术开发者最基本的技术修养,在日常开发出现的频率非常高
  • 本文目的:花尽可能短的时间,快速学习常见的数据结构知识及算法
  • 适用阅读人群:所有技术开发者

本文主要内容:

  1. 常见、常考的数据结构知识
  2. 结合每种数据结构给出常见 & 经典的算法题
  3. 每个知识点 & 考题都会从题目知识考点、多种思路分析到手写代码整个过程进行详细解析

目录


基础知识

1. 数据结构是什么?

  • 储备知识:数据的定义
  • 定义
  • 具体类型
  • 核心内容

1.1 储备知识:数据是什么

1.2 定义

相互之间存在一种或多种关系的数据元素的集合。

1.3 具体类型

数据结构的具备类型包括2种:逻辑结构、物理结构。

1.4 核心学习内容

主要包括:

  • 排序
  • 线性表:数组、链表、栈与队列
  • 树:含特殊的树,如二叉树、红黑树等
  • 串:如字符串
  • 查找

在后面的章节中,我会详细介绍上述数据结构。


2. 算法是什么?

  • 定义
  • 特点
  • 算法设计要求
  • 常见算法

2.1 定义

解决特定问题的求解步骤(在计算机中表现为多个指令 = 多个步骤操作)。

2.2 特点

  • 可无输入,但一定有输出
  • 步骤有限
  • 确定性:每个步骤有确定含义、不会出现二义

2.3 算法设计要求

算法的设计需考虑以下性能要求:

  • 可行性:即该算法是否 切实 能解决问题
  • 健壮性:即该算法是否能全面解决问题,即 考虑、容纳所有异常逻辑,如输入是0、为空、长度不符合等
  • 时间效率:即该算法是否能 快速 解决问题,此处采用 指标:时间复杂度 来衡量
  • 空间效率:即运行该算法需耗费多少内存空间,此处采用 指标:空间复杂度 来衡量

时间复杂度、空间复杂度介绍如下:


常用数据结构及其算法应用

每类数据结构都会有对应的算法应用场景,具体如下:


具体说明

在下面的章节中,我会:

  • 详细讲解每个算法的应用场景 & 对应经典算法题:知识考点 - 多种思路分析 - 图解算法 - 手写代码
  • 旨在:手把手带你剖析常见的数据结构 & 对应经典算法题

排序

1. 简介

具体请看文章:算法总结:这是一份全面&详细的排序算法学习指南

2. 算法应用

  • 最简单的排序算法:冒泡排序
  • 数据量大时最该选择的算法:简单选择排序
  • 不可不了解的排序算法:直接插入排序
  • 复杂度最高的排序算法:希尔排序
  • 数据量大时最该选择的算法:简单选择排序
  • 内存占用最少的排序算法:堆排序
  • 稳定性最高的排序算法:归并排序

查找

1. 简介

2. 算法应用

对于不同的查找需求场景,会采用不同的查找类型,最终采用的查找方式(查找算法)也有所不同,具体如下

具体请看文章:Carson带你学数据结构:图文详解 - 动态查找、静态查找、散列查找


线性表

线性表主要包括:数组、链表、栈与队列

1. 数组

1.1 简介

  • 存储线性表的数据元素的方式 = 一段地址连续的存储单元
  • 具备:起始位置、数组长度(最大存储容量) & 线性表长度(当前长度),具体如下:

概念 说明
数组长度 存放线性表的空间长度(固定不变)
线性表长度 存放线性表数据元素的长度(动态变化)
地址 存储单元的编号
数组下标 第 i 个元素 = 数组下标第 i-1 的位置

具体请看文章:Carson带你学数据结构:线性表-数组

1.2 算法应用

典型应用1:寻找出现特定次数的数字

  • 数组中只出现1次的2个数字
  • 数组中出现次数超过一半的数字
  • 统计 数字在排序数组中出现的次数:二分法
  • 数组中唯一出现1次的数字、其他都出现了3次

典型应用2:寻找符合特定条件的数字

  • 数组中数值与下标相等的元素
  • 获取数组中最小的k个数
  • 排序数组中,0~n-1中缺失的数字
  • 打印从1到最大的n位数:大数问题
  • 数组中重复的数字(可修改 & 不可修改数组)

典型应用3:不同类型数组的查找

  • 二维数组中的查找
  • 找出旋转数组的最小数字

典型应用4:数组内元素的排列组合

  • 数组所有滑动窗口的最大值
  • 连续子数组的最大和
  • 把数组的所有数排成最小的数:大数问题
  • 数组中的逆序对
  • 调整数组顺序,使奇数位于偶数前面

2. 链表

2.1 简介

具体请看文章:Carson带你学数据结构:链表

2.2 算法应用

典型应用1:寻找链表特定节点

  • 链表中倒数第k个节点 / 中间节点
  • 链表中环的入口节点
  • 两个链表的第一个公共节点

典型应用2:复制 & 删除链表

  • 删除链表的节点(重复 / 不重复)
  • 复杂链表的复制

典型应用3:翻转、合并 & 打印链表

  • 翻转链表
  • 从尾到头打印链表
  • 合并两个排序的链表

3. 栈与队列

3.1 简介

具体请看文章:Carson带你学数据结构:图文解析特殊的线性表 - 栈 & 队列

3.2 算法应用

典型应用1:互相转换

  • 2个栈实现队列
  • 2个队列实现栈

典型应用2:求最大、最小值

  • 获取栈的最小值
  • 获取队列的最大值

1. 简介

2. 存储结构

包括:双亲表示法、孩子表示法、孩子兄弟表示法,具体介绍如下图

3. 树的类型

具体请看文章:Carson带你学数据结构:手把手教你学习-树

主要应用是二叉树,所以下面主要介绍二叉树算法的应用

4. 算法应用

典型应用1:基础树遍历算法

  • 前序遍历
  • 前中序遍历
  • 后序遍历
  • 层序遍历

典型应用2:遍历应用

  • 根据前序 & 中序重建二叉树
  • 从上到下打印二叉树:不分行、分行 & 之字形
  • 二叉树的深度
  • 序列化二叉树
  • 判断是不是某二叉搜索树的后序、前序遍历结果

典型应用3:二叉树结构判断

  • 判断B是不是A的子树结构
  • 判断 二叉树是否对称
  • 判断二叉树是否相等

典型应用4:二叉树查找

  • 树中两个节点的最低公共祖先
  • 二叉搜索树最接近值查找
  • 二叉树中和为某一值的路径
  • 二叉搜索树的第k大节点
  • 二叉树 中序遍历下一个节点

典型应用5:二叉树类型变式

  • 二叉搜索树与双向链表
  • 输出二叉树的镜像
  • 平衡二叉树

1. 简介

2. 存储结构介绍

包括:顺序存储结构 & 链式存储结构

具体请看文章:Carson带你学数据结构:这是一份全面 & 详细的”串“讲解指南

3. 算法应用

典型应用1:字符串转换

  • 把数字翻译成字符串
  • 把字符串转换成整数

典型应用2:字符查找

  • 第一个只出现一次的字符、字符流中第1个只出现1次的字符、删除1个字符串中的重复字符、删除2个字符串中的重复字符、变位数
  • 最长不含重复字符的子字符串
  • 替换 字符串中的空格
  • 字符串的排列

典型应用3:字符串的排列组合

  • 字符串的排列
  • 字符串的组合 / 子集

典型应用4:字符串翻转

  • 翻转字符串 之 翻转单词顺序
  • 翻转字符串 之 左旋转字符串

典型应用5:字符串匹配判断

  • 正则表达式匹配
  • 判断1个字符串是否表示数值

1.1 简介

具体请看文章:Carson带你学数据结构:手把手带你了解 ”图“ 所有知识!(含DFS、BFS)

1.2 算法应用

典型应用1:基础遍历

  • 广度遍历(DFS)
  • 深度遍历(BFS)

典型应用2:最小生成树

  • 普利姆算法(Prim)
  • 克鲁斯卡尔算法(Kruskal)

典型应用3:最短路径

  • 迪杰斯特拉算法(Dijkstra)
  • 弗洛伊德算法(Floyd)

至此,关于常用的数据结构及典型算法解析已经讲解完毕。


总结

本文全面解析了数据结构及其对应常见算法,核心内容都已经记录在Github上:
https://github.com/Carson-Ho/AlgorithmLearning,感谢各位关注点赞。

  • Carson带你学数据结构系列文章:
    Carson带你学数据:线性表-数组、链表
    Carson带你学数据:特殊的线性表-栈、队列
    Carson带你学数据:串
    Carson带你学数据:树
    Carson带你学数据:二叉树
    Carson带你学数据:图
    Carson带你学数据:查找

欢迎关注Carson_Ho的CSDN博客 !

博客链接:https://carsonho.blog.csdn.net/


请点赞!因为你的鼓励是我写作的最大动力!

这是一份全面详细的数据结构、算法学习指南相关推荐

  1. Java:这是一份全面 详细的 Synchronized关键字 学习指南

    前言 在Java中,有一个常被忽略 但 非常重要的关键字Synchronized 今天,我将详细讲解 Java关键字Synchronized的所有知识,希望你们会喜欢 目录 1. 定义 Java中的1 ...

  2. Carson带你学Android:这是一份全面详细的属性动画学习攻略!

    前言 属性动画的使用 是 Android 开发中常用的知识 本文将献上一份全面 & 详细的属性动画学习指南,将详细介绍属性动画的所有内容,包括:意义.作用.应用场景.功原理 & 具体使 ...

  3. 数据结构和算法学习指南

    点击上方蓝字设为星标 下面开始今天的学习- 这篇文章会涵盖之前的所有内容,并且会举很多代码的实例,谈谈如何使用框架思维,并且给对于算法无从下手的朋友给一点具体可执行的刷题建议. 首先,这里讲的都是普通 ...

  4. 年轻人,看你骨骼惊奇,我这有一份来自阿里的Android开发学习指南,不仅能让你月入5w,度过中年危机都不是问题!

    摘要 很简单,我这有一份来自阿里程序员佛系月薪5w指南,看你骨骼惊奇,印堂光亮,一看就是将要大富大贵.走向人生巅峰之人,就不收你钱了,一个点赞就送给你怎么样? 缘起 为什么写下这篇文章? 疫情自爆发以 ...

  5. 一份关于机器学习端到端学习指南

    人工智能.机器学习已经火了有一阵了,很多程序员也想换到这方向,目前有关于深度学习基础介绍的材料很多,但很难找到一篇简洁的文章提供实施机器学习项目端到端的指南,从头到尾整个过程的相关指南介绍.因此,个人 ...

  6. 数据结构+算法 学习计划与资源

    学了很多杂乱的技术,继续成长 渐感吃力,重新学习数据结构 与 算法. 计划: 1.严蔚敏<数据结构><大话数据结构>,每天一个小例子. 2.采用C++ 或者C .尽量用C++实 ...

  7. 数据结构算法学习 之 红黑树

    1.红黑树的特性 (1)每个节点或者是黑色,或者是红色. (2)根节点是黑色. (3)每个叶子节点(NIL)是黑色. [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!] (4)如果一个节 ...

  8. 机器学习入门 —— 超级详细的KNN算法学习笔记、KNN算法的三要素、KNN算法的优缺点

    文章目录 KNN(K nearest neighbors) K值的选择和影响 k取值偏小 k取值偏大 样本点距离的计算方式 闵可夫斯基距离 曼哈顿距离 欧几里得距离 切比雪夫距离 余弦距离 决策函数的 ...

  9. 面试汇总:这是一份全面详细的Android面试指南

    核心面试内容 对于Android技术专业面试,主要考察的内容包括:(已按优先级排序) 通用编程基础 计算机基础 特定编程语言 智力题 需要特别注意的是: 编程基础.计算机基础是 所有技术开发都必备的基 ...

最新文章

  1. mysql gbk支持_让MYSQL支持GBK
  2. 以实际产品为例, 进行软件工程训练的作业
  3. 推荐系统——Item2vec
  4. openstack mariadb服务启动不了_在CentOS8或者RHEL8系统上体验MariaDB
  5. Go单元测试从入门到放弃—0.单元测试基础
  6. Python案例篇:爬取分析大型招聘网站Python岗
  7. struts2+spring+hibernte整合示例
  8. Rust : 简单模拟交易所与参与机构
  9. 8音度dsp调音教程_8音度手把手教你调音玩转dsp
  10. 逆向分析中加解密算法常用工具
  11. Yii2 第三方类库安装和使用:Imagine
  12. 基于机智云平台的厨房智能监控系统
  13. 单目图像3D物体的姿态检测
  14. 分类计数原理与分步计数原理_分类计数原理与分步计数原理
  15. 国内外10大项目外包平台
  16. linux mysql5.7.11_Centos7.2 Systemd 方式编译 Mysql5.7.11
  17. FL中隐私和安全性问题
  18. HDU 4123 树状DP+RMQ
  19. WSL2 启用systemd
  20. Nature综述:肠道菌群如何划分肠型

热门文章

  1. 49. 字母异位词分组【中等】
  2. 移动端 iPhoneX安全区域 小程序、H5页面适配
  3. 老赖上了失信被执行人黑名单,真的有效果吗?
  4. linux下的命令行词典
  5. html 发布后样式乱,outlook2010 已发送邮件格式为何变乱了(htmalrtf),但是收件人显示仍然为html的正常格式....
  6. 那些提升工作效率的Windows常用快捷键
  7. 【python自动化测试】以pytest为底层的全栈自动化测试框架开发
  8. Python技术,我们这一年...
  9. 华为平板M5再添“很吓人的技术”,逆势热销引领平板新潮流
  10. IDC新增云业务前后,IDC真是操碎了心