数据结构与算法笔记
不要秃头、
这个作者很懒,什么都没留下…
展开
-
codeup|实现简单计算器
#include<bits/stdc++.h>using namespace std;//codeup 1918 简单计算器struct node { double num;//操作数 char op;//操作符 bool flag;//true表示操作数,false表示操作符};string str;stack<node> s;//操作符栈queue<node> q;//后缀表达式序列map<char, int>原创 2021-08-30 12:37:28 · 108 阅读 · 0 评论 -
lowbit运算、树状数组详解
lowbit运算lowbit(x)=x&(-x)lowbit(x)可以理解为能整除x的最大2的幂次树状数组存放的是i号位之前(含i号位,下同)lowbit(i)个整数之和C[i]的覆盖长度是lowbit(i)[也可理解为管辖范围]将C[i]画成二维图容易理解树状数组的下标必须从1开始C[x]=A[x-lowbit(x)+1]+···+A[x]getSum(x)返回前x个数之和C[x]=A[x-lowbit(x)+1]+···+A[x]可推得SUM(1,x)=SUM(1,x-lo原创 2021-05-30 19:44:27 · 914 阅读 · 0 评论 -
KMP算法与next数组
next数组next[i]表示使子串s[0···i]的前缀s[0···k]等于后缀s[i-k···i]的最大的k(前缀和后缀可以重叠,但不能是s[0···k]本身,当找不到相等的前后缀时令next[i]=-1(即next[i]是所求最长相等前后缀中前缀最后一位的下标)用递归法求解next[i]:void getNext(char s[],int len){//getNext求解长度为len的字符串s的next数组 int j=-1; next[0]=-1;//初始化j=next[0]=原创 2021-05-30 19:43:12 · 104 阅读 · 0 评论 -
堆的基本操作
#include<bits/stdc++.h>using namespace std;const int maxn = 100;int heap[maxn], n = 10;//heap为堆,n为元素个数//对heap数组在[low,high]范围向下调整//其中low为欲调整结点的数组下标,high一般为堆的最后一个元素的数组下标void downAdjust(int low, int high) { int i = low, j = i * 2;//i为欲调整结点,j原创 2021-03-28 11:00:00 · 122 阅读 · 0 评论 -
并查集的基本操作
#include<bits/stdc++.h>const int maxn = 10001;int father[maxn];void init(int father[], int n) { for (int i = 1; i <= n; i++) { father[i] = i; }}int findFather1(int x) {//返回元素x所在集合的根节点 while (x != father[x]) {//如果不是根节点,.原创 2021-03-27 20:13:18 · 93 阅读 · 0 评论 -
AVL(二叉平衡树)的基本操作
#include<bits/stdc++.h>using namespace std;struct node { int v, height;//v为结点权值,height为当前子树高度 node *lchild, *rchild;//左右孩子结点地址};node *newNode(int v) {//生成一个结点,v为节点权值 node *Node = new node;//申请一个node型变量的地址空间 Node->v = v;//结点权值原创 2021-03-27 16:45:09 · 134 阅读 · 0 评论 -
二叉查找树的基本操作
#include<bits/stdc++.h>struct node{ int data; node* lchild; node* rchild;};void search(node* root,int x){//查找二叉查找树中数据域为x的结点 if(root==NULL){ printf("search failed\n"); return; } if(x==root->data){//查找成功,原创 2021-03-26 19:49:02 · 85 阅读 · 0 评论 -
二叉树的操作&&重点:几种遍历方式
题目:已知一棵二叉树的后序遍历和中序遍历序列,求这棵二叉树的层序遍历序列。#include<stdio.h>#include<string.h>#include<queue>#include<algorithm>using namespace std;const int maxn = 50;struct node { int data; node *lchild; node *rchild;};int pre[原创 2021-03-24 21:41:01 · 87 阅读 · 0 评论 -
codeup|PAT A1032 Sharing(静态链表)
Description给定连个单词,判断两个单词相同后缀的位置。Input第一行start1 start2 N,其中start1第一个单词地址,start2为第二个单词地址,N为一共N个节点。Sample Input 1:11111 22222 967890 i 0000200010 a 1234500003 g -112345 D 6789000002 n 0000322222 B 2345611111 L 0000123456 e 6789000001 o 00010Sam原创 2021-03-20 12:35:35 · 91 阅读 · 0 评论 -
链表操作
创建链表#include<stdio.h>#include<stdlib.h>struct node {//链表节点 int data; node *next;//指向下一个指针的地址};node *create(int Array[]) { node *p, *pre, *head;//pre保存当前节点的前驱节点,head为头节点 head = new node;//创建头节点 head->next = NULL;//头原创 2021-03-19 14:41:20 · 86 阅读 · 0 评论 -
codeup|问题 C: 浮点数加法
题目描述求2个浮点数相加的和题目中输入输出中出现浮点数都有如下的形式:P1P2…Pi.Q1Q2…Qj对于整数部分,P1P2…Pi是一个非负整数对于小数部分,Qj不等于0输入对于每组案例,第1行是测试数据的组数n,每组测试数据占2行,分别是两个加数。每组测试数据之间有一个空行,每行数据不超过100个字符输出每组案例是n行,每组测试数据有一行输出是相应的和。输出保证一定是一个小数部分不为0的浮点数样例输入 Copy23.75690.5644543.543543.25样例输出原创 2021-03-13 18:20:08 · 237 阅读 · 0 评论 -
大整数的加减乘除运算
#include<cstdio>#include<cstring>int r = 0;struct bign { int d[1000]; int len; bign() {//构造函数 memset(d, 0, sizeof(d)); len = 0; }};bign change(char str[]) { bign a; a.len = strlen(str); for (原创 2021-03-12 20:25:45 · 1726 阅读 · 0 评论 -
vector知识点总结
基础知识vectorvector初始化vector<int>a(10);//定义具有10个整形元素的向量vector<int>a(10,1);//定义向量并把每个给出的元素赋初值1vector<int>a(b);//用向量b赋值给向量avector<int>a(b.begin(),b.begin()+3)//将b中的0-2共三个元素赋值给avector<int>a(b,b+7)//从数组中获得初值vector常用内置函数#inc原创 2021-03-08 16:16:45 · 363 阅读 · 1 评论 -
使用指针变量作为函数参数|地址传递与指针传递实例总结
使用指针变量作为函数参数|地址传递与指针传递实例总结地址传递值传递错误写法1错误写法2地址传递指针类型可以作为函数参数的类型,这时视为把变量的地址传入函数。如果在函数中对这个地址的元素进行改变,原先的数据就会确实地被改变。#include <stdio.h>void change(int *p) { *p = 233;}int main() { int a = 1; int *p = &a; change(p); printf("%原创 2021-02-10 16:40:09 · 4041 阅读 · 2 评论 -
C++operator(重载操作符)及解决成绩排序问题
operator是C++中的关键字,表示一个运算符函数,用于支持用户自己定义的class的基本操作,如比较大小、判断是否相等,可以理解为:一方面使运算符的使用方法与原来一致,另一方面扩展其功能智能通过函数的方式。例题:通过构建结构体重载运算符排序学生成绩,使得按总分自上而下的顺序排列,如果总分相等则数学成绩高的排在前面代码实现如下:#include<iostream>#include<algorithm>using namespace std;struct score原创 2020-08-27 16:37:33 · 975 阅读 · 0 评论 -
C++排序函数cmp()总结&解决成绩按条件排序问题
C++中cmp()函数用途很多,特此总结:一般数据类型的排序:#include<iostream>#include<algorithm>using namespace std;bool cmp(int a, int b) { return a > b;//值传递}int main() { int a[5] = { 1,5,2,4,3 }; sort(a, a + 5,cmp);//sort()函数包含在头文件<algorithm&g原创 2020-08-27 16:14:35 · 1089 阅读 · 0 评论 -
编程练习|子数组求和询问
目录题目思路代码题目DescriptionOne day, you find an array a[N](N ≤ 50000), each element a[i] ≤ 1000000 (1 ≤ i ≤ N). We define a function v[i,j] as the sum of different value from i to j.<> For example, N = 8, and array a[N] is 1 2 1 4 3 4 4 4.v[1,1] = a[1原创 2020-08-27 16:52:35 · 122 阅读 · 0 评论 -
快速幂算法解决幂模问题
目录快速幂算法的概念模运算的基本法则例题1思路代码注意事项例题2思路代码快速幂算法的概念由于“指数爆炸”的现象,当a^b中指数b较大时,不能直接计算得到a ^b的结果,题目中通常会出现取余或求末几位。模运算的基本法则(a + b) % p = (a % p + b % p) % p (a - b) % p = (a % p - b % p ) % p (a * b) % p = (a % p * b % p) % p 例题1计算 x^n mod m,2 ≤ x, m ≤ 1000, 0 ≤原创 2020-08-22 20:43:18 · 830 阅读 · 0 评论 -
邓俊辉数据结构与算法笔记|动态规划解最长公共子序列
原创 2020-08-25 12:05:42 · 174 阅读 · 0 评论 -
邓俊辉数据结构与算法笔记|动态规划解FIB()
动态规划可理解为通过递归找到算法本质并给出一个初步的解后再等效地转化为迭代的形式原创 2020-08-25 11:52:14 · 226 阅读 · 0 评论 -
邓俊辉数据结构笔记|例-MAX2
完整代码#include<iostream>using namespace std;const int N = 1000;int a[N];int main() { int n, lo, hi, T; cin >> T; while (T--) { cin >> n; for (int i = 0; i < n; i++) { cin >> a[i]; } cin >> lo >> hi;.原创 2020-08-23 17:42:11 · 300 阅读 · 1 评论 -
邓俊辉数据结构笔记|数组求和+二分递归
用二分递归求数组之和代码如下#include<iostream>using namespace std;const int N = 1000;int a[N];int sum(int A[], int lo, int hi) { if (lo == hi) return A[lo]; int mi = (lo + hi) >> 1;//>>1相当于除以2 return sum(A, lo, mi) + sum(A, mi + 1, hi);}int.原创 2020-08-23 16:42:50 · 277 阅读 · 0 评论