基础数据结构
基础数据结构
Androids_lost_Sheep
苟有恒,何必三更眠五更起。最无益,莫过一日曝十日寒。
展开
-
ST表模板
#include <iostream>using namespace std;// f[i, j] = [i, 2^j-1] 的最大值 即: 从i开始, 连续 2^j 个数的最大值。const int N = 1e5 + 5;int arr[N];int ST[N][18];int log2[N] = {-1}; int read(){ int x = 0, f = 1; char c = getchar(); while(c < '0' ||原创 2020-11-10 20:51:44 · 400 阅读 · 1 评论 -
并查集
并查集摘要什么是并查集并查集的实现摘要本文主要介绍并查集和其效率最高的实现方式。什么是并查集并查集顾名思义,是一种用于处理集合与集合之间查询和合并等操作的数据结构。比如询问两点是否在同一集合,将两个不同集合合并等并查集的实现给出n个点,将其划分为两个集合,查询其中某两个点是否在同一集合内,你会怎么做?简单的方法就是,将同一个集合内的所有点设置一个标记,然后查询两个点的标记是否一样...原创 2020-02-20 01:46:31 · 3050 阅读 · 0 评论 -
图和树的存储方式:邻接矩阵和邻接表
邻接矩阵和邻接表摘要无向图和有向图的区别稀疏图和稠密图邻接矩阵邻接矩阵的初始化邻接矩阵的读入邻接表基础算法和数据结构合集:https://blog.csdn.net/GD_ONE/article/details/104061907摘要本文主要介绍邻接矩阵和邻接表的实现方式,无向图和有向图的区别,以及稠密图和稀疏图的区别。以及两种存储方式的使用场景。 稠密图使用邻接矩阵存储,稀疏图使用邻接表...原创 2020-02-17 02:28:17 · 8799 阅读 · 4 评论 -
哈希表
本文主要介绍哈希表的定义,并用数组模拟哈希表。原创 2020-02-15 00:14:24 · 3253 阅读 · 1 评论 -
用数组模拟栈和队列
文章目录摘要栈队列摘要之前已经介绍过JAVA中已经实现好的栈和队列,本文主要介绍如何用数组模拟栈和队列。用数组模拟栈和队列的的优点就是快。栈栈的特点是“先进后出”,只能在栈顶进行插入和删除,所以用数组模拟的话,我们只能在数组的末尾进行插入和删除。代码很简单,一看就能明白:public class Main{ static int[] s = new int[100010]; // 栈...原创 2020-02-14 19:01:06 · 3571 阅读 · 0 评论 -
用数组模拟单链表
文章目录摘要用数组模拟单链表插入遍历摘要本文主要介绍如何用数组模拟单链表。如果有同学没学过数据结构的话,请先了解顺序表和链表的定义。推荐视频:https://www.bilibili.com/video/av31802230用数组模拟单链表我们知道链表是通过指针将所有的结点链接实现的,在此过程中,每创建一个新的结点,都需要给它分配空间,也就是要new一下,而这个操作是很耗时的,另外,链表...原创 2020-02-13 20:54:32 · 4341 阅读 · 0 评论 -
算法竞赛中的常用JAVA API:PriorityQueue(优先队列)
文章目录PriorityQueue初始化常用函数实现大根堆的两种方式实例PriorityQueue翻译过来就是优先队列,本质是一个堆, 默认情况下堆顶每次都保留最小值,每插入一个元素,仍动态维护堆顶为最小值。初始化PriorityQueue()//使用默认的初始容量(11)创建一个 PriorityQueue,并根据其自然顺序对元素进行排序。PriorityQueue<In...原创 2020-01-31 22:40:26 · 7449 阅读 · 7 评论 -
算法竞赛中的常用JAVA API :HashSet 和 TreeSet
文章目录HashSetTreeSetset容器的特点是不包含重复元素,也就是说自动去重。HashSetHashSet基于哈希表实现,无序。add(E e)//如果容器中不包含此元素,则添加。clear()//清空contains(Object o)//查询指定元素是否存在,存在返回trueisEmpty()// 判空iterator()//返回此容器的迭代器remove//...原创 2020-01-28 14:40:21 · 5212 阅读 · 0 评论 -
算法竞赛中的常用JAVA API :HashMap 和 TreeMap
文章目录HashMapTreeMap摘要本文主要介绍Map接口下的HashMap和TreeMap。HashMapHashMap是基于哈希表的 Map 接口的实现,是无序的clear()//清空。containsKey(Object key)//如果包含指定键,返回truecontainsValue(Object value)//如果包含指定值, 返回trueget(Objec...原创 2020-01-25 22:10:08 · 7219 阅读 · 3 评论 -
单调队列
单调队列可以用于优化多重背包。可以在O(n)的时间复杂度内求解某一区间内的最值。比如, 给出 n 个数, 求出数组中任何一个长度为m的区间中的最大值 和 最小值暴力的算法是, 两个循环,内层循环对 m 进行遍历,求出最值。 但这样重复遍历了很多元素。如何省去重复的步骤呢?单调队列的思想是 队列里元素大小一定是单调递增或者单调递减的,且保存的是所有含有这个最值的区间的最值。这样...原创 2019-09-19 20:04:30 · 380 阅读 · 0 评论 -
并查集 Wireless Network POJ - 2236.
并查集裸题#include <iostream>#include <set> #include <math.h>using namespace std;struct node{ int x,y; node(int x = 0, int y = 0):x(x),y(y){}}A[1100];int p[1100];set <int&g...原创 2019-09-19 19:31:41 · 314 阅读 · 0 评论 -
数据结构1: 基础定义
程序=数据结构+算法数据结构:基于C语言来说,C只给出了一些基本的数据类型,如int,char等, 但处理复杂问题时,只用这些基本的数据类型很难设计出高效的算法去解决问题,比如 设计一个学生信息管理系统,一个学生的信息包括 学号,姓名,性别,籍贯,专业,等等,学号是数字,其他的是字符,如果一个一个定义会十分麻烦,但他们都有抽象意义的联系,所以如果能够定义一个包含这些所有信息的数据,那么就会...原创 2019-04-25 00:48:02 · 223 阅读 · 0 评论 -
数据结构2:线性表
线性结构的特点是除第一个元素无直接前驱,最后一个元素无直接后继之外,每个数据元素都有一个前驱和后继。可以想象一下糖葫芦。线性表的顺序存储(顺序表)的基本定义:#include<stdio.h>#include<iostream>using namespace std;#define MAXSIZE 100 //一般元素个数不超过100,所以最大值定义为...原创 2019-04-25 10:28:42 · 240 阅读 · 0 评论 -
数据结构3:栈和队列
栈和队列是限制了存取点的线性结构。计算机采用调用栈来调用函数。以下摘自《算法详解》:栈就是一个先进后出的结构,就像装羽毛球的球筒,第一个放进去的羽毛球,总是最后一个出来。栈只能在栈顶进行插入删除。图示:队列:和栈相反,队列是一个先进先出的结构,从字面意思上理解,就和去买东西时排的队一样,先去的人在前面,先买到。队列只能在队头进行删除,队尾插入。...原创 2019-04-25 11:17:36 · 437 阅读 · 0 评论 -
数据结构5:KMP算法详解
KMP算法优于BF算法的地方是指针不回溯,利用已经比较过的部分,将模式串向右移动尽可能远的距离,在继续比较。KMP算法的核心就是构建一个next[]数组,以这个数组来决定移动的距离。在此之前先引入 公共前缀后缀这个定义:以”ABCDABD”为例,进行介绍:- ”A”的前缀和后缀都为空集,共有元素的长度为0;- ”AB”的前缀为[A],后缀为[B],共有元素的长度为0;- ”ABC...原创 2019-05-10 00:27:46 · 481 阅读 · 0 评论 -
数据结构6:二叉树的代码实现
以二叉链表存储二叉树,以 ‘#‘ 表示无后继结点。#include<stdio.h>#include<iostream>#include<string.h>#include<string>#include<algorithm>#include<stack>#include<queue>usin...原创 2019-06-03 19:23:12 · 367 阅读 · 0 评论 -
数据结构7:单链表的代码实现
#include<stdio.h>#include<iostream>#include<string>#include<algorithm>using namespace std;typedef struct LNode{ int data; struct LNode *next;}LNode,*LinkList;void Cre...原创 2019-06-03 19:26:11 · 383 阅读 · 0 评论 -
模板-根据先序遍历和中序遍历建立二叉树- HDU-1710-Binary Tree Traversals
#include <stdio.h>#include <string>#include <iostream>#include <algorithm>using namespace std;int t1[1000],t2[1000],count1=1;typedef struct Tree_node{ int data; struct...原创 2019-08-03 10:42:28 · 230 阅读 · 0 评论 -
堆排序裸模板
#include <stdio.h>#include <iostream>using namespace std;const int N = 1000;int tree[N];void heapify(int tree[], int n, int i){ // 当两个子节点都是堆时, 可以直接递归形成堆。 if(i > n){ return...原创 2019-09-19 19:13:22 · 311 阅读 · 0 评论 -
数据结构4:Tire树入门
以下来源于百度百科:在计算机科学中,Trie,又称字典树、单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串)。特点:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。核心思想:空间换时间,利用字符串的公共前缀来降低查询时间的开销以达到提高效率。例如:如给出字符串"abc","ab...原创 2019-04-25 21:09:23 · 2482 阅读 · 3 评论