数据结构
文章平均质量分 75
学习记录
古路
这个作者很懒,什么都没留下…
展开
-
最小生成树 Minimum Spanning Tree
两种解法的思路1584-连接所有点的最小费用示例 1:1.Kruskal算法并查集的路径压缩:Kruskal算法思路:Kruskal 算法以边为单元,时间(m log(m))主要取决于边数,比较适合于稀疏图.2.Prim算法prim 算法其实就是 BFS 思想。注意优先队列的 cmp ,有点反直觉啊。......原创 2022-06-30 21:30:27 · 234 阅读 · 0 评论 -
450-删除二叉搜索树中的节点
450-删除二叉搜索树中的节点删除二叉搜索树中的节点Category Difficulty Likes Dislikesalgorithms Medium (49.03%) 606 -TagsCompanies给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。一般来说,删除节点可分为两个步骤:1.首先找到需要删除的节点;2.如果找到了,删除它。示例 1:输入:ro.原创 2022-04-01 15:57:35 · 777 阅读 · 0 评论 -
OJ输入输出总结
OJ输入输出总结0.牛客练习场1.标准输入输出1.1.cin>>1.2.cin.get()不带参数1.3.cin.get(ch)带一个参数1.4.cin.get(字符数组, 字符个数n, 终止字符)带三个参数1.5.cin.getline()1.6.getline(cin,str)2.文件输入输出2.1.文件流类与文件流对象2.2.打开(输出)文件2.3.关闭文件3.字符串流的读写3.1.概念0.牛客练习场牛客练习场1.标准输入输出参考cin是istream类的对象c原创 2021-05-04 11:13:16 · 437 阅读 · 0 评论 -
堆排序02.索引堆
堆排序02.索引堆0.最大索引堆1.最大索引堆的改进0.最大索引堆模板类:// 最大索引堆template<typename Item>class IndexMaxHeap{private: Item *data; // 最大索引堆中的数据 int *indexes; // 最大索引堆中的索引 int count; int capacity; // 索引堆中, 数据之间的比较根据data的大小进行比较, 但实际操作的是索引原创 2020-08-15 10:46:50 · 59 阅读 · 0 评论 -
堆排序01
堆排序020.最大堆模板类的简单实现1.最大堆排序2.原地排序0.最大堆模板类的简单实现template<typename Item>class MaxHeap {private: Item *data; int count; int capacity; void shiftUp(int k)//新加入元素后会破坏树的平衡,使用shitUp进行元素位置的调整 { while (k > 1/*k>1避免越界*/ && data[k / 2] &原创 2020-08-15 09:25:32 · 70 阅读 · 0 评论 -
排序算法
排序算法0.引言1.选择排序2.插入排序3.冒泡排序4.希尔排序5.归并排序6.快速排序0.引言图片参考自博客.1.选择排序template<typename T>void selectionSort(T arr[], int n){ for (int i = 0; i < n; i++) { //寻找[i,n)区间的最小值,从剩下的位置中选择最小的元素 int minIndex = i; for (int j = i + 1; j < n;原创 2020-08-13 15:51:54 · 110 阅读 · 0 评论 -
ch04.树--二叉树创建(前序中序与中序后序)
二叉树的创建0.引言1.单独中序序列建树不唯一2.'前+中','中+后' 建树3.代码实现4.完整测试代码5.指针的引用0.引言大话数据结构书中讲,将前序递归建树中的顺序变一下就是中序,后序,但是当我测试的时候无法成功,书中有错:结论放前面,常用的几种建树方式:1.前序序列可以建树,可能不唯一,但把空节点标注出来可以唯一。2.前序遍历序列和中序遍历序列,可以唯一建树。3.后序遍历序列和中序遍历序列,可以唯一建树。4.层序遍历+三种组合。1.单独中序序列建树不唯一前序建树不唯一,但是只原创 2020-08-15 22:28:57 · 384 阅读 · 0 评论 -
ch04.树--二叉树创建与遍历
ch04.树--二叉树创建与遍历0.引言1.demo0.引言常用的三种方式:中序遍历inorder traversal:左+节点+右. 的顺序遍历.–>中缀表达式后序遍历postorder traversal: 左+右+节点. 的遍历顺序.–>后缀表达式先序遍历preorder traversal:节点+右+左. 的遍历顺序.–>前缀表达式(不常用)层序遍历:顾名思义,从根及诶单开始,每层从左到右依次遍历.注:数据结构与算法描述中,先序遍历为:节点+右+左大话数据结构原创 2020-08-15 15:39:38 · 129 阅读 · 0 评论 -
ch04.树
ch04.树ch04.树4.1.二叉树ch04.树树的大部分操作的平均运行时间为O(logN).root, parent, child, edge, leaf, ancestor祖先, descendant后裔, proper ancestor真祖先, proper descendant真后裔path:n1->nkd的路径上边的条数,k-1.对任意节点:深度:该节点到root的路径长 (root的深为0)高度:该节点到最远leaf的路径长(leaf 的高为0)树的深度:最深le原创 2020-08-15 15:39:07 · 121 阅读 · 0 评论 -
ch03.表栈队列--中缀转后缀的栈实现
ch03.表栈队列--中缀转后缀的栈实现0.引言1.使用栈实现2.参考实现0.引言我的实现流程:1.左括号或栈空,直接入栈;2.栈顶运算优先级大于该运算符,则出栈;3.栈顶运算符优先级小于该运算符,则入栈;4.‘)’单独处理.1.使用栈实现#include <iostream>#include <algorithm>#include <fstream>#include <stdlib.h>#include <assert原创 2020-08-13 15:20:27 · 104 阅读 · 0 评论 -
ch03.表栈队列--后缀表达式的栈实现
ch03.表栈队列--后缀表达式的栈实现0.引言1.使用栈实现0.引言1.使用栈实现#include <iostream>#include <algorithm>#include <fstream>#include <stdlib.h>#include <assert.h>#include <string.h>using namespace std;#define EmptyTOS -1#define M原创 2020-08-11 09:02:33 · 97 阅读 · 0 评论 -
ch03.表栈队列--平衡符号的栈实现
ch03.表栈队列--平衡符号的栈实现0.引言1.使用数组构建栈解决平衡符号问题0.引言编译器在检查程序的语法错误时,常常会由于缺少一个符号比如{,引起编译器列出上百行的诊断,而真正的错误并没有找出。即,使用栈实现,字符中的()[]{}匹配问题。1.使用数组构建栈解决平衡符号问题#include <iostream>#include <algorithm>#include <fstream>using namespace std;/*********原创 2020-08-11 08:58:08 · 186 阅读 · 0 评论 -
ch03.表栈队列--多重链表实现学生课程注册
ch03.表栈队列--多重链表实现学生课程注册0.引言1.题目说明2.代码实现0.引言多重链表的练习。1.题目说明一所有40000名学生和2500门课程的大学需要生成两种类型的报告。第一个报告列出每个班的注册者,第二个报告列出每个学生注册的班级。常用的实现方法是使用二维数组,这样一个数组将有1亿项。平均一个学生注册三门课程,因此实际上有意义的数据只有120000项,大约占0.1%。数据结构定义:用两个链表做索引,分别存储课程节点和学生节点,注册节点为多重链表。课程为固定的课程,先初始化好;原创 2020-07-26 20:00:25 · 227 阅读 · 0 评论 -
ch03.表栈队列--单链表实现多项式操作
ch03.表栈队列--单链表实现多项式操作0.引言1.使用结构体实现2.单链表实现0.引言实现多项式的加法与乘法。1.使用结构体实现#include <iostream>#include <algorithm>using namespace std;/************************************结构体实现多项式操作**************************///demo: 多项式ADTconst int MaxDegre原创 2020-07-12 15:37:49 · 125 阅读 · 0 评论 -
ch03.表栈队列--单链表基数排序
ch03.表栈队列---单链表基数排序0.引言1.算法流程2.代码实现0.引言基数排序,又称卡氏排序,源自于桶排序。1.算法流程自己定义的数据结构,不同于其他人的实现(用数组保存链表),自己改为了以链表保存链表。2.代码实现#include <iostream>#include <algorithm>using namespace std;/*************************************基数排序radio sort**********原创 2020-07-14 09:05:57 · 266 阅读 · 0 评论 -
ch02.算法分析
ch02.算法分析2.0.引言2.1.数学基础2.2.运行时间计算2.3.运行时间中的对数demo2.0.引言“计算任何事情不要超过一次”2.1.数学基础四个定义:T(N)的增长率小于等于f(N)的增长率.f(N)是T(N)的上界. T(N) <=f(N) --> T(N)=O(f(N))T(N)的增长率大于等于g(N)的增长率. g(N)是T(N)的下界. T(N)>=g(N) --> T(N)=omega(g(N))原创 2020-07-11 08:32:24 · 311 阅读 · 0 评论