
数据结构
Vwsrenzk
这个作者很懒,什么都没留下…
展开
-
八 排序
8.1 插入排序8.1.1 直接插入排序void InsertSort() { for(int i = 2; i <= n; i++) { if(A[i] < A[i - 1]) { A[0] = A[i]; int j = i - 1; for(; A[0] < A[j]; j--) A[j + 1] = A[j]; A[j + 1]原创 2020-08-04 17:48:34 · 220 阅读 · 0 评论 -
六 图
最小生成树primPrim是一种增量算法,每次选择代价最小的边加入生成树,然后根据新加的节点更新备选节点的代价。通俗来说就是从起点开始,用贪心策略每次加入一个节点到现有的集合(这个集合连通的),直到最后所有节点都加入。时间复杂度为o(n^2)。适合稠密图const int INF = 0x3f3f3f3f;const int maxn = 110;int lowcost[maxn];int closest[maxn];//点从 0 到 n-1void prim(int cost[][ma原创 2020-07-29 17:53:29 · 436 阅读 · 0 评论 -
五 树和二叉树
二叉树的定义typedef struct node { char data; struct node * lchild; struct node * rchild;} BTNode;void InitBT(BTNode * &b) { b = (BTNode *) malloc(sizeof(BTNode)); b->lchild = NULL; b->rchild = NULL;}二叉树的递归遍历前序遍历void Pre原创 2020-07-23 16:17:54 · 252 阅读 · 0 评论 -
四 串 KMP
4.1 Brute-Force(暴力)int BF(string s, string t) { int lens = s.length(), lent = t.length(); int i = 0, j = 0; while(i < lens && j < lent) { if(s[i] == t[j]) i++, j++; else i = i - j + 1, j =原创 2020-07-21 13:54:08 · 194 阅读 · 0 评论 -
三 栈和队列
3.1 顺序栈顺序栈的基本操作const int maxn = 1e4 + 5;typedef struct { int data[maxn]; int top;} SqStack;void Print(SqStack s) { for(int i = 0; i <= s.top; i++) cout << s.data[i] << " "; cout << endl;}void InitStack(原创 2020-07-18 17:17:18 · 165 阅读 · 0 评论 -
二 线性表
二 线性表2.1 顺序表顺序表的结构体const int maxn = 1e5+5;struct SqList{ int len; int data[maxn];};顺序表的动态分配const int maxn = 1e2+5;struct SeqList{ int *data; int MaxSize,lenght;};//L.data = new int[maxn];基本操作bool ListInsert(SqList &L, int原创 2020-07-16 16:32:39 · 217 阅读 · 0 评论 -
一 绪论
绪论基本概念与术语1.数据信息的载体,对客观事物的符号表示,在计算机科学中是指能输入到计算机中并且被计算机程序处理的符号的总称。(它是计算机程序加工的原料)2.数据元素是数据的基本单位。(通常作为一个整体进行考虑和处理)3.数据项是构成数据元素的不可分割的最小单位。4.数据对象具有相同性质的数据元素的集合。(是数据的子集)5.数据结构是相互之间存在特定关系的数据元素的集合。(在任何问题中,数据元素都不是孤立存在的,它们之间存在某种关系,这种关系就是结构)数据结构的三要素逻辑结构逻原创 2020-07-15 19:34:52 · 285 阅读 · 0 评论 -
HDU 4123 Bob’s Race(树形DP二次扫描换根法,rmq,取尺)
题意:给定一颗生成树,编号为1-n,每个顶点可以作为起点走最长的一段距离(未知)对于每个询问q,找到最长的一段连续编号的顶点使得编号中的最长距离的最大值与最小值的差小于q。思路:首先用树形dp二次扫描换根法求出每个顶点作为起点能走的最长距离,用RMQ算法预处理一下就能很快查询区间内最大值和最小值。(预处理出log数组求logn,自带的log函数太慢了会超时)。最后对于每个查询使用取尺算法,就可以...原创 2019-07-26 08:33:14 · 300 阅读 · 0 评论 -
codeforces-1131D-Gourmet choice(并查集+拓扑排序)
题意:给你两个长度分别为 n,m的正整数序列 a,b。以矩阵形式给出所有ai 和 bj(1≤i≤n,1≤j≤m) 的大小关系(>,<,=)。构造符合条件的 a 和 b序列,且 a,b 中最大元素尽量小。无解,输出No。思路:如果相等则放入一个并查集的集合,然后对于每个集合使用拓扑排序。ac代码:#include<bits/stdc++.h>using names...原创 2019-05-29 21:00:50 · 320 阅读 · 0 评论 -
codeforces-1131F-Asya And Kittens(并查集)
题意:n个数字给n-1对x,y;每次有x的块和有y的块合并且这两个块相邻。输出一个刚开始的序列时能合并完。题解一:并查集加vector对于并查集的每个集合保存在一个vector里面,模拟即可。但是需要注意2点:1.使用vector().swap( vt );来清空vector vt。不然在第八组超内存。2.在将一个vector压入另外一个vector 时将小的压入大的不然就交换一下2个ve...原创 2019-05-29 19:40:02 · 344 阅读 · 0 评论 -
HDU 6534 Chika and Friendly Pairs(树状数组,莫队,离散化)
在莫队插入数字x时查询区间(x+k,x-k)之间有多少个,删除同理。#include<bits/stdc++.h>using namespace std;const int maxn = 3e4;const int maxm = 3e4;const int MAX = 1e5;int s[maxn], ans[maxm], cnt[MAX], lsh[MAX];int C...原创 2019-05-21 22:55:26 · 314 阅读 · 0 评论 -
L3-002 特殊堆栈 (树状数组+二分)
题目链接L3-002特殊堆栈(30 分)堆栈是一种经典的后进先出的线性结构,相关的操作主要有“入栈”(在堆栈顶插入一个元素)和“出栈”(将栈顶元素返回并从堆栈中删除)。本题要求你实现另一个附加的操作:“取中值”——即返回所有堆栈中元素键值的中值。给定 N 个元素,如果 N 是偶数,则中值定义为第 N/2 小元;若是奇数,则为第 (N+1)/2 小元。输入格式:输入的第一行是正整...原创 2019-02-27 21:18:19 · 706 阅读 · 0 评论