二刷数据结构
文章平均质量分 75
CodeRanger
前人种树,后人乘凉
展开
-
链式前向星存图
前言,对链式前向星刚有一点点了解。链式前向星,就是静态链表存储,它的时间复杂度为O(n)。链式前向星所接收的数据为:起点(u),终点(v)和权值(w)下图,假设一个简单的图有一个起点1指向一个终点2,他的权重是5。下面展示更高级点的图(没有赋权值) ,这里补充一下,图分为有向图(单向)和无向图(双向),上下两个图的指向箭头都是单向的,所以这是有向图,也是最常见的图。下面就开始构建了,我们需要建立边结构体:struct edge{ int next; i原创 2022-02-09 22:02:16 · 930 阅读 · 1 评论 -
KMP算法之求解next数组
那么我们还知道如果子串与主串失配的话,主串是不动的,移动的是子串,而子串最坏的情况是移动到第一个位置,那么next数组从第二位开始即初始化为1,如果该某一位置失配时前有相等前后子串,则返回其相等子串的长度+1,没有则返回1位置。第三次走时i到了第三个位置,i=1,j=-1,满足if语句,i++,j++,i=2,j=0,next[2]=0,第四次再一次进入if语句,此时满足next[i]=next[j],next[3]=j=1,完成next数组。a,ba,有相同“a”串,长度为1,+1,第四位赋值2。原创 2022-10-06 09:45:33 · 794 阅读 · 0 评论 -
哈夫曼树(Huffman Tree)
哈夫曼树又称最优二叉树,是一种带权路径长度最短的。所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点的层数)。树的路径长度是从树根到每一结点的路径长度之和,记为WPL=(W1*L1+W2*L2+W3*L3+...+Wn*Ln),N个权值Wi(i=1,2,...n)构成一棵有N个叶结点的二叉树,相应的叶结点的路径长度为Li(i=1,2,...n)。可以证明哈夫曼树的WPL是最小的。给定N个权值作为N个。原创 2022-10-03 14:42:07 · 4596 阅读 · 0 评论 -
最小生成树--Prim算法和Kruskal算法
对于最小生成树的原理就不解释了,离散数学都学了~_~,我们的重点是如何判断是否有回路。这里有一个方法——集合避圈法。原创 2022-07-30 21:54:58 · 439 阅读 · 2 评论 -
出入栈顺序的讨论及合法性
奇怪的知识原创 2022-07-18 10:51:25 · 589 阅读 · 0 评论 -
并查集详解
看完你就会原创 2022-06-04 16:49:36 · 277 阅读 · 0 评论 -
再谈二叉树(下)
上一期我们已经介绍了而二叉树的基础了,那么我们下面看一下更多的相关问题。根据遍历构造二叉树是不是每一种遍历组合都能构造出二叉树呢?答案是否。前序遍历和后序遍历的组合是不能确定为一二叉树的。前序和后序在本质上都是将父节点与子结点进行分离,但并没有指明左子树和右子树的能力,因此得到这两个序列只能明确父子关系,而不能确定一个二叉树。先看一个题:根据先序遍历的特点可知,第一个字符一定是代表最顶端的父节点,之后我们要确定做分支和右分支的界限,就是如何区分左右节点。这时就要借助中序遍历,我们知道中序原创 2022-05-30 20:54:55 · 901 阅读 · 0 评论 -
再谈二叉树(上)
二叉树是重要的数据结构内容,我们今天再来讲一下二叉树相关知识点。定义与结构首先再次明确一下什么是二叉树:二叉树(binary tree)是指树中节点的度不大于2的有序树,它是一种最简单且最重要的树。二叉树的递归定义为:二叉树是一棵空树,或者是一棵由一个根节点和两棵互不相交的,分别称作根的左子树和右子树组成的非空树;左子树和右子树又同样都是二叉树。一颗正常的二叉树。我们怎么在计算机中储存二叉树呢没也就是说它的结构是什么样的呢,这就要用到我们的链表了。类似于指针,也需要用到结构.原创 2022-05-29 16:18:58 · 113 阅读 · 2 评论 -
多重背包问题与分组背包
多重背包的含义: 物品数量不再是无穷多。思路,既然物品个数有限,但还要判断要装几个,我们可以用暴力的做法,三重循环,每层循环控制自己的变量,容易理解。第三层循环就是控制装的物品的个数,我们通过分析可以得知,在使用次数不超过物品提供个数的同时,还要小于背包的空间限制。#include<bits/stdc++.h>using namespace std;const int N = 1010;int v[N];int w[N];int s[N];int f[N][N原创 2022-05-26 23:13:43 · 347 阅读 · 0 评论 -
01背包与完全背包
背包问题是动态规划里最重要的问题之一,现在我们一起梳理一下这类问题的所有大类。01背包01背包是最简单最基础的背包问题,他的意思是只考虑物体的质量和体积。先看题目:AcWing-01 背包我们先分析,他既然是动态规划问题,我们就要避免重复计算,即我们要用数组将计算过的数据存储起来,下次若要使用时直接拿来,不需要浪费时间了。又因为包含两个要素重量和体积,所以我们先要有两个数组 V[N] , W[N],来存放数据,之后在需要一个数组存放最大的质量,那么我们要选用什么样的数组呢?...原创 2022-05-24 20:48:39 · 146 阅读 · 0 评论 -
STL初步(上)
STL是指C++的标准模板库(Standard Template Library)。它很好用,但也很复杂。本节将介绍STL中的一些常用算法和容器,在后面的章节中还会继续介绍。入门喽!!5.2.1排序与检索例题5-1大理石在哪儿(WhereistheMarble?,UVa10474)现有N个大理石,每个大理石上写了一个非负整数。首先把各数从小到大排序,然后回答Q个问题。每个问题问是否有一个大理石写着某个整数x,如果是,还要回答哪个大理石上写着x。排序后的大理石从左到右编号为1~N。...原创 2022-05-20 19:57:39 · 92 阅读 · 0 评论 -
栈与队列知识
栈先表明栈的特点:后进先出。即后进入的数据先行输出。栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾(栈顶部)进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。如图:栈的基本操作:1,栈的插入 .push()2,栈顶端元素删除并向下移动 .pop()3,判断栈是否为空 .empty()4,返回栈顶的元素 .top()5,返回栈里元素的个数 .size()操作实例:把1~10压入栈中并输出:代码:int main() {原创 2022-05-19 21:06:57 · 91 阅读 · 0 评论 -
整数二分查找
789. 数的范围输入样例:6 31 2 2 3 3 4345输出样例:3 45 5-1 -1代码:#include <algorithm> //STL通用算法#include <bitset> //STL位集容器#include <cctype>#include <cerrno>#include <clocale>#include <cmath>#inclu原创 2022-05-13 22:04:24 · 79 阅读 · 0 评论