
数据结构
One_castle
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
LeetCode 最小栈
最小栈原题链接:点我传送原题描述:设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。push(x) – 将元素 x 推入栈中。pop() – 删除栈顶的元素。top() – 获取栈顶元素。getMin() – 检索栈中的最小元素。示例:MinStack minStack = new MinStack();minStack.push(-2);min...原创 2019-10-13 21:08:59 · 194 阅读 · 0 评论 -
LeetCode 奇偶链表
奇偶链表原题链接:点我传送原题描述:给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。示例 1:输入: 1->2->3->4->5->NULL输出: 1...原创 2019-10-31 19:49:29 · 381 阅读 · 0 评论 -
LeetCode 如何用栈来实现队列
用栈实现队列原题链接:点我传送原题描述:使用栈实现队列的下列操作:push(x) – 将一个元素放入队列的尾部。pop() – 从队列首部移除元素。peek() – 返回队列首部的元素。empty() – 返回队列是否为空。示例:MyQueue queue = new MyQueue();queue.push(1);queue.push(2);queue.peek(); /...原创 2019-10-13 11:59:14 · 243 阅读 · 0 评论 -
基于邻接矩阵存储的图的广度优先搜索遍历算法的实现(附C++实现代码)
广度优先搜索算法(BFS)概念: 广度优先搜素算法(BFS) 的实现类似树的层次遍历,我们在实现他的时候一般借助一个队列来进行实现,利用队列的先进先出的特点来对图进行广度优先搜索算法的实现。具体实现思路:1、 同样,先创建一个visited_BFS标记数组来判断顶点是否已经访问过了,并且初始化visited_BFS数组为false,表示图的所有顶点还没有访问。2、 借助队列来实现广度优先...原创 2020-01-20 17:04:38 · 2125 阅读 · 0 评论 -
基于邻接矩阵存储的图的深度优先搜索(DFS)实现思路以及代码(超级详细)
图深度优先搜索(DFS)深度优先搜索类似于树的前序遍历,而不一样的地方是图的深度优先搜索遍历在遍历的过程中可能会因为图本身的结构原因而反复地访问到一个顶点。这个是不被允许的,所以我们需要对应的解决的方法来针对这个问题。下面是算法实现的主要实现思路:实现深度优先搜索算法我们一般有两种思路:一种是通过递归的方法,一种是借助栈来实现。以下讨论的是借助栈来实现的思路1、首先,由于我们讨论的图结构...原创 2020-01-16 09:59:05 · 2023 阅读 · 0 评论 -
图的邻接表的实现以及各种基本操作(附C++实现代码)
图图的存储形式有很多,例如邻接矩阵,邻接表,多重邻接表,十字链表这里将介绍图的邻接表存储形式:邻接表的实现思想:邻接表的概念我们就不再进行赘述,主要是将实现邻接表的实现思路捋一捋。首先,邻接表存储的基本思想:对于图的每个顶点vi,我们将所有邻接vi的顶点连接成一个单链表,称为顶点vi的边表(对于有向图则称为出边表),所有边表的头指针和存储顶点信息的一维数组构成了顶点表。而邻接表有着两种...原创 2020-01-15 17:00:59 · 4229 阅读 · 0 评论 -
用邻接矩阵存储的图的代码实现(创建、遍历以及各种基本操作)(附C++实现代码)
一、图图的定义: 图G由两个集合E和V组成,记为G=(V,E),其中V是顶点的有穷非空集合,E是V中顶点偶对的有穷集合,这些顶点偶对称为边。V(G)和E(G)通常用来表示顶点集合和边集合。E(G)可以为空集,如果E(G)为空,说明只有顶点而没有边。二、 图的分类1、有向图: 如果E(G)为有向边的集合,则该图就表示为有向图。2、无向图: 如果E(G)为无向边的集合,则该图就表示为无向图。...原创 2019-12-03 16:43:58 · 3962 阅读 · 2 评论 -
栈的实际应用问题----括号是否匹配问题(附c++代码实现)
题目描述:假设一个字符串中可以包含三种括号:( )[ ]{},且这三种括号可以按任意次序嵌套使用(如:“…[…{…}…[…]…]…(…)” 为合法嵌套, “…[…{… )…[…]…]…(…)”为不合法嵌套)。 编写判别给定表达式中所含括号是否正确配对出现的算法,如果是合法嵌套则返回为true,如果是不符合法嵌套则返回为false。题目分析:其实这个是对栈的一个简单的应用无非就是怎么借助栈...原创 2019-11-20 23:23:32 · 895 阅读 · 0 评论 -
哈夫曼编码的实现(详细思路及c++一步一步代码实现)
哈夫曼编码的两个特殊性质:1、哈夫曼编码是前缀编码。(问:啥是前缀编码? 前缀编码就是在一个编码方案中,任何一个编码度不是其他任何编码的前缀(最左子串),那么这个编码就是前缀编码。)2、哈夫曼编码是最优前缀编码。即对于包括n个字符的数据文件,分别以它们的出现次数为权值来构造哈夫曼树,则利用该树对应的哈夫曼编码对文件进行编码,能使该文件压缩后对应的二进制文件的长度最短。哈夫曼编码的算法实现:...原创 2019-11-20 16:59:40 · 14719 阅读 · 0 评论 -
哈夫曼树的实现(构建、遍历)(附C++详细实现代码)
哈夫曼树带权路径长度: 设二叉树有n个带权值的叶子结点,从根节点到各个叶子结点的路径长度与相应叶子结点权值的乘积之和叫做二叉树的带权路径长度。哈夫曼树的定义:带权路径长度最小的二叉树(也称最优二叉树)哈夫曼树的构建思路:1、以权值分别为W1,W2...Wn的n各结点,构成n棵二叉树T1,T2,...Tn并组成森林 S={T1,T2,...Tn},其中每棵二叉树 Ti仅有一个权值为 Wi的...原创 2019-11-09 15:59:25 · 9994 阅读 · 3 评论 -
Leetcode 设计循环队列
设计循环队列原题链接:点击传送题目描述: 设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。...原创 2019-10-13 10:23:01 · 440 阅读 · 0 评论 -
链式栈的 C++实现(附c++代码实现)
链式栈的思想和创建一个带头指针的链式线性表的思想非常相似,头指针指向栈顶指针。实现链式栈的创建空栈、入栈、出栈、遍历还有查找 之类的功能可以在理解下面这些代码的思路之后非常容易写出!C++实现代码如下://StackNode.h#pragma once#include<iostream>using namespace std;class StackNode {publ...原创 2019-10-31 12:06:47 · 3618 阅读 · 0 评论 -
中序线索二叉树(构建,遍历和找前驱后继节点)附c++详细解释代码!
在二叉树的结点上加上线索的二叉树称为线索二叉树,对二叉树以某种遍历方式(如先序、中序、后序或层次等)进行遍历,使其变为线索二叉树的过程称为对二叉树进行线索化线索化二叉树的本质,实际上是对原始二叉树中的指向为空(NULL)的指针域进行利用,我们让其指向为NULL的指针域指向前驱(左孩子)或者是后继(右孩子),但是我们怎么来辨别是树节点还是指向其前驱还是后继呢?核心思想:我们为每一个树节点增加两...原创 2019-11-08 17:56:53 · 5423 阅读 · 2 评论 -
如何构建一个顺序栈?(附c++代码实现)
自己创建一个顺序存储的栈结构这里想要强度一点的就是:用模板template来定义一个模板类的格式template <typename T>class 类名定义模板类的函数的格式:template <typename T>函数返回类型 类名<T> :: 函数名{}#pragma once#include<iostream>using ...原创 2019-10-30 23:53:41 · 3002 阅读 · 0 评论 -
如何实现二叉树的非递归先序、中序、后序遍历(附C++详细实现代码)
二叉树的递归遍历算法是比较容易实现的,那如何实现二叉树的非递归遍历算法呢?总体具体实现思路:1、非递归实现二叉树的遍历我们都借助栈来实现2、借用栈的来实现功能是:我们在进行遍历二叉树的时候,总会先遍历左子树,然后才遍历右子树,借助栈来保存左子树的节点,然后借助栈来从左子树进入右子树。3、然后根据访问根节点的先后顺序来进行具体调整即可。一、我们从非递归实现中序遍历开始讲起: 因为非递归...原创 2019-11-04 16:40:29 · 1110 阅读 · 0 评论 -
线性链表的应用(奇偶链表的另一种形态)代码超级详细
题目描述: 用随机函数生成10个3位整数(100~999),把这些整数存于单链表中,然后读入一个整数,以该值为基准把单链表分割为两部分,所有小于该值的结点排在大于或等于该值的结点之前。题目分析: 这道题十分简单,实现的思路也非常简单实现思路: 题目的意思其实是遍历一条链表,将链表分成以输入的median为标准的这样的链表: 小于value的节点-> 大于value的节点,这样的话、我...原创 2019-11-01 17:16:32 · 422 阅读 · 0 评论 -
链式队列的实现(入队、出队、遍历和反转(翻转))(详细图文讲解反转、翻转)附C++实现
首先先讲一下链式队列的实现思想:链式队列的实现,我们设置一个特殊的节点,这个结点的内容不是值和指向下一个结点的next、而是指向整条队列的队头和队尾的front和rear指针我用的c++实现的(算法不分语言,任何语言都可以实现),我们先定义一个链式队列的普通节点class QueueNode {public: char value;//值 QueueNode* next; Queu...原创 2019-11-01 16:17:17 · 7439 阅读 · 4 评论 -
二叉树的c++基本操作实现(创建、各种遍历、计算深度、节点数、叶子节点数、查找相应节点并且输出)(附C++实现代码)
本文有些递归有些摘自以下链接:点击传送我当时自己在编写代码的时候主要碰到的问题是:对于递归,处于一种一看就会,一写就跪的境界,然后我去找资料理解递归递归有神人总结为以下模板,仅供参考:function recursion(大规模){ if (end_condition) { end; } else { //在将问题转...原创 2019-10-31 19:18:40 · 1762 阅读 · 0 评论