自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

仰望星空

Using no way as way, having no limitation as limitation.

原创 数组-堆排序

一、思路 数组可以抽象成一个堆结构。堆的深度为log,由一个乱序数组变成一个堆数组时间复杂度为O(nlogn),堆顶元素是最值,每次从堆顶弹出一个元素,重复进行n-1次后,数组有序。 下面定义一些堆排序的相关操作: HEAPIFY 建堆:把一个乱序的数组变成堆结构的数组,时间复杂度为 O(n...

2019-11-26 19:21:39 107 0

原创 树-二叉树的最大深度

来源LeetCode第104题 一、思路 给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 一棵深度为3的二叉树 数据结构在逻辑上可以分为线性结构、非线性结构。很明显,树和图一样都是非线性结构,额外地,图的遍历算法(深度优先遍历和广度优先遍历)对树...

2019-11-18 17:29:13 62 0

原创 树-二叉树遍历

一、思路 遍历实际上是按照某种顺序访问结点,比较典型的有先序、中序、后序、层序等。二叉树天然具有子结构,即左子树和右子树同样是二叉树,就是规模更小而已。二叉树三种遍历方式 1.1 先序 栈S; p= root; while(p || S不空){ while(p){ 访问p节点; ...

2019-11-17 20:33:39 53 0

原创 删除链表的倒数第N个结点

题目来源LeetCode第19题 一、思路 假设能够找到倒数第N个结点,想要删除它,必须知道倒数第N+1个结点的位置。由此就形成了两个小技巧。1)使用两根指针分别指向倒数第N个结点个倒数第N+1个结点;2)仅使用1根指针指向倒数第N+1个结点。 有可能会修改头指针的值,所以我们使用额外的小...

2019-11-17 15:27:48 39 0

原创 单链表-归并排序

题目来源148排序链表 一、思路 在O(nlogn) 时间复杂度和常数级空间复杂度下,对链表进行排序。举例: 例1: 输入: 4->2->1->3 输出: 1->2->3->4 例2: 输入: -1->5->3->4->0...

2019-11-17 14:28:23 51 0

原创 数组-将有序数组转换为二叉搜索树

题目来源LeetCode第108题 一、思路 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点的左右两个子树的高度差的绝对值不超过 1。举例: 给定有序数组: [-10,-3,0,5,9], 1.1 递归分析 有序链表转换...

2019-11-16 20:49:04 24 0

原创 单链表-有序链表转换二叉树

题目来源LeetCode第109题 一、思路 给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点的左右两个子树的高度差的绝对值不超过 1。举例, 给定的有序链表: [-10, -3, 0, 5, 9],可能的树的形态如下图所...

2019-11-16 20:20:37 50 0

原创 单链表-回文链表

题目来源LeetCode第234题 一、思路 请判断一个链表是否为回文链表。举例: 例1: 输入: 1->2 输出: false 例2: 输入: 1->2->2->1 输出: true 要求:时间复杂度为O(n),空间复杂度为O(1)(打消了借用栈的念头...

2019-11-16 15:05:28 16 0

原创 单链表-两数相加

题目来源LeetCode第445题 一、思路 给定两个非空链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储单个数字。将这两数相加会返回一个新的链表。举例: 输入: (7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4) ...

2019-11-16 11:23:14 25 0

原创 单链表-奇偶链表

题目来源 一、思路 给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。举例: 例1: 输入: 1->2->3->4->5->NULL 输出: 1->3->5-&...

2019-11-15 20:17:43 28 0

原创 单链表-链表的中间结点

一、思路 给定单链表,返回链表的中间结点。如果有两个中间结点(总结点个数为偶数),则返回第二个中间结点。举例: 例子1: 输入:[1,2,3,4,5] 输出:结点 3 例子2: 输入:[1,2,3,4,5,6] 输出:结点 4 从以上两个例子可以总结出全体,因为结点个数非奇即偶。如果是...

2019-11-15 19:40:20 27 0

原创 单链表-删除所有给定值为val的所有结点

一、思路 删除链表中等于给定值val的所有节点。举例: 输入: 1->2->6->3->4->5->6, val = 6 输出: 1->2->3->4->5 1.1 迭代分析 为了统一对不带头结点的单链表的结点的操作,额外使用哑结...

2019-11-15 16:45:12 55 0

原创 单链表-反转

一、思路 描述:反转一个单链表。举例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 1.1 迭代分析 单链表无法直接向后指,因为只有1个next域。所以需要使用指针prev作为指...

2019-11-15 16:32:05 18 0

原创 单链表-链表相交问题

题目来源:LeetCode160求两单链表的交点 一、思路 举例1-相交的情形 举例2-不相交的情形 如果两个链表没有交点,返回 null. 在返回结果后,两个链表仍须保持原有的结构。 可假定整个链表结构中没有循环。 程序尽量满足 O(n) 时间复杂度,且仅用 O(1) 内存。...

2019-11-15 15:49:34 14 0

原创 单链表-插入排序

一、思路 写在前面,递归和迭代的分析是不同的,如果我们希望利用递归实现,就掌握与递归有关的知识点;如果我们希望用迭代实现,就掌握与迭代有关的知识点。先掌握一种,然后掌握另一种。 1.1 知识点1 单链表 单链表是一种只能前进,不能后退的链表。为了找到当前结点的前一个,必须有一个前驱指针紧紧跟...

2019-11-14 16:21:39 37 0

原创 数据结构考研3_荷兰国旗问题

一、题目描述 设有一个仅由红、白、蓝三种颜色的条块组成的条块序列,请编写一个时间复杂度为O(n)的算法,使得这些条块按照红、白、蓝的顺序排好,即排成荷兰国旗的图案。 1.1 思路 顺序扫描线性表(图上反映为从上到下),将红色条块交换到线性表的最前面,蓝色条块交换到线性表的最后面。设立三个...

2019-06-28 20:21:25 304 0

原创 数据结构考研2_中位数问题

利用划分函数快速查找中位数。

2019-06-28 19:11:56 977 0

原创 数据结构考研博客目录

数据结构编程题 数据结构考研1_找到第K小的数字 数据结构考研2_中位数问题 数据结构考研3_荷兰国旗问题

2019-06-28 17:14:40 170 0

原创 数据结构考研1_找到第K小的数字

一、思路分析 针对下标从零开始,没有哨兵位。如果采用快速排序中的划分思想,该思想结合具体问题(找到第k小)形成的思路如下: 按照一定规则选取枢轴元素(固定位置法、三数取中法、随机数法等),对枢轴元素进行划分。枢轴元素下标记为pivotIndex,在序列中排第seq = pivotIndex+1...

2019-06-28 17:10:55 107 0

转载 内存管理方案视频课

https://www.bilibili.com/video/av35170969/?spm_id_from=333.788.videocard.1

2019-06-06 12:10:14 148 0

原创 C#控制窗体自动缩放

一、讲解 窗体里面存在若干控件(不去关心控件是否嵌套控件,Form包含Panel,而Panel包含GroupBox,而GroupBox包含Button),只关心第一层控件,控件的控件是下一层的事情,故而递归函数呼之欲出。控件显示的效果受4个因素影响,宽度、高度、上边距、左边距。如果控件还带有文本...

2019-06-03 16:59:58 637 0

原创 清除DataGridView的全部内容,包括标题行

一、问题产生的原因 在VS2017下,我用DataGridView自己实现的一个控件库。由于本文的重点不在我的控件库是怎么实现的,所以我只需要给出功能描述。在文本框输入想查询的表名,然后点击显示按钮。然后问题来了——在我想查询班级信息的时候,点击显示按钮没有用。学生信息的数据仍然残留在DataG...

2019-05-30 10:48:31 946 0

原创 C#由DataGridView删除行所想到的

参考资料 【1】AcceptChanges方法的区分 【2】使用dataAdapter.acceptChanges( )方法实例 【3】DataSet 的删除行问题

2019-05-23 11:15:54 369 0

原创 C#操作MySQL数据库

必要准备:SQLyog(MySQL数据库可视化辅助软件) 提取码uq2v。MySQL数据库下载提取码:n76g。 一、综述 根据操作数据库时是否需要一直连接的特点,将行为分为两种。第一种是对数据库始终保持连接状态;第二种是先将数据暂存于内存中,操作是对内存的数据,操作完成后,更新数据库,如图...

2019-05-21 20:14:28 1554 0

原创 C#实现邮件单人发送

一、邮件发送过程 A使用163邮箱发送邮件给B(qq邮箱)。首先A会把邮件通过SMTP(Simple Mail Transfer Protocol)协议传输到163的Smtp服务器上,163的Smtp服务器会根据B的邮箱账号,把邮件通过Smtp协议发给QQ邮箱的Smtp服务器。QQ的Smtp...

2019-05-11 16:44:56 112 0

原创 MySql数据库的使用

一、安装 MySql数据库官网链接。安装MySql对于非专业人士(适合绝大部分人),一切按照默认一直点击下一步就可以了。本文主要是在Windows下的MySql的使用。默认路径C:\Program Files\MySQL\MySQL Server 8.0 (64位情形)。 1.1 启动和退出 ...

2019-05-01 11:07:33 63 0

原创 STL源码剖析---deque::erase()

本文的目的不是手把手教你如何理解deque(那得看书,看书是最全面的),在你大概理解了deque的设计之后,你可以结合本篇博客,看看同我有多少共鸣多少分歧。 一、背景 deque是双向开口的动态数组,同vector的显著区别是:1)允许在常数时间内对头端进行插入或删除的操作;2)分段线性连续,...

2019-03-31 11:40:26 334 0

原创 STL源码剖析---deque::operator +=()

一、扩展 源码中用到的思想是“基地址+偏移量”,这个思想处处可见,注意留心。deque是分段连续的动态数组,其核心结构是数组+缓冲区。关于这个思想,还有些实例:二维数组、段页式地址布局、内存池自由链表free list等,基本原理都一样。下面我就二维数组进行举例—— 以深绿色为基准, 前进...

2019-03-28 00:07:49 68 0

原创 STL源码剖析---vector::insert()

写在前面 对于数组,如果我们去实现按位置 position 插入 n 个值为 x 的元素,怎么做?假设空间充足,一般的做法是:[position,last)所有元素顺次后移 n 个位置,然后 [position, position+n) 填充成 x 。常规思维也能达到目的,但是大师到底是大师,他...

2019-03-26 16:55:05 449 1

原创 STL源码剖析---list::sort 归并排序

写在前面 如果对本篇博客有任何建议或者意见,欢迎在博客下方留言或者直接邮箱联系 3150215827@qq.com 。 侯捷在《STL源码剖析》一书的 P142 只是简单对源码进行了粘贴,唯一写的注释是他认为 list::sort() 采用的是quick sort,个人对他的想法不是很理解,但是...

2019-03-25 18:29:29 174 0

原创 创建型设计模式---单例模式

在阅读本博客前可能导致你困惑的说法。工欲善其事必先利其器,还是先了解一下吧。 类内4个特殊的成员函数 default ctor / copy ctor / operator assignment / dtor,它们分别是无参构造、拷贝构造、拷贝赋值、析构。ctor的全称是constructor,...

2019-03-25 09:35:59 68 0

原创 创建型设计模式---简单工厂模式

一、背景 我们希望达到的目的是——在运行部分的代码不要出现 new,因为这是面向对象程序设计而不是面向过程程序设计! 1.1 资源文件 //构造函数实现为保护,发挥接口的功能。 class Api { public: virtual void test(string s) = 0{} p...

2019-03-24 18:24:59 55 0

原创 设计模式概述

一、类和对象 类封装了数据和行为,是面向对象的重要组成部分,是具有相同属性、操作、关系的对象集合的总称。类的属性(attributes)即类的数据职责,类的操作(operators)即类的行为职责。 attributes operators 可见性 名称:类型 = [默认值] ...

2019-03-24 17:01:18 34 0

原创 STL源码剖析---类型萃取

一、感想 2018年10月08日第一次接触类型萃取,今天是2019年3月23号,自认为对类型萃取可以暂时告一段落。现对近半年来对类型萃取的总结层列如下。 二、类型萃取 说文解字,萃取二字的含义自是不必说,理解为提取吧。类型,谁的类型?在SGI STL中,分两个方面:1)迭代器类型;2)迭代器...

2019-03-23 20:33:26 91 0

原创 STL源码剖析---内存池的实现

一、感想 2019年3月15日-3月23日,大概花了8天的时间,终于将SGI STL版本实现的内存池看懂了。不过内存池这个知识点大概在2018年8月份的时候就已经接触了,今天终于弄懂了,如卸心中之块垒!在此探讨的一些点,可能非常表面,如果需要深入了解,建议直接阅读《STL源码剖析·侯捷》相应章节...

2019-03-23 18:06:39 440 4

原创 关于C++继承的随笔

知识点1:哪些成员函数无法被继承? 先解决本知识点值得被讨论的前提,到底什么是继承?继承和调用的区别在哪里?继承而来的东西就是我的了;调用这个名称可能含义不确切,称为借用更为传神,既然是借用,那归根到底它还是不属于你啊! 不能被继承的成员函数有? 4个特殊的成员函数不能被继承(trivial ...

2019-03-23 11:35:19 47 0

原创 讲解运算符

一、概念 1.1 含义 运算符用于执行程序代码运算,会针对一个及以上操作数来进行运算。 1.2 特点 优先级和结合性:先考虑优先级,再考虑结合性。同一优先级的运算符结合性相同(用于消除歧义)。 一般而言:单目 > 双目 > 三目(例外 ?: > 赋值运算符)...

2019-03-19 21:14:50 51 0

原创 leetcode(2)------两数相加

一、题目描述 You are given twonon-emptylinked lists representing two non-negative integers. The digits are stored inreverse orderand each of their nodes c...

2019-03-19 17:16:57 45 0

原创 leetcode(1)------两数之和

题目描述: Given an array of integers, returnindicesof the two numbers such that they add up to a specific target. You may assume that each input would h...

2019-03-19 16:23:33 42 0

原创 STL源码剖析---装饰者模式

一、装饰者模式 1.1 含义 利用到类关系中的组合。被修饰的类称为被装饰者;修饰它类的类称为装饰者。作为装饰者,因为有了一份完全属于自己的被装饰的对象(的副本)在手,就可以通过转调呈现新的行为。 1.2 体现 在STL中,为了提高代码的复用性以及扩展性,大量用到了“装饰者模式”。例如 栈、...

2019-03-15 22:20:37 183 0

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