
算法与数据结构
文章平均质量分 93
算法与数据结构
stormsha
博客主页:stormsha.com
知识库:devsroad.com
展开
-
堆排序算法详解:原理与Python实现
堆排序是一种高效的比较排序算法,通过利用堆数据结构的特性,能够在O(n log n)的时间内完成排序。理解堆排序的基本思想和实现步骤,对于深入学习排序算法和数据结构具有重要意义。原创 2024-09-27 15:37:24 · 878 阅读 · 1 评论 -
工厂模式和策略模式区别
工厂模式是一种创建型设计模式,用于封装对象的创建过程。通过使用工厂方法或抽象工厂,客户端可以在不直接引用类的情况下创建对象。这种模式提供了一种将对象的创建与其使用分离的方式,从而提高代码的灵活性和可维护性。策略模式是一种行为型设计模式,旨在定义一系列算法,并将它们封装在独立的类中,使得它们可以相互替换。这种模式让算法的变化独立于使用算法的客户。策略模式通过将行为抽象到接口中,使得算法可以在运行时动态替换。通过本文的探讨,我们可以看到工厂模式和策略模式在设计目标、实现方式和应用场景上有显著的区别。原创 2024-08-26 22:33:23 · 1156 阅读 · 0 评论 -
图搜索算法详解
图搜索算法是一种在图数据结构中寻找特定节点或路径的算法。图由节点和边组成,节点表示实体,边表示实体之间的关系。图搜索算法的目标是在图中找到从起始节点到目标节点的最优路径。名称 数据结构 空间复杂度 性质深度优先搜索 DFS 栈 stack O( h ) 其中 h 为树的高度 不具有最短性广度优先搜索 BFD 队列 queue O( 2^h ) 指数级别 具有最短性(总访问最近的点)原创 2024-04-22 08:00:00 · 1418 阅读 · 0 评论 -
数据结构面试指南:基础知识、算法特性、常见数据结构及应用场景详解
算法是对特定问题求解步骤的一种描述,是指令的有限序列。算法的五大特性包括有穷性(算法在有限步骤内结束)、确定性(算法的每个步骤都是确定的)、可行性(算法的每个步骤都是可行的)、输入(算法有零个或多个输入)和输出(算法至少有一个输出)。一个好的算法应该具备正确性、可读性、健壮性、效率和低存储量需求。数据结构是相互之间存在一种或多种特定关系的数据元素的集合。数据结构研究的是计算机操作对象的逻辑结构、物理结构以及数据的运算。原创 2024-04-06 08:00:00 · 940 阅读 · 0 评论 -
最小树形图(朱刘算法)
最小树形图 定义:一个有向图,存在从某个点为根的,可以到达所有点的一个最小生成树,则它就是最小树形图。 算法思想:朱刘算法实现过程: 【在选出入边集后(看步骤1),若有向图中不存在有向环,说明该图就是最小树形图】实现过程选入边集——找到除root点之外,每一个点的所有入边中权值最小的,用数组in[]记录下这个最小权值,用pre[]记录到达该点的前驱;(若图中存在独立点原创 2018-02-02 14:40:13 · 596 阅读 · 0 评论 -
*L 和 *&L的意义和区别以及头结点问题
指针 指针变量 头结点 头指针 *L &L原创 2017-10-11 20:33:45 · 23751 阅读 · 6 评论 -
头插邻接表
对于图来说,邻接矩阵是不错的一种图存储结构,但是我们也发现,对于边数相对顶点较少的图,这种结构是存在对存储空间的极大浪费的。因此我们考虑另外一种存储结构方式:邻接表(Adjacency List),即数组与链表相结合的存储方法。邻接表的处理方法是这样的。1、图中顶点用一个一维数组存储,另外,对于顶点数组中,每个数据元素还需要存储指向第一个邻接点的指针,以便于查找该顶点的边信息。原创 2017-09-01 15:23:56 · 1435 阅读 · 0 评论 -
树的双亲表示法
由于树中的每个结点都有唯一的一个双亲结点,所以可用一组连续的存储空间(一维数组)存储树中的各个结点,数组中的一个元素表示树中的一个结点,每个结点含两个域,数据域存放结点本身信息,双亲域指示本结点的双亲结点在数组中位置。 R A B原创 2017-08-21 19:22:08 · 3921 阅读 · 1 评论 -
二叉树非递归后序遍历
后序线索化为何与其它线索化有区别不能使用递归操作注释:后序非递归遍历的难处就在,最右结点无法直接找到后继结点,后序线索化二叉树在这里就不能使用递归了,其实知道了递归的运作过程就不难理解为何不能用递归后序线索化了递归详细运行过程 A B C D E F H当遍历到最左边的时候,D没有左右结点了,原创 2017-08-18 21:21:44 · 461 阅读 · 0 评论 -
链式队列
#include#include#include#define maxsize 50using namespace std;typedef struct Node{ int data; struct Node *next; }LinkNode;typedef struct{ LinkNode *front,*rear;}LinkQueue;void InitQueue(Li原创 2017-08-10 20:09:22 · 252 阅读 · 0 评论 -
顺序队列
#include#include#include#define maxsize 50using namespace std;typedef struct{ int data[maxsize]; int front,rear; }SqQueue;int count;void initqueue(SqQueue &Q){ Q.front=Q.rear=0;}void isem原创 2017-08-10 19:17:04 · 261 阅读 · 0 评论 -
链栈
#include#include#includeusing namespace std;typedef int ElemType;typedef struct LinkNode{ ElemType data; LinkNode *next;}*LiStack,StackNode;//数据链的结构 typedef struct { StackNode *Top; ElemTy原创 2017-08-10 19:15:26 · 268 阅读 · 0 评论 -
链式二叉树-递归操作
对于二叉树通常约定以前序遍历方式输入,若输入不正确是不会有什么显示的,这点要注意假设二叉树为 1 2 4 3 5 扩展后的二叉树 1 2 4原创 2017-08-16 17:42:55 · 469 阅读 · 0 评论 -
顺序栈
栈: 栈是一端受限,一段允许进行操作的线性表。我自己理解时,会将它理解成一个装书的盒子。放书,取书,就是进行的操作。这个的特点就是,你放了一踏书,现在你想取书,你只能先把上面的书一个个取出来,即:先放的后取,后放的先取。放在栈上说,就是先进后出。明白了栈的定义,现在要实际的实际,首先是它的逻辑结构:线性表。它是线性的。现在是它的存储结构:最常采用的是顺序存储和链式存原创 2017-08-01 20:34:24 · 620 阅读 · 0 评论