自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 收藏
  • 关注

原创 Anaconda Jupyterlab 安装lsp插件后 一直initializing的可能解决方法

推测为网络问题,更换language-server为 jedi-language-server,可能解决anaconda prompt在对应环境下执行如下命令conda install -c conda-forge jedi-language-server

2022-03-29 19:05:37 1805 1

原创 基数排序及其思想 C++代码实现及分析 恋上数据结构笔记

文章目录复习梗概算法思想时间及空间复杂度基数排序基础版代码 及输出结果计数排序函数基数排序函数可视化输出另一种思路完整版代码复习梗概思想如何取数字各个位位数计数排序保证稳定性怎么保证算法思想基数排序思想:本质是按照个位数字,十位数字,百位数字。。。分别对数组进行排序在排序高位的时候,就把前面低位的最终顺序完全确定了,直到排到最高位就完全确定顺序而因为每位数字都是0-9的范围,又正好可以采用计数排序思想不难,主要把思想转换成代码有一定难度,要注意如何取到每一位上的位数:个位:X/1%1

2021-12-21 16:30:43 1231

原创 计数排序及其改进 C++代码实现与分析 恋上数据结构笔记

文章目录复习梗概算法思想基础思想改进空间复杂度,改进不能对负数进行排序问题改进稳定性计数排序时间空间复杂度计数排序基础版 代码及输出计数排序第一次改进版 代码及输出计数排序终极版 代码及输出(重要)复习梗概基础算法思想?两种改进的思路?重点在于最终版本思想最终版本是如何做到稳定的?三个数组(array,counts,temp)彼此间的索引和元素的对应关系?算法思想基础思想计数排序适合对在一定范围内的整数进行排序先找到排序数组的最大值,创建一个最大索引是该最大值的计数数组,初始

2021-11-16 16:54:22 927

原创 希尔排序(缩小增量排序)(插入排序的优化版) C++代码实现及算法分析 恋上数据结构笔记

文章目录复习概要算法思想算法流程算法复杂度分析及稳定性希尔排序代码正常版希尔排序与插入排序代码对比希尔排序个人青春版(别看以免走上歧途)复习概要算法思想与流程分这么多组分别插入排序有什么用?为什么不直接整个插入排序?时间复杂度优化要眼熟插入排序那一段的代码,和原本的插入排序对比着看!插入排序那一段多了一层循环是干什么的,怎么是三层循环?希尔的步长序列生成方式?算法思想我觉得完全没必要按照行和列的思想去理解希尔排序因为一句话概括希尔排序就是,每隔几个元素一组,分组进行插入排序,然后

2021-11-04 20:57:26 586

原创 归并排序算法 C++实现与时间复杂度(考过)恋上数据结构笔记

复习梗概画图,自己整个数组,看代码写步骤,这个对理解归并排序还是很有必要的合并两个有序数组的merge函数写法时间复杂度的分析方法!!!其实我觉得去b站找个动态的步骤分解视频也是不错的复习方法,当然要自己先回想归并排序特点稳定,快速递归调用,分治思想合并两个有序数组的思想归并排序时间复杂度分析(某校知能情报考过)恋上数据结构笔记 归并排序与时间复杂度这个图可能会很有用归并排序本体函数从输出也能大致看出来归并排序的归并顺序,每次merge都会打印一次数组void mer

2021-11-01 19:38:19 921

原创 TPO 按主题刷题记录

生态学阅读2021.10.28TPO 2 -The Origins of Cetaceans文章概要题,选项说太细就有问题TPO 4 -Deer Populations of the Puget Sound MEIKANWAN

2021-10-30 16:59:12 324

原创 二分搜索法 C++代码实现 恋上数据结构笔记

复习梗概二分搜索法的end有两种定义方式,两种分别是什么含义?二分搜索法end的两种定义方式分别影响了什么?(结束条件,更新指针)二分搜索法的结束条件和更新指针两步代码?二分搜索法的整体流程?二分搜索法图解二分搜索法是什么,时间复杂度二分搜索法 : 用于寻找有序数组中的某个元素的位置 ,平均时间复杂度O(logn)(每次砍一半),没有稳定性二分搜索法整体流程初始化begin和end指针,初始化mid指针若mid大于num,更新begin指针,mid小于num更新end指针(假设

2021-10-30 15:31:11 175

原创 插入排序算法 及其二分搜索优化版 C++代码实现 恋上数据结构笔记

复习梗概文章目录复习梗概插入排序算法思想(图解)插入排序时间复杂度与特性(多少,与什么有关?)插入排序基础版插入排序2nd优化版(优化了哪里?)插入排序3rd优化版(优化了哪里?)插入排序算法思想(图解)想象插入排序就是两只手,一只手里的牌是有序的,一只是无序的,每次把无序的手里的牌的第一张,与有序的牌逐个比较,插入有序牌堆的合适位置插入排序时间复杂度与特性(多少,与什么有关?)插入排序的时间复杂度: 与数组中的逆序对有关逆序对:比如想要递增的数组【0,8,9,1】这里【8,1】【9,1】

2021-10-28 17:30:49 291

原创 堆排序 C++代码实现及思想 排序过程输出 恋上数据结构笔记

复习梗概文章目录复习梗概什么是堆思想?堆排序算法怎么来的?什么是下滤?代码什么是建堆?代码堆排序本体 代码及排序过程输出 和时间复杂度完整代码什么是堆思想?最大堆:树形结构,每一个结点元素都比子结点大堆常常用动态数组存储二叉最大堆能够应用于动态数组,是因为应用了完全二叉树的两个特性:i为当前结点序号,左子结点 = 2i+1,右子结点=2i+2,父结点=floor((i-1)/2),这个是根结点序号为0的情况,这个特质不用死记硬背,想用的时候画个图自己标下序号就试出来了完全二叉树,共n个结点,

2021-10-27 19:20:06 213

原创 选择排序 C++代码实现及性能分析 恋上数据结构笔记

文章目录算法思想及时间复杂度选择排序的优化代码及输出完整代码算法思想及时间复杂度选择排序:从未排序序列中,找出最大的那个元素,与未排序序列的末尾元素交换,/不断执行上述步骤(n-1轮),末尾最大元素形成有序序列(挑最小的也可以,看需求是升序还是降序)相比冒泡排序,选择排序无法在内循环过程中,通过比较确定前面是否已经形成有序序列,因此我认为难以优化最好最坏平均时间复杂度均为O(n2) 空间复杂度:O(1) 属于稳定排序选择排序的优化相比冒泡排序,选择排序无法在内循环过程中,通过比较确定前

2021-10-27 18:34:29 143

原创 冒泡排序算法 以及两种优化方法 和性能比较分析 C++代码实现 恋上数据结构笔记

前言其实犹豫了很久要不要建个个人博客,不用csdn了,但是想到各种太麻烦了,还是这里最方便想写的都在代码注释里了,下一次复习应该会更新一个图解,算法真是比数据结构有意思多了复习梗概:冒泡排序图解基础版的两个循环结束条件?第二次优化了哪里?怎么实现的第三次优化了哪里?怎么实现的冒泡排序基础版void bubbleSort1th(vector<int> &array){ int compareTimes = 0; //记录比较次数,为了体现三个算法的区别

2021-10-26 16:41:24 267

原创 2021- 10 -13 AVL树的平衡调整(有parent指针) 代码逻辑

AVL平衡调整步骤:插入结点找到 插入节点的 的第一个 不平衡的 非父祖先结点2.1 循环遍历插入结点的祖先结点2.2 在遍历的同时判断该结点是否平衡2.3 平衡则更新当前结点的高度,为了下一次判断是否平衡,不平衡则进行平衡调整平衡则进行平衡调整3.1 判断三个结点的位置关系(LL,RR,LR,RL)3.2 进行平衡3.3 维护结点指针!!!**我犯的错误::有没有可能旋转涉及的三个结点不连在一起? 不可能有没有可能LL RR LR RL之外的情况?? 不

2021-10-13 21:16:34 175

原创 2021-10-11 二叉树,二叉搜索树及其相关23个操作 C++实现笔记(复习用,含C指针复习)

学数据结构到现在写的最久的一部分,简单总结一下这一周1.考虑到未来考试要求,实现语言从java换成了C++,没想到意外的顺利2.没别的了,干就完了3.代码肯定有错误的地方,虽然我自认为是完美主义者,但都是为了效率没办法啦//! *指针变量,例如:int b = *p; *代表取值运算符,返回地址指向的值(不是地址本身,p是地址本身)//! 做个比喻*p就是找到地址为p的箱子,然后*打开箱子取出里面的东西,然后把东西赋值给b//! 定义指针变量,例如:int *p = &a; 中的int*

2021-10-11 22:36:56 136

原创 2021-10-11 程序人生 -感想随笔

2021年的下半年,只是几个月里,却仿佛过了几年有很多话想写,一时语塞,只写出下面一段我们的一生就是在走完一个写好的程序,我们的基因和先天条件就像是被半随机生成的代码。看似必然的事情往往由无数偶然组成,很多生命历程中的巧合和偶然,其中必然有着必然,就像是一段程序的结果。代码运行了十几年二十年才出的结果,一研究,原来竟然在一开始就已注定。我们生下来就带着不同的变量顺着代码跑下去,跑着跑着就变了,也许好也许坏,可是我也不知道程序的结果是什么样的,我只是尽力(也许是随缘)跑好我在跑的这一句代码而已。Hell

2021-10-11 22:33:17 551 1

原创 2021-10-11 二叉树中查找值为key的结点

主要提醒自己这里的return,还是遍历框架的应用两个使用框架的题的比较//! 二叉树的翻转:本质就是二叉树的遍历的应用//! 以任意形式遍历二叉树的每一个结点,访问每一个结点的同时调换其左右子树//! 中序遍历额外注意一下调换后的参数问题Node *BinarySearchTreesZH::invertTreePreOrder(Node *node){ if (node == nullptr) { return node; } Node *tmp

2021-10-11 15:31:19 822

原创 2021-10-11 ! LeetCode226. 翻转二叉树 的前中后层序遍历写法

还是遍历框架的应用//! 二叉树的翻转:本质就是二叉树的遍历的应用//! 以任意形式遍历二叉树的每一个结点,访问每一个结点的同时调换其左右子树//! 中序遍历额外注意一下调换后的参数问题Node *BinarySearchTreesZH::invertTreePreOrder(Node *node){ if (node == nullptr) { return node; } Node *tmp = node->left; node-&

2021-10-11 15:27:40 124

原创 2021-10-11 二叉树 删除结点 (用到parent指针)

太恶心了,三种情况理解就好//! 删除结点void BinarySearchTreesZH::remove(Node *node){ if (node->left != nullptr && node->right != nullptr)//! 把删除度为2 的结点的问题转化为删除 { node->element = predecessor(node)->element; remove(predecessor(

2021-10-11 15:24:00 83

原创 2021-10-11 寻找二叉树结点的前驱或后继结点(用到parent指针)

关键是找前驱后继的思想理解了就好//! 查找某个结点的前驱或后继结点(要求结点要有parent指针)//! 前驱结点定义:中序遍历中的前一个结点,而不是二叉树结构中的上一个母结点Node *BinarySearchTreesZH::predecessor(Node *node){ if (node == nullptr) { return node; } //! 前驱结点是左子树中的最右结点 if (node->left != null

2021-10-11 15:21:12 326

原创 2021- 10 -9 LeetCode 958. 二叉树的完全性检验(待补完)

二叉树的完全性检验给定一个二叉树,确定它是否是一个完全二叉树。若设二叉树的深度为 h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。(注:第 h 层可能包含 1~ 2h 个节点。)。又是层序遍历的应用,我看题解里还有别的很多解法,待我后面学了再回来看这道题//! 检验二叉树是否为完全二叉树//! 层序遍历每一个结点,有三种情况,分情况讨论bool BinarySearchTreesZH::isCompleteT.

2021-10-09 20:46:09 67

原创 2021-10-09 求二叉树的高度(递归和迭代版本)

剑指 Offer 55 - I. 二叉树的深度输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。和题解写的一比,我写的像坨shit//! 求二叉树的高度,递归版本//! 递归的精髓就在于,把大问题分解为解答过程相同的小问题//! 既然我们要求根节点的高度,根节点的高度又等于其子节点的最大高度加一//! 那么问题就转化为了求每个节点及其子节点的高度,而最小问题就是叶节点的子节点为空,高度为0int BinarySear

2021-10-09 20:41:28 174

原创 2021 - 10 -7 ! 二叉树的前序、中序、后序遍历 非递归思路(迭代版本)

//! 前序遍历的非递归版本,精髓在于用栈模拟递归的过程,但实际进栈出栈顺序与递归并不一样,//! 比较抽象,建议画图理解,比较重要void BinarySearchTreesZH::preorderTraversalNoRecursion(Node *node){ stack<Node *> stk; if (node == nullptr) { return; } stk.push(node); while (stk...

2021-10-09 20:34:57 100 1

原创 2021-10-7 !二叉树的层序遍历

好多题都用得上,有机会补张内部队列的图吧//! 层序遍历,很重要,精髓在于对于队列的应用void BinarySearchTreesZH::levelorderTraversal(Node *node){ queue<Node *> list; //创建结构体指针队列,数据类型Node*,但是层序遍历不用指针也可以 if (node == nullptr) { return; } else { list.pus

2021-10-09 20:19:55 54

原创 2021-10-7 !二叉树的前序、中序、后序遍历 (递归版本)

非常重要,等下次复习补一张系统栈的图//前序遍历,递归版本,三个遍历的递归写法思想都一致,唯一区别就是在什么时候访问根结点//画个图和栈更好理解,这里不多解释void BinarySearchTreesZH::preorderTraversal(Node *node){ if (node == nullptr) { return; } cout << node->element << " "; preorderTr

2021-10-09 20:17:26 45

原创 2021 - 9 -下旬 数据结构- 线性表 -双端循环队列 - java实现

//循环双端队列:Circle Double Ended Queue//本质是对动态数组的优化//队头队尾都可以添加或删除元素//相比于普通循环队列需要注意的点是在队头插入元素时的对front前移的处理public class CircleDequeZH<E> { private int size; private int front; private E elements[]; private static final int DEFAULT_CAP

2021-10-06 19:53:15 66

原创 2021 - 9 下旬 数据结构-线性表-循环队列-java实现代码

//循环队列,本质就是用动态数组实现的,且出队入队时间复杂度均O(1)的队列//相比普通队列,增设一个front指针,代表队头,代表下一个出队的元素//循环队列的重点在于队头队尾的元素的下标的计算(本质是映射循环队列中的真实索引),以及队列满的判断条件//真实元素下标:(index+front)%elements.length(index为队列中下标,计算得真实数组中下标)// 队尾:index =size-1 入队位置 index =size 出队位置(队头):front(移动至(front

2021-10-06 19:50:50 55

原创 2021-9-下旬 数据结构-线性表-队列-java代码实现(复习用)

话说。。。每次都用现成的类实现,是不是有点偷懒//队列的本质也是线性表,特性为只在线性表首位端进行操作,为先进先出,和生活中排队的队列是一样的//队列涉及到的操作主要是入队(enQueue)和出队(deQueue)//其中,因为出队是在队尾操作,因此,用动态数组实现队列就会涉及到所有元素的前移,O(n)//所以队列这里选择双向链表实现,得益于headnode和lastnode指针,无论入队出队都是O(1),牺牲空间换时间//实际方法实现也和前面都一样,我就节省时间直接用java自带Linkedli

2021-10-06 19:48:39 58

原创 2021-9-下旬 数据结构-线性表- 栈 -java代码实现(复习用)

import java.util.ArrayList;import java.util.List;//栈的本质就是线性表,因为总在线性表的表尾端进行操作(出栈入栈),其重要特性为FILO先进后出//所以在实现上选择 动态数组 和 双向链表 的进行出栈入栈的时间复杂度均为O(1),//实现各个方法也和之前学过的差不多,这里偷懒选择用java自带的Arraylist动态数组类简单实现栈//栈的应用很广泛,比如浏览器的前进后退功能其实就是用两个栈做到的public class StackZH&lt

2021-10-06 19:45:49 68

原创 2021-9-下旬 数据结构 - 线性表 - 循环链表 - java实现代码(复习用)

public class CycleLinkedListZH<E> { public static final int ELEMENT_NOT_FOUND = -1; private int size;//定义全局变量(不在函数里的)不初始化默认初始值为0,局部变量则初始值随机 //链表注意的无非那几个:插入删除情况分类,空指针错误 private CycleLinkedListZH.Node<E> headNode; private

2021-10-06 19:44:10 47

原创 2021-9-下旬 数据结构-线性表-双向链表-java代码实现(复习用)

public class DoubleLinkedListZH<E> { //调用方法参数是index的记得检测是否在合法范围(0~size-1)内,可以写一个arrangeCheck函数,我懒了,默认输入合法 //双向链表,一个结点前后两个指针 //双向链表相比单链表,add方法和remove方法大改,分四到三种情况,比较重要,时刻注意空指针报错 //clear方法的实际意义涉及到java 的内存管理机制,也可以好好回顾 //tostring也改了一下,

2021-10-06 19:41:28 72

原创 2021-9-下旬 数据结构-线性表-链表-java代码实现(复习用)

链表涉及到指针了,这里我还不了解java里对指针的隐藏,又由于以前学过C++里的指针,二者混淆,导致一开始非常蒙,出了很多问题,当然后来随着边写边查,基本都解决了//链表是一种“链式存储”的线性表,所有元素的内存地址不一定是连续的,在结构上已经完全不是数组了//普通线性表有个大缺点,可能会造成内存空间的浪费,有些位置不存元素时也占用内存//那么能不能用到多少就申请多少内存呢?? 所以链表出现了//在定义链表类时,一般在定义链表大类中定义一个子类结点类//链表在结构上,是由头结点和结点组成的,头

2021-10-06 19:39:03 72

原创 2021-9-下旬 数据结构-线性表-动态数组-java代码实现

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

2021-10-06 19:26:21 71

原创 D进制转换-C++实现

题目要求:输入一个正整数A,输出A的D进制数,即将十进制数A转换成D进制数输出。#include<iostream> using namespace std; void transform(int& num,int& n){ int array[32]; int i=0; for(;num!=0;i++){ array[i]=num%n; num/=n; } for(int j=0;j<i;j++){ cout<<array[i-j-1]

2020-06-20 00:57:03 237

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除