
数据结构与算法
文章平均质量分 92
Forward♞
这个作者很懒,什么都没留下…
展开
-
二叉树遍历(前中后序的递归/非递归遍历、层序遍历)
如上图中:A -> B -> C -> NULL -> NULL -> D -> NULL -> NULL -> E -> NULL -> NULL。原创 2024-03-09 22:05:25 · 2268 阅读 · 1 评论 -
二叉树的常见操作
原来,我们将size定义为了静态变量,当计算完B这棵树的节点再调用函数计算A树的结点树,size的大小已经为3了,这样最后得到的size就为8,显然错误。举个例子:树A的左子树是树B,右子树是树E,此时size为3,树B的左子树是树C,右子树是树D,此时size为5,C、D、E的左右子树都为空树,因此size为5。这么做好像是可以,但如果考虑到多线程的情况,如果两个线程同时调用这个函数,那size的值必定会被改变,因此将size定义为静态变量是行不通的。时,第k层节点的个数就是第n层节点的个数。原创 2023-10-01 21:53:40 · 157 阅读 · 0 评论 -
数据结构——堆
在树和二叉树堆通常是一个可以被看作一棵完全二叉树的数组对象。堆的逻辑结构是一棵完全二叉树堆的物理结构是一个数组。原创 2023-09-16 21:27:04 · 591 阅读 · 0 评论 -
TopK问题详解
Top-K问题是一类算法和数据处理问题,其中任务是从一个包含大量数据项的集合中找到前K个最重要或最高排名的元素。搜索引擎:在搜索引擎中,Top-K问题可以用于返回用户查询的前K个最相关的搜索结果。推荐系统:在电子商务网站或媒体流推荐中,可以使用Top-K问题来提供用户最感兴趣的产品或内容。数据分析:在大数据分析中,Top-K问题可用于查找最频繁出现的元素或最高价值的数据点。数据挖掘:在聚类和分类问题中,可以使用Top-K问题来选择具有最高重要性的特征或数据点。原创 2023-09-16 21:17:32 · 4070 阅读 · 0 评论 -
数据结构——顺序表的概念和基本操作(超全超详细)
当需要在顺序表中插入或删除元素时,需要将后续元素移动,以保持连续存储的特性。对于频繁的插入和删除操作,顺序表的性能较差。:顺序表在创建时需要预先分配一定的存储空间,因此其大小是固定的。如果需要存储的元素数量超过了初始大小,就需要进行扩容操作,这可能导致额外的内存分配和数据搬移开销。在某些场景下,需要频繁调整大小的数据结构时,顺序表可能不是最佳选择。这个操作逻辑十分简单,遍历一遍顺序表,如果找到了,就返回这个下标,否则就返回-1。:如果实际存储的元素数量远小于顺序表的最大容量,会造成内存空间的浪费。原创 2023-07-26 11:42:21 · 1221 阅读 · 0 评论 -
链表修炼指南
从上图中我们可以看出,链式结构在逻辑上是连续的,但在物理结构上是不一定连续的现实生活中节点一般都是从堆上申请的。从堆上申请的空间,是按照一定的策略来分配的,两次申请的空间可能连续,也可能不连续//链表存储数据的类型 typedef struct SListNode {//指向下一个节点的指针域 } SLNode;//存储数据的类型 typedef struct ListNode {//数据域 struct ListNode * _next;原创 2023-08-06 13:51:36 · 141 阅读 · 0 评论 -
栈和队列修炼指南(基本操作+OJ练习)
/动态栈int top;}ST;//存储的数据类型typedef struct QueueNode //链队列的节点}QueueNode;typedef struct Queue //定义存放指向队头,队尾指针的结构体//指向队头//指向队尾}Queue;原创 2023-08-11 17:20:11 · 163 阅读 · 0 评论 -
循环队列详解
这里我们用数组来模拟实现循环队列int *data;//动态数组int front;//队头指针int rear;//队尾指针//最大容量。原创 2023-08-09 22:35:27 · 8199 阅读 · 2 评论 -
详解双端队列&单调队列
typedef struct DequeNode //队列的节点//指向下一个//指向前一个int data;//数据域}DQNode;//队头指针//队尾指针}Deque;原创 2023-08-10 15:36:24 · 1118 阅读 · 0 评论 -
树和二叉树的基本概念和性质
树是递归定义的节点的度:一个节点含有子树的个数称为该节点的度,如图中节点R的度为3叶节点/终端节点:度为零的节点称为叶节点/终端节点,如图中的节点e,f,g,i……分支节点:度不为零的节点子节点:一个节点含有的子树的根节点称为该节点的子节点,如图中,m,n是h的子节点父节点/双亲节点:若一个节点含有子节点,则称这个节点为该子节点的父节点/双亲节点,如图中,d是j,k的父节点兄弟节点:具有相同的父节点互称为兄弟节点树的度:一棵树中,最大的节点的度称为该树的度,如图中,该树的度为3节点的层次:从根开始定义起,根原创 2023-06-13 13:19:27 · 590 阅读 · 2 评论 -
KMP算法及其改进图文详解
KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法)。KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是通过一个next()函数实现,函数本身包含了模式串的局部匹配信息。KMP算法的时间复杂度]O(m+n)。原创 2023-05-21 16:48:09 · 4738 阅读 · 4 评论