0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

数据结构与算法简述

算法与数据结构 来源:后端技术小牛说 作者:后端技术小牛说 2022-09-08 11:25 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

简述数据结构栈

栈是一种线性表,其限制只能在表尾进行插入或删除操作。由于该特性又称为后进先出的线性表。

简述数据结构队列

队列是一种先进先出的线性表。其限制只能在线性表的一端进行插入,而在另一端删除元素。

简述二叉树

二叉树是n个有限元素的集合,该集合或者为空、或者由一个称为根(root)的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成。

简述满二叉树

一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。

简述完全二叉树

一棵深度为k的有n个结点的二叉树,对树中的结点按从上至下、从左到右的顺序进行编号,如果编号为i(1≤i≤n)的结点与满二叉树中编号为i的结点在二叉树中的位置相同,则这棵二叉树称为完全二叉树。

简述二叉树的前中后序遍历算法

前序遍历:若二叉树为空树,则执行空逻辑,否则:

访问根节点

递归前序遍历左子树

递归前序遍历右子树

中序遍历:若二叉树为空树,则执行空逻辑,否则:

递归中序遍历左子树

访问根节点

递归中序遍历右子树

后序遍历:若二叉树为空树,则执行空逻辑,否则:

递归后序遍历左子树

递归后序遍历右子树

访问根节点

简述解决Hash冲突的方法

开放定址法:当发生哈希冲突时,如果哈希表未被装满,那么可以把这个值存放到冲突位置中的下一个空位置中去

链地址法:对相同的哈希地址,设置一个单链表,单链表内放的都是哈希冲突元素。

简述AVL树

AVL树是一种改进版的搜索二叉树,其引入平衡因子(左子支高度与右子支高度之差的绝对值),通过旋转使其尽量保持平衡。任何一个节点的左子支高度与右子支高度之差的绝对值不超过1。

简述红黑树

红黑树本身是有2-3树发展而来,红黑树是保持黑平衡的二叉树,其查找会比AVL树慢一点,添加和删除元素会比AVL树快一点。增删改查统计性能上讲,红黑树更优。红黑树主要特征是在每个节点上增加一个属性表示节点颜色,可以红色或黑色。红黑树和 AVL 树类似,都是在进行插入和删除时通过旋转保持自身平衡,从而获得较高的查找性能。红黑树保证从根节点到叶尾的最长路径不超过最短路径的 2 倍,所以最差时间复杂度是 O(logn)。红黑树通过重新着色和左右旋转,更加高效地完成了插入和删除之后的自平衡调整。

简述稳定排序和非稳定排序的区别

稳定排序:排序前后两个相等的数相对位置不变,则算法稳定非稳定排序:排序前后两个相等的数相对位置发生了变化,则算法不稳定

常见的稳定排序算法有哪些

插入排序、冒泡排序、归并排序

常见的不稳定排序算法有哪些

希尔排序、直接选择排序、堆排序、快速排序

简述插入排序

插入排序:每一趟将一个待排序记录按其关键字的大小插入到已排好序的一组记录的适当位置上,直到所有待排序记录全部插入为止。

排序算法稳定。时间复杂度 O(n²),空间复杂度 O(1)。

简述希尔排序

希尔排序:把记录按下标的一定增量分组,对每组进行直接插入排序,每次排序后减小增量,当增量减至 1 时排序完毕。

排序算法不稳定。时间复杂度 O(nlogn),空间复杂度 O(1)。

简述直接选择排序

直接选择排序:每次在未排序序列中找到最小元素,和未排序序列的第一个元素交换位置,再在剩余未排序序列中重复该操作直到所有元素排序完毕。

排序算法不稳定。时间复杂度 O(n²),空间复杂度 O(1)。

简述堆排序

堆排序:将待排序数组看作一个树状数组,建立一个二叉树堆。通过对这种数据结构进行每个元素的插入,完成排序工作。

排序算法不稳定,时间复杂度 O(nlogn),空间复杂度 O(1)。

简述冒泡排序

冒泡排序:比较相邻的元素,如果第一个比第二个大就进行交换,对每一对相邻元素做同样的工作。

排序算法稳定,时间复杂度 O(n²),空间复杂度 O(1)。

简述快速排序

快速排序:随机选择一个基准元素,通过一趟排序将要排序的数据分割成独立的两部分,一部分全部小于等于基准元素,一部分全部大于等于基准元素,再按此方法递归对这两部分数据进行快速排序。

排序算法不稳定,时间复杂度 O(nlogn),空间复杂度 O(logn)。

简述归并排序

归并排序:将待排序序列分成两部分,然后对两部分分别递归排序,最后进行合并。排序算法稳定,时间复杂度都为 O(nlogn),空间复杂度为 O(n)。

简述图

图是由顶点集合和顶点之间的边集合组成的一种数据结构,分为有向图和无向图。

有向图:边具有方向性

无向图:边不具有方向性

简述邻接矩阵

用一个二维数组存放图顶点间关系的数据,这个二维数组称为邻接矩阵。对于无向图,邻接矩阵是对称矩阵

简述邻接表

邻接表是通过链表表示图连接关系的一种方。对于表头结点所对应的顶点存在相邻顶点,则把相邻顶点依次存放于表头结点所指向的单向链表中。

简述图的深度优先搜索DFS

将图中每个顶点的访问标志设为 FALSE, 之后搜索图中每个顶点,如果未被访问,则以该顶点V0为起始点出发,访问此顶点,然后依次从V0的各个未被访问的邻接点出发深度优先搜索遍历图,直至图中所有和V0有路径相通的顶点都被访问到。

简述图的广度优先搜索

从图中的某个顶点V0出发,并在访问此顶点之后依次访问V0的所有未被访问过的邻接点,之后按这些顶点被访问的先后次序依次访问它们的邻接点,直至图中所有和V0有路径相通的顶点都被访问到。

简述最小生成树和其对应的算法

对于有 n 个结点的原图,生成原图的极小连通子图,其包含原图中的所有 n 个结点,并且有保持图连通的最少的边。

普里姆算法:取图中任意一个顶点 v 作为生成树的根,之后往生成树上添加新的顶点 w。在添加的顶点 w 和已经在生成树上的顶点v 之间必定存在一条边,并且该边的权值在所有连通顶点 v 和 w 之间的边中取值最小。之后继续往生成树上添加顶点,直至生成树上含有 n-1 个顶点为止。

克鲁斯卡尔算法:先构造一个只含 n 个顶点的子图 SG,然后从权值最小的边开始,若它的添加不使 SG 中产生回路,则在 SG 上加上这条边,如此重复,直至加上 n-1 条边为止。

简述最短路径算法

Dijkstral算法为求解一个点到其余各点最小路径的方法,其算法为:

假设我们求解的是顶点v到其余各个点的最短距离。n次循环至n个顶点全部遍历:

从权值数组中找到权值最小的,标记该边端点k

打印该路径及权值

如果存在经过顶点k到顶点i的边比v->i的权值小

更新权值数组及对应路径

简述堆

堆是一种完全二叉树形式,其可分为最大值堆和最小值堆。

最大值堆:子节点均小于父节点,根节点是树中最大的节点。

最小值堆:子节点均大于父节点,根节点是树中最小的节点。

简述set

Set是一种集合。集合中的对象不按特定的方式排序,并且没有重复对象。

说一下对于树的理解

数据结构树是一种由有限节点组成的层次关系的集合。其特点如下:

每个节点有零个或多个子节点;

只有一个节点没有父节点,该节点称为根节点;

除根节点外,每个节点有且只有一个父节点;

简述二叉查找树

二叉查找树的左子树若不为空,则左子树上所有结点的值均小于它的根结点的值;

二叉查找树的右子树若不为空,则右子树上所有结点的值均大于它的根结点的值;

二叉查找树的左、右子树也分别为二叉查找树;

没有键值相等的结点。

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 算法
    +关注

    关注

    23

    文章

    4761

    浏览量

    97167
  • 数据结构
    +关注

    关注

    3

    文章

    573

    浏览量

    41379
  • 二叉树
    +关注

    关注

    0

    文章

    74

    浏览量

    12862

原文标题:数据结构与算法八股文背诵版V0.3

文章出处:【微信号:TheAlgorithm,微信公众号:算法与数据结构】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    typedef结构体使用

    虽然结构体的出现能够让我们有一个更科学的数据结构来管理数据,但是每次使用结构体都需要struct...,未免显得有些冗长和麻烦。有了typedef的助攻,我们就可以很轻松地给
    发表于 12-08 07:04

    单片机的算法

    平滑滤波算法 设置一个数据缓存区,每新采集一个数据便存入暂存区中,同时去掉一个最老数据,保存这N个数据始终是最新更新的
    发表于 11-28 08:19

    程序运行速度很慢如何优化?

    ,考虑内联(inline)。 优化数据结构: 使用更高效的数据结构(如用查表代替复杂计算)。对齐数据访问。 编译器优化: 启用合适的优化等级(如-O2, -O3)。注意调试时可能需要降低优化。 检查中断
    发表于 11-17 06:12

    通过优化代码来提高MCU运行效率

    最高。 避免在32位MCU上频繁使用8位char类型进行算术运算,因为可能需要符号扩展和截断。 谨慎使用浮点数,如果必须用,尽量用float而非double,并考虑使用定点数运算替代。 算法数据结构
    发表于 11-12 08:21

    SM4算法实现分享(一)算法原理

    SM4分组加密算法采用的是非线性迭代结构,以字为单位进行加密、解密运算,每次迭代称为一轮变换,每轮变换包括S盒变换、非线性变换、线性变换、合成变换。加解密算法与密钥扩展都是采用32轮非线性迭代
    发表于 10-30 08:10

    SM4算法原理及分享1

    SM4算法是一种分组密码算法。其分组长度为128bit,密钥长度也为128bit。加密算法与密钥扩展算法均采用32轮非线性迭代结构,以字(
    发表于 10-30 06:54

    国密系列算法简介及SM4算法原理介绍

    使用了Feistel结构(分组密码中的一种对称结构),其中密钥扩展部分也使用了Feistel结构,所以对数据和密钥的处理流程极为相似。下面对SM4加密过程进行阐述: 对于密钥扩展部分
    发表于 10-24 08:25

    e203乘法运算结构算法原理

    e203乘法部件结构 E203的乘法操作由一个17周期的乘法器实现。为了提升性能,该乘法器采用了基4Booth编码,将乘数分解为17个Booth编码,与被乘数相乘后形成的部分和再在相加,从而实现
    发表于 10-22 06:43

    e203 ALU乘法运算结构算法原理

    e203乘法部件结构 E203的乘法操作由一个17周期的乘法器实现。为了提升性能,该乘法器采用了基4Booth编码,将乘数分解为17个Booth编码,与被乘数相乘后形成的部分和再在相加,从而实现
    发表于 10-22 06:12

    分享一个嵌入式学习阶段规划

    (如指针实现链表增删查改),排查内存泄漏、野指针数据结构算法:掌握线性表 / 栈 / 树等结构,学查找 / 排序算法,手写代码(如二分查找、快速排序)电子电路基础:学电路原理、电子元
    发表于 09-12 15:11

    【HZ-T536开发板免费体验】6、使用protoc-gen-gorm生成标准化的数据结构

    在设计espnow协议的时候,考虑到我需要在esp32,Linux设备,web上使用相同的数据结构,那就需要考虑一下,是否使用一个通用的跨平台序列化数据结构。这时候我想起了protobuf,这个就是
    发表于 08-26 00:32

    舵机原理简述!

    舵机原理简述 舵机是一种高精度的位置伺服执行机构,广泛应用于机器人关节、无人机舵面控制、航模操控等场景,其核心功能是通过接收控制信号,精确驱动输出轴旋转到指定角度并保持稳定。以下从结构组成、控制
    的头像 发表于 08-22 10:57 1147次阅读

    盘点嵌入式就业所需要的技能有哪些?

    ,把握未来的职业机遇。 1.智能汽车行业: - 熟悉嵌入式编程语言,如C/C++、Python等。 - 掌握嵌入式系统设计与开发流程,了解汽车电子控制系统的基本原理。 - 具备良好的数据结构算法
    发表于 08-11 15:43

    程序设计与数据结构

    的地址)出发,采用推导的方式,深入浅出的分析了广大C程序员学习和开发中遇到的难点。 2. 从方法论的高度对C语言在数据结构算法方面的应用进行了深入讲解和阐述。 3. 讲解了绝大多数C程序员开发
    发表于 05-13 16:45

    请问K230D怎么将摄像头采集的视频数据通过串口输出?

    我连了个WiFi模块,想要将摄像头采集的视频数据通过串口发送出去。之前都是用的STM32,不太会MicroPython,搞不懂对象的数据结构,求教。
    发表于 04-28 06:16