自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(15)
  • 收藏
  • 关注

原创 关键路径及其代码实现

在带权有向图中,以顶点表示事件,以有向边表示活动,以边上的权值表示完成该活动的开销(如完成活动需要的时间),称之为用边表示活动的网络,简称AOE网。(6)若一个活动的时间余量为0,则说明该活动必须要如期完成,d(i)=0即l(i)=e(i)的活动ai是关键活动,由关键活动组成的路径就是关键路径。(5)活动ai的时间余量:d(i)=l(i)-e(i),表示在不增加完成整个工程所需总时间的情况下,活动ai可以拖延的时间;(2)活动ai的最早开始时间e(i):指该活动弧的起点所表示的事件的最早发生时间;

2025-12-28 16:43:09 377

原创 拓扑排序及其代码实现

在图论中,拓扑排序是一个有向无环图的所有顶点的线性序列,且该序列必须满足一下两个条件每个顶点出现且只出现一次若存在一条从顶点A到顶点B的路径,那么在序列中顶点A出现在顶点B的前面有向无环图才有拓扑排序,其他图没有这一说从有向无环图中选择一个没有前驱(即入度为0)的顶点并输出从图中删除该顶点和所有以它为起点的有向边重复1、2直到当前的有向无环图为空或当前图中不存在无前驱的顶点为止(必定存在环)于是,得到拓扑排序后的结果是{1,2,4,3,5}通常一个有向无环图可以有一个或多个。

2025-12-28 16:01:17 364

原创 C++学习笔记

STL(Standard Template Library,标准模板库)是C++标准库的重要组成部分。它不仅是一个可复用的组件库,而且是一个包含数据结构与算法的软件框架。STL为开发者提供了多种高效、灵活且可扩展的模板化工具,使得复杂的程序开发变得更加简单和高效。

2025-12-22 21:12:43 465

原创 Python笔记

1、标识符是什么:标识符是指用来表示某个实体的一个符号2、命名规则:由字母、数字、下划线和数字组成,且不能以数字开头。

2025-11-01 23:42:56 662

原创 二叉树及代码实现

如果一棵二叉树也按照这个原则进行编号,并且其编号为i的结点和满二叉树中编号为i的结点位置完全相同,则这棵二叉树称为完全二叉树。对完全二叉树(除最后一层外,每层节点数满,最后一层结点从左到右连续排列),若按层序编号(根节点编号为1,左子节点为2i, 右子节点为2i + 1),则对任意结点i(1 <= i <= n, n为总结点数)推导:总边数 = 总结点数 - 1(树的特性),且总边数 = 度为1的结点n1 + 2*n2,联立可得。若2i + 1 <= n,则右子节点编号为2i + 1,否则无右子节点。

2025-10-29 18:45:56 1192

转载 二分和前缀和算法题

解题框架:利用二分查找的两个变种,分别定位左边界和右边界,充分利用数组的升序特性优化查找效率步骤:①头文件与全局变量定义②读取数组长度和查询次数细节:处理1e5级数据时,scanf效率高于cin③读取升序数组元素④循环处理每个查询⑤二分查找左边界(第一个x的位置)易错点:计算mid时,l + r >> 1 等价于(l + r)/ 2,但用位运算更高效,且注意是向下取整不易想到的点:a. 当q[mid] >= x 时,r = mid 而 r = mid -1,因为mid就是左边界(需保留)

2025-10-28 19:50:45 683

原创 链式队列及代码实现

链式队列是一种基于链表实现的队列结构,遵循“先进先出”的原则,它通过链表的结点存储数据,每个结点包含数据域和指向下一个结点的指针,同时维护两个指针(头指针front和尾指针rear)分别指向队列的头部和尾部,用于高效地执行入队和出队操作。链式队列的存储空间不固定,随着元素的入队动态分配结点,不需要多少元素就占用多少内存,避免了顺序队列(数组实现)的固定容量限制,不会出现“假溢出”的问题。需要处理结点的创建、释放以及指针的维护(如空队列、单节点队列等边界情况),逻辑上比顺序队列稍繁琐。

2025-10-25 10:14:18 682

原创 数组队列及代码实现

说明:出队操作不实际删除元素,仅通过移动front指针标记元素为“已出队”,出队成功返回0,失败返回-1,参数Element *e 用指针的原因:需将出队的元素值传递给函数外部(C语言通过指针实现“返回多个值”)2、对存储效率要求极高的场景:顺序栈的栈顶操作时O(1)的常数时间,且数组的连续存储能充分利用CPU缓存,比链式栈(需频繁访问指针)更快,适合实时系统、高频计算等场景。1、数据规模可提前预知的场景:例如操作系统的"函数调用栈",每次函数调用的层数和数据量相对可控,可提前分配合适的栈空间。

2025-10-23 20:11:07 633

原创 基于单链表实现的链式栈

基于单链表的链式栈是一种用单链表实现的栈结构,其核心特点:仅允许在链表的头部(栈顶)进行插入(入栈)和删除(出栈)操作,遵循“先进后出”原则。单链表的头指针作为栈顶指针,每个节点存储数据元素和指向下一个节点的指针,栈的长度由节点数量动态决定。链式栈的节点通过malloc函数动态分配内存,只要内存充足,理论上可以无线存储元素,无需像顺序栈(数组实现)那样预先指定大小,避免“栈满溢出”或内存浪费。当数据元素体积较大(如复杂结构体),顺序栈的元素移动成本更高,而链式栈只需修改指针,更高效。

2025-10-22 22:46:31 912

原创 顺序栈及代码实现

核心函数围绕栈顶指针top的操作展开,通过控制top的增减实现元素的入栈、出栈,以及栈空/栈满的判断,所有操作均为O(1)时间复杂度,体现了顺序栈高效的特点,使用时需严格遵循“入栈前判满、出栈/取顶前判空”的原则,避免越界错误。1、顺序栈是用一段连续的存储单元(通常是数组)来存放栈中元素的线性结构,严格遵循“先进后出”的原则,并且通过一个“栈顶指针”来管理元素的存入(入栈)和取出(出栈)1、存储效率高:元素存储在连续空间,访问栈顶元素仅需通过栈顶指针直接定位,时间复杂度为O(1)

2025-10-19 22:30:29 937

原创 带头节点的双向循环链表及代码实现

3、首尾访问快速:头节点的prev直接指向尾结点,next直接指向头节点,访问链表首尾元素的时间复杂度是O(1),无需遍历整个链表。1、操作统一便捷:由于头节点的存在,对链表的插入和删除操作,无需区分是在表头、表中还是表尾,逻辑完全一致,减少了代码复杂性。3、循环特性:链表的最后一个数据结点的后继指针,会指向头节点,头节点的前驱指针会指向最后一个数据结点,形成完整的环形结构。1、内存开销大:由于头节点的存在,对链表的插入和删除操作,无需区分是在表中的那个位置,逻辑完全一致,减少代码复杂性。

2025-10-19 08:23:09 833

原创 单向循环链表及代码实现

2、中间/头部删除需维护尾指针:若删除的是尾节点,需要重新遍历找到新的尾节点并更新rear,为此时间复杂度退化到O(n),不如双向链表灵活。1、结构闭环:最后一个有效结点的next指针,不指向NULL,而是指向链表的头结点,形成“头——.....——尾——头”的循环。4、反向访问困难:和普通单链表一样,只能从当前节点向后遍历,无法向前访问(如要找某个节点的前驱,需从头遍历),反向操作效率低。3、尾指针优化:多数实现会额外维护一个rear指针,直接指向尾结点,避免普通单链表找尾节点需遍历的问题。

2025-10-16 22:52:03 1241

原创 带头节点的单链表及代码实现

遍历链表的目的是访问“有效数据结点”,因此带头结点的链表遍历需要从“头结点的下一个结点”(head->next)开始,若忽视直接从head开始遍历,会误访问头结点的无效数据。使用带头结点的链表前,必须先初始化头结点(分配内存,设置指针域为NULL),而不带头结点的链表可以直接把头结点设置为NULL(空表状态),初始步骤更加简略。f. 调整指针关系:新节点的指针域指向插入位置前结点的下一个结点,插入位置前结点的指针域指向新结点。功能:在链表头部(头结点之后)插入一个新结点,新节点成为链表的第一个有效结点。

2025-10-15 22:54:09 965

原创 动态顺序表及代码实现

1、核心结构:用结构体来封装数据存储地址,pos是从0开始的,表示当前待插入的位置,也是当前元素的个数,以及这个顺序表的容量。为结构体中的data数组分配内存(容量为参数n),若失败则先释放结构体内存,再报错返回NULL。更新capacity为原容量的两倍,释放原data内存,将data指向新内存,返回e。从pos-1位置开始,将前面的元素依次往后面移动一个(避免覆盖数据),直到index。功能:查找首个值为value的元素,返回其下标,未找到返回-1。功能:初始化动态顺序表,分配结构体的数据数组的内存。

2025-10-06 12:07:51 714

原创 单链表及代码实现

循环遍历链表:当p->next不为空时(存在可删除节点),用tmp暂存p->next,更新p->next跳过待删除节点,用free(tmp)释放节点内存,同时table->count递减。定义遍历指针p(指向dummy),循环移动p,当p->next不为空且p->next->val!定义暂存指针tmp指向目标节点(p->next),更新p->next跳过目标节点(p->next = tmp->next)循环遍历链表:当p不为空时,打印p->val(节点数据)并加制表符分隔,再移动指针p。

2025-10-06 11:51:20 941 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除