自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

wardseptember的博客

路漫漫其修远兮,吾将上下而求索。

  • 博客(192)
  • 资源 (3)
  • 收藏
  • 关注

原创 JVM 笔记01——最全、最详细的Java内存区域教程

文章目录Java内存区域运行时数据区域程序计数器Java 虚拟机栈本地方法栈堆方法区方法区和永久代的关系常用参数元空间运行时常量池直接内存HotSpot虚拟机对象探秘对象的创建Step1:类加载检查Step2:分配内存Step3:初始化零值Step4:设置对象头Step5:执行 init 方法对象的内存布局对象头对象自身的运行时数据类型指针实例数据对齐填充对象的访问定位String 类和常量池字符...

2020-03-15 11:06:08 321

原创 哈夫曼树及哈夫曼编码详解【完整版代码】

Huffman Tree简介    赫夫曼树(Huffman Tree),又称最优二叉树,是一类带权路径长度最短的树。假设有n个权值{w1,w2,…,wn},如果构造一棵有n个叶子节点的二叉树,而这n个叶子节点的权值是{w1,w2,…,wn},则所构造出的带权路径长度最小的二叉树就被称为赫夫曼树。  &a

2018-06-17 11:42:30 113823 58

原创 自定义阻塞队列和自定义线程池

自定义阻塞队列package jucdemo;import java.util.Collection;import java.util.Iterator;import java.util.LinkedList;import java.util.concurrent.BlockingQueue;import java.util.concurrent.TimeUnit;import java.util.concurrent.atomic.AtomicInteger;/** * @autho

2021-02-27 17:54:47 535

原创 【Spring源码】IOC和AOP源码分析

IOCIOC(Inverse of Control: 反转控制)是一种设计思想,就是 将原本在程序中手动创建对象的控制权,交由Spring框架来管理。 IOC 在其他语言中也有应用,并非 Spring 特有。 IOC 容器是 Spring 用来实现 IOC 的载体, IOC 容器实际上就是个Map(key,value),Map 中存放的是各种对象。将对象之间的相互依赖关系交给 IOC 容器来管理,并由 IOC 容器完成对象的注入。这样可以很大程度上简化应用的开发,把应用从复杂的依赖关系中解放出来。 IO

2021-01-23 23:42:57 721

原创 【Java集合源码05】PriorityQueue源码分析

简介PriorityQueue 一个基于优先级的无界优先级队列。优先级队列的元素默认按照升序进行排序,或者根据构造队列时提供的 Comparator 进行排序,具体取决于所使用的构造方法。该队列不允许使用 null 元素也不允许插入不可比较的对象(没有实现Comparable接口的对象)。PriorityQueue 队列的头指排序规则最小那个元素。如果多个元素都是最小值则随机选一个。PriorityQueue 是一个无界队列,但是初始的容量(实际是一个Object[]),随着不断向优先级队列添加元素,

2021-01-11 21:13:47 276

原创 【Java集合源码04】Stack源码分析

简介Stack是栈,先入后出,继承自Vector,所以是线程安全的。遗留类,不推荐使用,可用Deque模拟战。本质上还是用数组实现的,数组尾部就是栈顶。Deque<Integer> stack = new LinkedList<>();stack.addFirst(12);stack.pollFirst(); 源码源码比较简单package java.util;publicclass Stack<E> extends Vector<E&g

2021-01-08 15:29:56 220

原创 【Java集合源码03】Vector源码分析

简介Vector 类实现了一个动态数组。和 ArrayList 很相似,但是两者是不同的:Vector 是同步访问的。Vector 包含了许多传统的方法,这些方法不属于集合框架。Vector 主要用在事先不知道数组的大小,或者只是需要一个可以改变大小的数组的情况。Vector是线程安全的,但是是遗留类,不推荐使用。内部使用Object数组实现,通过加全局锁synchronized实现线程安全。默认容量为10. Vector源码分析基于jdk1.8源码源码很简单,没查可说的get

2021-01-07 12:37:36 116

原创 多线程和高并发(七)

SingleThreadExecutor单线程线程池,可以保证任务顺序执行,还可以进行生命周期管理。import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;/** * @author wardseptember * @create 2020-07-09 16:01 */public class SingleThreadPoolDemo { public static void

2020-12-14 08:11:43 179

原创 多线程和高并发(六)

阻塞队列在多线程领域:所谓阻塞,即在某些情况下会挂起线程,一旦条件满足,被挂起的线程又会自动被唤醒。当阻塞队列是空时,从队列中获取元素的操作将会被阻塞当阻塞队列是满时,往队列里添加元素的操作将会被阻塞Queue和ListQueue提供了一些对线程友好的API,Offer、peek、pollBlockingQueue提供Put take有阻塞的功能ArrayBlockingQueue由数组结构组成的有界阻塞队列LinkedBlockingQueue由链表结构组成的有界阻塞队列,默认

2020-12-13 14:58:04 186

原创 多线程和高并发(五)

LockSupportLockSupport是一个线程阻塞工具类,所有的方法都是静态方法,可以让线程在任意位置阻塞,当然阻塞之后肯定得有唤醒的方法。常用方法:public static void park(Object blocker); // 暂停当前线程public static void parkNanos(Object blocker, long nanos); // 暂停当前线程,不过有超时时间的限制public static void parkUntil(Object blocker,

2020-12-11 19:38:52 161

原创 多线程和高并发(四)

ReentrantLock使用Reentranlock必须要手动释放锁,并且加锁次数和释放锁次数要一样。synchronized如果遇到异常的话,jvm会自动释放锁。import java.util.concurrent.TimeUnit;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;public class T02_ReentrantLock2 { Lock

2020-12-10 19:12:39 145 2

原创 【Java集合源码02】LinkedList源码分析

简介LinkedList是一个实现了List接口和Deque接口的双端链表。 LinkedList底层的链表结构使它支持高效的插入和删除操作,另外它实现了Deque接口,使得LinkedList类也具有队列的特性; LinkedList不是线程安全的,如果想使LinkedList变成线程安全的,可以调用静态类Collections类中的synchronizedList方法:List list=Collections.synchronizedList(new LinkedList(...)); 实

2020-12-03 13:28:35 173 1

原创 【Java集合源码01】ArrayList源码分析

1. ArrayList 简介ArrayList 的底层是数组队列,相当于动态数组。与 Java 中的数组相比,它的容量能动态增长。在添加大量元素前,应用程序可以使用ensureCapacity操作来增加 ArrayList 实例的容量。这可以减少递增式再分配的数量。ArrayList继承于 AbstractList,实现了 List, RandomAccess, Cloneable, java.io.Serializable 这些接口。public class ArrayList<E>

2020-12-02 22:02:28 237

原创 栈和队列面试题总结

文章目录用栈实现队列解法用队列实现栈解法最小栈解法剑指 Offer 59 - II. 队列的最大值解法有效的括号解法每日温度解法下一个更大元素 II解法剑指 Offer 59 - I. 滑动窗口的最大值双端队列推荐阅读用栈实现队列232. 用栈实现队列使用栈实现队列的下列操作:push(x) -- 将一个元素放入队列的尾部。pop() -- 从队列首部移除元素。peek() -- 返回队列首部的元素。empty() -- 返回队列是否为空。 示例:MyQueue queue = ne

2020-11-30 13:08:32 334

原创 链表面试题总结

文章目录剑指 Offer 06. 从尾到头打印链表利用栈逆向输入数组剑指 Offer 24. 反转链表迭代解法递归解法剑指 Offer 18. 删除链表的节点解法删除排序链表中的重复元素解法1解法2递归删除链表的倒数第N个节点解法剑指 Offer 22. 链表中倒数第k个节点快慢指针剑指 Offer 35. 复杂链表的复制解法剑指 Offer 52. 两个链表的第一个公共节点解法合并两个有序链表非递归解法递归解法两两交换链表中的节点解法两数相加 II解法回文链表解法解法2分隔链表解法奇偶链表解法1解法2推荐

2020-11-29 16:17:45 341

原创 数组面试题总结

文章目录剑指 Offer 03. 数组中重复的数字解法剑指 Offer 53 - I. 在排序数组中查找数字 I解法二分查找另一种写法剑指 Offer 53 - II. 0~n-1中缺失的数字解法等差数列二分法移动零解法1解法2最大连续1的个数解法剑指 Offer 04. 二维数组中的查找解法有序矩阵中第K小的元素二分查找法堆排序剑指 Offer 29. 顺时针打印矩阵解法重塑矩阵解法错误的集合解法寻找重复数双指针优美的排列 II解法数组的度解法托普利茨矩阵解法数组嵌套解法最多能完成排序的块解法剑指 Of

2020-11-28 19:54:55 320

原创 字符串面试题总结(终极版)

文章目录有效的字母异位词解法最长回文串解法同构字符串解法回文子串解法回文数解法计数二进制子串解法剑指 Offer 58 - I. 翻转单词顺序解法剑指 Offer 58 - II. 左旋转字符串解法剑指 Offer 67. 把字符串转换成整数解法有效的字母异位词242. 有效的字母异位词给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。示例 1:输入: s = "anagram", t = "nagaram"输出: true示例 2:输入: s = "rat

2020-11-24 17:41:12 2391

原创 多线程和高并发(三)

公平锁和非公平锁公平锁是指多个线程按照申请锁的顺序来获取锁非公平锁,是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁,多个线程争夺锁。在高并发情况下,有可能会造成优先级反转或者饥饿现象。reentranlock和synchronized默认是非公平锁。可重入锁和递归锁可重入锁又名递归锁,指的是同一线程外层函数获得锁后,内层递归函数仍然能获得该锁的代码,即线程可以进入任何一个它已经拥有的锁,所同步着得代码块。可重入锁最大的作用是避免死锁。reentr

2020-11-19 20:05:25 192

原创 二叉树面试题刷题模板[终极版]

文章目录递归树结构二叉树的最大深度后序递归二叉树最小深度后序递归二叉树的直径后序递归平衡二叉树后序递归小总结对称的二叉树递归解法二叉树的镜像后序递归树的子结构递归解法二叉搜索树的最近公共祖先前序递归二叉树的最近公共祖先前序递归二叉搜索树的第k大节点中序递归二叉树中和为某一值的路径前序递归538. 把二叉搜索树转换为累加树类中序递归669. 修剪二叉搜索树前序递归找树左下角的值前序递归遍历左叶子之和递归遍历最长同值路径后序递归二叉树中第二小的节点递归遍历572. 另一个树的子树前序递归合并二叉树前序递归路径总

2020-11-18 22:00:26 560

原创 多线程和高并发(二)

多线程核心基础创建线程public class CreateNewThread { // 第一种创建方式 static class MyThread extends Thread { @Override public void run() { System.out.println("T1"); } } // 第二种创建方式 static class Myrun implements Runna

2020-11-07 14:58:20 162

原创 多线程和高并发(一)

进程和线程进程和线程基础教程见进程和线程多线程高并发基础上下文切换即使是单核处理器也支持多线程执行代码,CPU通过给每个线程分配CPU时间片来实现 这个机制。时间片是CPU分配给各个线程的时间,因为时间片非常短,所以CPU通过不停地切 换线程执行,让我们感觉多个线程是同时执行的,时间片一般是几十毫秒(ms)。CPU通过时间片分配算法来循环执行任务,当前任务执行一个时间片后会切换到下一个 任务。但是,在切换前会保存上一个任务的状态,以便下次切换回这个任务时,可以再加载这 个任务的状态。所以任务从保存

2020-11-07 14:56:03 167

原创 三次握手、四次挥手、重传机制、滑动窗口、流量控制、拥塞控制、TCP/UDP全解析

文章目录UDP 和 TCP 的特点UDP 首部格式TCP 首部格式TCP 的三次握手TCP 的四次挥手TCP 重传机制超时重传快速重传SACK方法Duplicate SACK*栗子一号:ACK 丢包**栗子二号:网络延时*TCP 滑动窗口TCP 流量控制操作系统缓冲区与滑动窗口的关系窗口关闭糊涂窗口综合症TCP 拥塞控制慢启动拥塞避免算法拥塞发生发生超时重传的拥塞发生[算法]()发生快速重传的拥塞发生[算法]()快速恢复参考链接公众号网络层只把分组发送到目的主机,但是真正通信的并不是主机而是主机中的进程。

2020-10-13 16:56:22 480

原创 HashMap详解——基于jdk1.8和jdk1.7

HashMap 1.7使用数组加链表实现hashmap。hashmap初始容量为16,装载因子为0.75,hashmap里面的元素达到阈值(阈值=容量 * 装载因子)时,就会进行扩容,每次扩容2倍。put方法 public V put(K key, V value) { // 当第一次往里面放元素时才真正地申请空间 if (table == EMPTY_TABLE) { inflateTable(threshold); }

2020-09-28 15:55:02 381

原创 LeetCode题解——随机刷题(四)

文章目录448. 找到所有数组中消失的数字解法438. 找到字符串中所有字母异位词滑动窗口581. 最短无序连续子数组遍历560. 和为K的子数组前缀和+哈希表919. 会议室 II排序621. 任务调度器排序推荐阅读448. 找到所有数组中消失的数字448. 找到所有数组中消失的数字给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。找到所有在 [1, n] 范围之间没有出现在数组中的数字。您能在不使用额外空间且时间复

2020-09-17 14:32:37 317

原创 LeetCode题解——随机刷题(二)

文章目录114. 二叉树展开为链表寻找前驱节点221. 最大正方形动态规划301. 删除无效的括号回溯算法312. 戳气球动态规划399. 除法求值并查集推荐阅读114. 二叉树展开为链表114. 二叉树展开为链表给定一个二叉树,原地将它展开为一个单链表。 例如,给定二叉树 1 / \ 2 5 / \ \3 4 6将其展开为:1 \ 2 \ 3 \ 4 \ 5

2020-09-14 22:35:00 261

原创 LeetCode题解——随机刷题(三)

文章目录48. 旋转图像解法49. 字母异位词分组解法56. 合并区间排序85. 最大矩形单调栈96. 不同的二叉搜索树解法推荐阅读48. 旋转图像48. 旋转图像给定一个 n × n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。说明:你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。示例 1:给定 matrix = [ [1,2,3], [4,5,6], [7,8,9]],原地旋转输入矩阵,

2020-09-04 19:18:19 260

原创 LeetCode题解——随机刷题(一)

文章目录146. LRU缓存机制哈希表和双向链表152. 乘积最大子数组动态规划2. 两数相加直接遍历4. 寻找两个正序数组的中位数解法5. 最长回文子串双指针11. 盛最多水的容器双指针15. 三数之和双指针推荐阅读146. LRU缓存机制146. LRU缓存机制运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果关键字 (key) 存在于缓存中,则获取关键字的值(总是正数

2020-08-24 15:57:11 483

原创 剑指Offer题解大全(分类刷题、高效搞定数据结构)

在线阅读Github PagesNotes镜像地址本项目Java代码测试全通过。核心内容分类刷题,效率更高,效果更好。数据结构篇字符串数组二叉树(一)二叉树(二)链表栈和队列位运算和哈希表数学算法篇排序、回溯和分治递归和堆动态规划随机刷题(一)随机刷题(二)随机刷题(三)可视化数据结构这是个学习数据结构的神器,基本上包含常用数据结构的所有可视化过程哦。下图是红黑树插入节点和删除节点的演示,关注公众号大数据技术与机器学习,后台回复"可视化数据结构

2020-08-17 17:05:57 301

原创 剑指Offer题解——随机刷题(三)

文章目录剑指 Offer 60. n个骰子的点数动态规划剑指 Offer 61. 扑克牌中的顺子set集合排序+遍历剑指 Offer 62. 圆圈中最后剩下的数字解法剑指 Offer 64. 求1+2+…+n递归快速乘剑指 Offer 65. 不用加减乘除做加法位运算剑指 Offer 66. 构建乘积数组动态规划推荐阅读剑指 Offer 60. n个骰子的点数剑指 Offer 60. n个骰子的点数把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。你需要

2020-08-17 16:02:55 306

原创 剑指Offer题解——随机刷题(二)

文章目录剑指 Offer 51. 数组中的逆序对分治算法剑指 Offer 56 - I. 数组中数字出现的次数位运算剑指 Offer 56 - II. 数组中数字出现的次数 II位运算剑指 Offer 57. 和为s的两个数字双指针剑指 Offer 57 - II. 和为s的连续正数序列双指针推荐阅读剑指 Offer 51. 数组中的逆序对剑指 Offer 51. 数组中的逆序对在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。

2020-08-15 16:02:00 243

原创 剑指Offer题解——随机刷题(一)

文章目录剑指 Offer 05. 替换空格解法剑指 Offer 13. 机器人的运动范围BFSDFS剑指 Offer 21. 调整数组顺序使奇数位于偶数前面双指针剑指 Offer 31. 栈的压入、弹出序列解法剑指 Offer 33. 二叉搜索树的后序遍历序列单调栈剑指 Offer 46. 把数字翻译成字符串动态规划推荐阅读剑指 Offer 05. 替换空格请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = "We are happy."输出:"We%20are

2020-08-13 15:58:06 315

原创 剑指Offer题解——递归和堆

文章目录递归剑指 Offer 10- I. 斐波那契数列迭代剑指 Offer 10- II. 青蛙跳台阶问题迭代剑指 Offer 16. 数值的整数次方快速幂堆排序剑指 Offer 41. 数据流中的中位数堆推荐阅读递归剑指 Offer 10- I. 斐波那契数列剑指 Offer 10- I. 斐波那契数列写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下:F(0) = 0,   F(1) = 1F(N) = F(N -

2020-08-10 14:43:14 238

原创 剑指Offer题解——数学

文章目录剑指 Offer 17. 打印从1到最大的n位数回溯解法剑指 Offer 20. 表示数值的字符串解法剑指 Offer 43. 1~n整数中1出现的次数解法剑指 Offer 44. 数字序列中某一位的数字解法剑指 Offer 49. 丑数解法推荐阅读剑指 Offer 17. 打印从1到最大的n位数剑指 Offer 17. 打印从1到最大的n位数输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。示例 1:输入:

2020-08-08 12:03:57 236

原创 剑指Offer题解——动态规划

文章目录剑指 Offer 12. 矩阵中的路径回溯剑指 Offer 14- I. 剪绳子动态规划剑指 Offer 14- II. 剪绳子 II动态规划剑指 Offer 19. 正则表达式匹配解法剑指 Offer 47. 礼物的最大价值动态规划剑指 Offer 63. 股票的最大利润动态规划推荐阅读剑指 Offer 12. 矩阵中的路径剑指 Offer 12. 矩阵中的路径请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、

2020-08-06 11:38:19 344

原创 剑指Offer题解——排序、回溯和分治

文章目录排序剑指 Offer 45. 把数组排成最小的数快速排序Arrays.sort回溯算法剑指 Offer 38. 字符串的排列回溯分治算法剑指 Offer 25. 合并两个排序的链表解法递归1递归2剑指 Offer 36. 二叉搜索树与双向链表解法剑指 Offer 40. 最小的k个数堆剑指 Offer 42. 连续子数组的最大和解法推荐阅读排序剑指 Offer 45. 把数组排成最小的数剑指 Offer 45. 把数组排成最小的数输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印

2020-08-03 13:05:23 243

原创 剑指offer题解——树(二)

文章目录剑指 Offer 34. 二叉树中和为某一值的路径解法剑指 Offer 37. 序列化二叉树解法剑指 Offer 54. 二叉搜索树的第k大节点递归剑指 Offer 55 - I. 二叉树的深度迭代解法递归解法剑指 Offer 55 - II. 平衡二叉树递归解法剑指 Offer 68 - I. 二叉搜索树的最近公共祖先递归剑指 Offer 68 - II. 二叉树的最近公共祖先递归推荐阅读剑指 Offer 34. 二叉树中和为某一值的路径剑指 Offer 34. 二叉树中和为某一值的路径输入

2020-07-31 13:25:22 261

原创 剑指Offer——树(一)

文章目录剑指 Offer 07. 重建二叉树递归迭代剑指 Offer 26. 树的子结构递归剑指 Offer 27. 二叉树的镜像递归解法剑指 Offer 28. 对称的二叉树递归解法迭代解法剑指 Offer 32 - I. 从上到下打印二叉树解法剑指 Offer 32 - II. 从上到下打印二叉树 II层序遍历剑指 Offer 32 - III. 从上到下打印二叉树 III层序遍历推荐阅读剑指 Offer 07. 重建二叉树剑指 Offer 07. 重建二叉树输入某二叉树的前序遍历和中序遍历的结果

2020-07-28 14:00:15 288

原创 剑指offer题解——位运算和哈希表

文章目录剑指 Offer 15. 二进制中1的个数解法剑指 Offer 39. 数组中出现次数超过一半的数字投票法剑指 Offer 48. 最长不含重复字符的子字符串滑动窗口剑指 Offer 50. 第一个只出现一次的字符hashmap推荐阅读剑指 Offer 15. 二进制中1的个数剑指 Offer 15. 二进制中1的个数请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。示例

2020-07-25 15:37:31 218

原创 剑指Offer题解——栈和队列

文章目录剑指 Offer 09. 用两个栈实现队列解法剑指 Offer 30. 包含min函数的栈解法剑指 Offer 59 - I. 滑动窗口的最大值双端队列剑指 Offer 59 - II. 队列的最大值解法剑指 Offer 11. 旋转数组的最小数字二分查找推荐阅读剑指 Offer 09. 用两个栈实现队列剑指 Offer 09. 用两个栈实现队列用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除

2020-07-23 15:41:17 257

原创 剑指Offer——字符串

文章目录剑指 Offer 58 - I. 翻转单词顺序解法剑指 Offer 58 - II. 左旋转字符串解法剑指 Offer 67. 把字符串转换成整数解法推荐阅读剑指 Offer 58 - I. 翻转单词顺序剑指 Offer 58 - I. 翻转单词顺序输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. “,则输出"student. a am I”。示例 1:输入: "the sky is

2020-07-21 12:46:38 180

算法笔记和上机指南.胡凡(带详细书签) PDF 完整版 下载

高清带书签。这是一本零基础就能读懂的算法书籍,读者不需要因为自己没有语言基础而畏惧。书籍的第2章便是一个C语言的入门教程,内容非常易懂,并且十分实用,阅读完这章就可以对本书需要的C语言基础有一个较好的掌握。本书已经覆盖了大部分基础经典算法,不仅可以作为考研机试和PAT的学习教材,对其他的一些算法考试(例如CCF的CSP考试)或者考研初试的数据结构科目的学习和理解也很有帮助,甚至仅仅想学习经典算法的读者也能从本书中学到许多知识,本书还有配套的《算法笔记上机训练实战指南》本书的作者是同样经历过考研机试和各类算法考试的专家型学长,知晓这类考试中的痛点,以及考生在学习算法时容易产生困惑的地方,因此可以把本书看作是学长为你奉献的满满的经验干货,这是最有价值的东西。本书的最个试印版本 献给了浙大考研学子,并令当年的浙大考研机试平均分增加了十多分,收获了考生的大量好评。但作者并没有止步于此,经过了半年多时间的内容完善和补充之后,新的版本在新一年的考研机试中再次获得了考生的一致赞美。最后,在经过精心整理之后,书籍终于定稿,并编撰成书。我们知道,纸质书籍的一个弱点就在于不能像软件一样随时更新内容,但本书采用了与二维码相结合的方式,使得本书变为能够随时更新内容的书籍,读者也可以随时从二维码中找到勘误。这种作者和读者能够相互沟通的方式让书籍变“活”了,也能够帮助提升读者对知识的理解。 本书内容包括:C/C++快速入门、入门模拟、算法初步、数学问题、C++标准模板库(STL)、数据结构专题(两章)、搜索专题、图算法专题、动态规划专题、字符串专题、专题扩展。书中每小节的末尾均印有二维码,用以实时更新或补充书籍的内容及发布本书的勘误。 第1章 如何使用本书 1 1.1 本书的基本内容 1 1.2 如何选择编程语言和编译器 1 1.3 在线评测系统 2 1.4 常见的评测结果 3 1.5 如何高效地做题 4 第2章 C/C++快速入门 5 2.1 基本数据类型 7 2.1.1 变量的定义 7 2.1.2 变量类型 7 2.1.3 强制类型转换 11 2.1.4 符号常量和const常量 12 2.1.5 运算符 14 2.2 顺序结构 17 2.2.1 赋值表达式 17 2.2.2 使用scanf和printf输入/输出 18 2.2.3 使用getchar和putchar输入/输出字符 23 2.2.4 注释 24 2.2.5 typedef 24 2.2.6 常用math函数 25 2.3 选择结构 28 2.3.1 if语句 28 2.3.2 if语句的嵌套 31 2.3.3 switch语句 32 2.4 循环结构 34 2.4.1 while语句 34 2.4.2 do while语句 35 2.4.3 for语句 36 2.4.4 break和continue语句 38 2.5 数组 39 2.5.1 一维数组 39 2.5.2 冒泡排序 41 2.5.3 二维数组 43 2.5.4 memset——对数组中每一个元素赋相同的值 46 2.5.5 字符数组 47 2.5.6 string.h头文件 50 2.5.7 sscanf与sprintf 53 2.6 函数 55 2.6.1 函数的定义 55 2.6.2 再谈main函数 58 2.6.3 以数组作为函数参数 58 2.6.4 函数的嵌套调用 59 2.6.5 函数的递归调用 60 2.7 指针 61 2.7.1 什么是指针 61 2.7.2 指针变量 62 2.7.3 指针与数组 63 2.7.4 使用指针变量作为函数参数 65 2.7.5 引用 68 2.8 结构体(struct)的使用 70 2.8.1 结构体的定义 70 2.8.2 访问结构体内的元素 71 2.8.3 结构体的初始化 72 2.9 补充 74 2.9.1 cin与cout 74 2.9.2 浮点数的比较 75 2.9.3 复杂度 78 2.10 黑盒测试 80 2.10.1 单点测试 80 2.10.2 多点测试 80 第3章 入门篇(1)——入门模拟 85 3.1 简单模拟 85 3.2 查找元素 87 3.3 图形输出 89 3.4 日期处理 91 3.5 进制转换 93 3.6 字符串处理 95 第4章 入门篇(2)——算法初步 99 4.1 排序 99 4.1.1 选择排序 99 4.1.2 插入排序 100 4.1.3 排序题与sort函数的应用 101 4.2 散列 106 4.2.1 散列的定义与整数散列 106 4.2.2 字符串hash初步 109 4.3 递归 111 4.3.1 分治 111 4.3.2 递归 112 4.4 贪心 118 4.4.1 简单贪心 118 4.4.2 区间贪心 122 4.5 二分 124 4.5.1 二分查找 124 4.5.2 二分法拓展 131 4.5.3 快速幂 134 4.6 two pointers 137 4.6.1 什么是two pointers 137 4.6.2 归并排序 139 4.6.3 快速排序 142 4.7 其他高效技巧与算法 146 4.7.1 打表 146 4.7.2 活用递推 147 4.7.3 随机选择算法 149 第5章 入门篇(3)——数学问题 152 5.1 简单数学 152 5.2 最大公约数与最小公倍数 154 5.2.1 最大公约数 154 5.2.2 最小公倍数 156 5.3 分数的四则运算 156 5.3.1 分数的表示和化简 157 5.3.2 分数的四则运算 157 5.3.3 分数的输出 159 5.4 素数 159 5.4.1 素数的判断 160 5.4.2 素数表的获取 160 5.5 质因子分解 165 5.6 大整数运算 170 5.6.1 大整数的存储 170 5.6.2 大整数的四则运算 171 5.7 扩展欧几里得算法 176 5.8 组合数 181 5.8.1 关于n!的一个问题 181 5.8.2 组合数的计算 183 第6章 C++标准模板库(STL)介绍 191 6.1 vector的常见用法详解 191 6.2 set的常见用法详解 197 6.3 string的常见用法详解 202 6.4 map的常用用法详解 213 6.5 queue的常见用法详解 218 6.6 priority_queue的常见用法详解 221 6.7 stack的常见用法详解 227 6.8 pair的常见用法详解 230 6.9 algorithm头文件下的常用函数 232 6.9.1 max()、min()和abs() 232 6.9.2 swap() 233 6.9.3 reverse() 233 6.9.4 next_permutation() 234 6.9.5 fill() 235 6.9.6 sort() 235 6.9.7 lower_bound()和upper_bound() 242 第7章 提高篇(1)——数据结构专题(1) 245 7.1 栈的应用 245 7.2 队列的应用 251 7.3 链表处理 253 7.3.1 链表的概念 253 7.3.2 使用malloc函数或new运算符为链表结点分配内存空间 254 7.3.3 链表的基本操作 256 7.3.4 静态链表 260 第8章 提高篇(2)——搜索专题 269 8.1 深度优先搜索(DFS) 269 8.2 广度优先搜索(BFS) 274 第9章 提高篇(3)——数据结构专题(2) 283 9.1 树与二叉树 283 9.1.1 树的定义与性质 283 9.1.2 二叉树的递归定义 284 9.1.3 二叉树的存储结构与基本操作 285 9.2 二叉树的遍历 289 9.2.1 先序遍历 289 9.2.2 中序遍历 290 9.2.3 后序遍历 291 9.2.4 层序遍历 292 9.2.5 二叉树的静态实现 298 9.3 树的遍历 302 9.3.1 树的静态写法 302 9.3.2 树的先根遍历 303 9.3.3 树的层序遍历 303 9.3.4 从树的遍历看DFS与BFS 304 9.4 二叉查找树(BST) 310 9.4.1 二叉查找树的定义 310 9.4.2 二叉查找树的基本操作 310 9.4.3 二叉查找树的性质 314 9.5 平衡二叉树(AVL树) 319 9.5.1 平衡二叉树的定义 319 9.5.2 平衡二叉树的基本操作 320 9.6 并查集 328 9.6.1 并查集的定义 328 9.6.2 并查集的基本操作 328 9.6.3 路径压缩 330 9.7 堆 335 9.7.1 堆的定义与基本操作 335 9.7.2 堆排序 339 9.8 哈夫曼树 342 9.8.1 哈夫曼树 342 9.8.2 哈弗曼编码 345 第10章 提高篇(4)——图算法专题 347 10.1 图的定义和相关术语 347 10.2 图的存储 348 10.2.1 邻接矩阵 348 10.2.2 邻接表 348 10.3 图的遍历 350 10.3.1 采用深度优先搜索(DFS)法遍历图 350 10.3.2 采用广度优先搜索(BFS)法遍历图 359 10.4 最短路径 367 10.4.1 Dijkstra算法 367 10.4.2 Bellman-Ford算法和SPFA算法 391 10.4.3 Floyd算法 398 10.5 最小生成树 400 10.5.1 最小生成树及其性质 400 10.5.2 prim算法 401 10.5.3 kruskal算法 409 10.6 拓扑排序 414 10.6.1 有向无环图 414 10.6.2 拓扑排序 415 10.7 关键路径 417 10.7.1 AOV网和AOE网 417 10.7.2 最长路径 419 10.7.3 关键路径 419 第11章 提高篇(5)——动态规划专题 425 11.1 动态规划的递归写法和递推写法 425 11.1.1 什么是动态规划 425 11.1.2 动态规划的递归写法 425 11.1.3 动态规划的递推写法 426 11.2 最大连续子序列和 429 11.3 最长不下降子序列(LIS) 432 11.4 最长公共子序列(LCS) 434 11.5 最长回文子串 436 11.6 DAG最长路 439 11.7 背包问题 442 11.7.1 多阶段动态规划问题 442 11.7.2 01背包问题 443 11.7.3 完全背包问题 446 11.8 总结 447 第12章 提高篇(6)——字符串专题 449 12.1 字符串hash进阶 449 12.2 KMP算法 455 12.2.1 next数组 456 12.2.2 KMP算法 458 12.2.3 从有限状态自动机的角度看待KMP算法 463 第13章 专题扩展 465 13.1 分块思想 465 13.2 树状数组(BIT) 470 13.2.1 lowbit运算 470 13.2.2 树状数组及其应用 470 参考文献 481

2019-03-23

火车售票系统

此程序是用c#写的火车售票系统,包括数据库文件,可以直接运行。

2018-03-12

c语言头文件大全

c语言头文件大全,最全的头文件,欢迎大家下载。 c语言头文件大全,最全的头文件,欢迎大家下载。

2017-12-28

空空如也

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

TA关注的人

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