数据结构与算法
文章平均质量分 92
在这个专栏中,我们将深入探讨各种常见的数据结构,如数组、链表、栈、队列、树、图等,并学习它们的特点、操作和应用场景。同时,我们还将研究各种常见的算法,如排序、搜索、图算法、动态规划等,并了解它们的原理、复杂度分析和优化方法。
秋说
祝你开心
展开
-
【数据结构入门精讲 | 第十四篇】散列表知识点及考研408、企业面试练习(1)
散列表(Hash Table),也被称为哈希表或散列映射,是一种常用的数据结构之一。它通过将键(key)映射到值(value)来实现高效的数据存储和检索。散列表的主要思想是利用哈希函数将键转换成对应的索引,然后将值存储在该索引位置上。当需要查找或插入元素时,再次使用哈希函数计算出对应的索引,从而快速定位到目标位置。散列表的优势在于具有高效的查找和插入操作。由于直接通过索引进行访问,时间复杂度通常为O(1),即常数时间。装填原创 2023-12-24 09:31:42 · 2089 阅读 · 1 评论 -
【数据结构入门精讲 | 第十八篇】考研408、企业面试图专项练习(一)
在上一篇中我们学习了图的相关知识点,在这一篇中我们进行图的专项练习。选择两城市间最经济的航行路线用迪杰斯特拉算法(对)2从某顶点出发进行深度优先遍历,最先退出dfs过程的是拓扑序列的最后一个顶点。(对)3对任意一个图,从某顶点出发进行一次深度优先或广度优先遍历,可访问图的所有顶点。(错)若存在回路,则结束遍历,剩下的节点就不能被访问。4检查有向图是否存在回路的一种方法是使用无前驱顶点优先算法对有向图进行拓扑排序。( 对 )5一个邻接矩阵如下:原创 2023-12-24 09:31:19 · 2025 阅读 · 0 评论 -
【数据结构入门精讲 | 第十九篇】考研408、企业面试图专项练习(二)
作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图。在地图上显示有多个分散的城市和一些连接城市的快速道路。每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上。当其他城市有紧急求助电话给你的时候,你的任务是带领你的救援队尽快赶往事发地,同时,一路上召集尽可能多的救援队。输入格式:输入第一行给出4个正整数N、M、S、D,其中N(2≤N≤500)是城市的个数,顺便假设城市的编号为0 ~ (N−1);M是快速道路的条数;S是出发地的城市编号;D是目的地的城市编号。第二行给出N个正原创 2023-12-24 09:31:02 · 1980 阅读 · 0 评论 -
【数据结构入门精讲 | 第十七篇】一文讲清图及各类图算法
深度优先搜索(DFS)是一种用于遍历或搜索树、图等数据结构的基本算法。该算法从给定的起点开始,沿着一条路径直到达到最深的节点,然后再回溯到上一个节点,继续探索下一条路径,直到遍历完所有节点或者找到目标节点为止。具体步骤如下: 标记起始节点为已访问。 访问当前节点,并获取其所有邻居节点。 遍历所有邻居节点,如果该邻居节点未被访问过,则递归地对该邻居节点进行深度优先搜索。 重复步骤2和步骤3,直到所有能够到达的节点都被访问过。DFS算法使用了递归或者栈的机制,在每原创 2023-12-24 09:30:33 · 3238 阅读 · 21 评论 -
【数据结构入门精讲 | 第十六篇】并查集知识点及考研408、企业面试练习
在许多实际应用场景中,我们需要对元素进行分组,并且在这些分组中进行查询和修改操作。比如,在图论中,我们需要将节点按照连通性进行分组,以便进行最小生成树、最短路径等算法;在计算机视觉中,我们需要将像素进行分组,以便进行图像分割和对象识别等任务。而并查集正是为了解决这些问题而被提出来的一种数据结构。原创 2023-12-23 20:07:02 · 2792 阅读 · 10 评论 -
【数据结构入门精讲 | 第十五篇】散列表知识点及考研408、企业面试练习(2)
实现QQ新帐户申请和老帐户登陆的简化版功能。最大挑战是:据说现在的QQ号码已经有10位数了。输入格式:输入首先给出一个正整数N(≤105),随后给出N行指令。每行指令的格式为:“命令符(空格)QQ号码(空格)密码”。其中命令符为“N”(代表New)时表示要新申请一个QQ号,后面是新帐户的号码和密码;命令符为“L”(代表Login)时表示是老帐户登陆,后面是登陆信息。QQ号码为一个不超过10位、但大于1000(据说QQ老总的号码是1001)的整数。密码为不小于6位、不超过16位、且不包含空格的字符串。原创 2023-12-23 20:06:41 · 2346 阅读 · 0 评论 -
【数据结构入门精讲 | 第二篇】考研408、企业面试基础概念习题
1.时间复杂度是根据算法写成的程序在执行时耗费时间的长度,往往与输入数据的规模有关。(对) 2.斐波那契数列FN的定义为:F0=0, F1=1, F(N)=F(N−1)+F(N−2), N=2, 3, …。用递归函数计算FN的空间复杂度是O(N)。(对) 3.斐波那契数列FN的定义为:F0=0, F1=1, FN=FN−1+FN−2, N=2, 3, …。用循环函数计算FN的时间复杂度是Θ(FN).(错) 解析:在循环函数中,我们通过迭代的方式依次计算每个斐波那契数列原创 2023-12-23 20:06:18 · 2120 阅读 · 0 评论 -
【数据结构入门精讲 | 第四篇】考研408、企业面试表专项习题
3.顺序存储方式的优点是存储密度大,且插入、删除运算效率高。 (错) 解析:顺序存储方式存储密度大但插入删除效率低。 4.对于顺序存储的长度为N的线性表,访问结点和增加结点的时间复杂度分别对应为O(1)和O(N)。(对) 解析:在插入操作时,需要将插入位置后面的元素都向后移动,以便为新元素腾出空间 5.在用数组表示的循环队列中,front值一定小于等于rear值。(错)原创 2023-12-23 20:05:59 · 2137 阅读 · 0 评论 -
【数据结构入门精讲 | 第十三篇】考研408、公司面试树专项练习(二)
在ZIP归档文件中,保留着所有压缩文件和目录的相对路径和名称。当使用WinZIP等GUI软件打开ZIP归档文件时,可以从这些信息中重建目录的树状结构。请编写程序实现目录的树状结构的重建工作。输入格式:输入首先给出正整数N(≤104),表示ZIP归档文件中的文件和目录的数量。随后N行,每行有如下格式的文件或目录的相对路径和名称(每行不超过260个字符): 路径和名称中的字符仅包括英文字母(区分大小写); 符号“\”仅作为路径分隔符出现; 目录以符号“\”结束;原创 2023-12-23 20:05:30 · 2426 阅读 · 0 评论 -
【数据结构入门精讲 | 第十二篇】考研408、公司面试树专项练习(一)
1.一棵树中位于同一层上的结点称为兄弟结点。(错) 解析:拥有同一个父节点的节点互为兄弟节点。 2.如果由结点{ 1, 2, 3, 4 }组成的AVL树的深度是3(根结点的深度是1),则结点4有可能是根结点。(错) 解析:如果节点4是根节点,那么由于它是数值最大的节点,它下面必须有节点1、2、3,这将导致树的深度至少为4。 3.某二叉树的后序和中序遍历序列正好一样,则该二叉树中的任何结点一定都无右孩子。(对) 中序:左根右;后序:左右根。因此要使得序列原创 2023-12-23 20:05:08 · 2038 阅读 · 0 评论 -
【数据结构入门精讲 | 第十一篇】一文讲清树
树是一种非线性的数据结构,也是一种表示一对多关系的数据结构,它由若干个节点(Node)和连接这些节点的边(Edge)组成。树有很多应用,如用于实现文件系统、数据库索引和编译器等。下面是树的一些常见概念及其相关知识点:1.根节点(Root):树的最顶层节点,它没有父节点。2.叶子节点(Leaf):没有子节点的节点。3.父节点(Parent):如果一个节点有子节点,则该节点称为其子节点的父节点。4.子节点(Child):一个节点的直接后继节点称为其子节点。5.节点的度(Degree):一个节点拥有原创 2023-12-23 20:04:43 · 2256 阅读 · 4 评论 -
【数据结构入门精讲 | 第十篇】考研408排序算法专项练习(二)
R7-1 字符串的冒泡排序我们已经知道了将N个整数按从小到大排序的冒泡排序法。本题要求将此方法用于字符串序列,并对任意给定的K(原创 2023-12-23 20:03:11 · 2840 阅读 · 2 评论 -
【数据结构入门精讲 | 第九篇】考研408排序算法专项练习(一)
1.希尔排序是稳定的算法。(错) 解析:稳定性是指如果两个元素在排序前后的相对顺序保持不变,那么这个排序算法就是稳定的。对于具有相同关键字的元素,排序后它们的相对位置应该保持不变。 2.仅基于比较的算法能得到的最好的“最坏时间复杂度”是O(NlogN)。(对) 3.对N个记录进行归并排序,归并趟数的数量级是O(NlogN)。(错) 答案:O(logN) 4.对N个不同的数据采用冒泡排序进行从大到小的排序,当元素基本有序时交换元素次数肯定最多。(错)原创 2023-12-23 20:02:39 · 3394 阅读 · 0 评论 -
【数据结构入门精讲 | 第八篇】一文讲清全部排序算法(2)
冒泡排序、起泡排序O(n^2)比较次数:n*(n-1)/2稳定空间O(1)插入排序最优(有序)O(n)最坏(逆序)O(n^2)稳定空间O(1)希尔排序不稳定空间O(1)快速排序平均、最好O(nlong)最坏O(n^2)不稳定空间O(logn)桶排序O(n)稳定空间O(n)归并排序O(nlogn)归并趟数的数量级:O(logn)稳定空间O(n)堆排序O(nlogn)不稳定空间O(1)选择排序O(n^2)比较次数:O(n^2)原创 2023-12-23 20:02:07 · 2311 阅读 · 0 评论 -
【数据结构入门精讲 | 第七篇】一文讲清全部排序算法(1)
冒泡排序是一种简单的排序算法。它重复地比较相邻的两个元素,并将它们按照顺序交换,从而将最大(或最小)元素 “浮” 到数组的末尾。这个过程类似于气泡在水中上浮的过程,因而得名 “冒泡排序”。原创 2023-12-23 19:59:48 · 2061 阅读 · 2 评论 -
【数据结构入门精讲 | 第五篇】栈知识点及考研408、企业面试练习
栈是限定仅在栈顶(即表首)进行插入和删除操作的线性表,也称为后进先出(Last In First Out) 的线性表,简称 LIFO 结构。栈的内部实现原理其实就是数组或链表的操作,而之所以引入 栈 这个概念,是为了将程序设计问题模型化,利用栈的先进后出特性对特定的一些问题进行简化。(栈是线性表的特例)允许插入和删除元素的一端称为栈顶,另一端称为栈底,不含任何任何数据元素的栈称为空栈。原创 2023-12-23 19:59:32 · 2637 阅读 · 0 评论 -
【数据结构入门精讲 | 第六篇】队列知识点及考研408、企业面试练习
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。队列的数据元素又称为队列元素。在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。因为队列只允许在一端插入,在另一端删除,所以只有最早进入队列的元素才能最先从队列中删除,故队列又称为先进先出(FIFO—first in first out)线性表。原创 2023-12-23 19:58:35 · 2730 阅读 · 0 评论 -
【数据结构入门精讲 | 第三篇】一文讲清表
由于单链表中最后一个元素所在的单元的指针为Null,当我们将其指向表首单元时,这个链表就变成了首尾相接的链表,即单循环链表,也就是说,从任意一个单元出发,可以找到任何其它的单元。图例如下:因此:含有尾指针单循环链表实现删除头节点和在尾节点后插入的操作效率最高。原创 2023-12-23 19:57:51 · 2111 阅读 · 0 评论 -
【数据结构入门精讲 | 第一篇】打开数据结构之门
数据结构与算法是计算机科学中的核心概念,也与现实生活如算法岗息息相关。鉴于全网数据结构文章良莠不齐且集成度不高,故开设本专栏,为初学者提供指引。原创 2023-12-23 19:57:30 · 2076 阅读 · 0 评论