<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[qq_27868521的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/qq_27868521</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; qq_27868521]]></copyright><item><title><![CDATA[KMP]]></title><link>https://blog.youkuaiyun.com/qq_27868521/article/details/115964264</link><guid>https://blog.youkuaiyun.com/qq_27868521/article/details/115964264</guid><author>qq_27868521</author><pubDate>Thu, 22 Apr 2021 20:09:16 +0800</pubDate><description><![CDATA[title: KMP
date: 2020-10-27 00:27:16
tags: [KMP, AL, C语言, 算法, 数据结构, DS]
categories: DSandAL

KMP算法，代码写的不好看，也不简洁，自己手敲的，也算是开天辟地了
后续持续优化代码 + 思路详细讲解，只希望让后来者少踩坑，起码不要踩我踩过的坑 T^T

先附上代码，后续更新详细讲解
非递归求next数组
// 开始手写KMP   自我感觉还是不太好的
// 串的底层用静态数组实现
#include &lt;stdio.]]></description><category></category></item><item><title><![CDATA[Java加载顺序]]></title><link>https://blog.youkuaiyun.com/qq_27868521/article/details/115964391</link><guid>https://blog.youkuaiyun.com/qq_27868521/article/details/115964391</guid><author>qq_27868521</author><pubDate>Thu, 22 Apr 2021 20:08:46 +0800</pubDate><description><![CDATA[title: Java代码执行顺序
date: 2021-03-30 20:28:37
tags: [JavaBase, Java变量加载顺序]
categories: Java

Java源文件中代码的加载顺序

执行顺序

对类的加载


加载类的方法和静态属性 为方法和静态属性分配空间
按照静态代码块和静态属性定义语句 在源文件中的顺序执行静态代码块中的操作和对属性的初始化(初始化默认赋0、null等)


加载对象


当一个对象被初始化时，为对象开辟空间，给对象的非静态属性分配空间(不包括静态属.]]></description><category></category></item><item><title><![CDATA[Java枚举源码级理解]]></title><link>https://blog.youkuaiyun.com/qq_27868521/article/details/115964476</link><guid>https://blog.youkuaiyun.com/qq_27868521/article/details/115964476</guid><author>qq_27868521</author><pubDate>Thu, 22 Apr 2021 20:08:15 +0800</pubDate><description><![CDATA[title: Java枚举源码级理解
date: 2020-11-08 16:47:39
tags: [Java枚举, 源码理解, Java源码理解, 枚举, JavaBase, Java基础]
categories: Java

Java中枚举体的一些东西很怪，看了源码之后恍然大悟，收获颇丰

废话不多说，直接上代码
第一种形式
枚举体定义
public enum Day {
	MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;.]]></description><category></category></item><item><title><![CDATA[OS记录型信号量-读者写者问题]]></title><link>https://blog.youkuaiyun.com/qq_27868521/article/details/115964183</link><guid>https://blog.youkuaiyun.com/qq_27868521/article/details/115964183</guid><author>qq_27868521</author><pubDate>Wed, 21 Apr 2021 17:02:46 +0800</pubDate><description><![CDATA[dtitle: OS记录型信号量-读者写者问题
date: 2021-04-09 19:06:16
tags: [信号量机制, OS, 读者写者问题, 记录型信号量]
categories: OS


        利用记录型信号量实现读者写者问题


写在最前
最近对 OS 这门课着了迷，hhh，拿起课本就是硬啃
用了一段时间领悟了记录型信号量的几个版本
这是对记录型信号量的一个应用，那么 pv操作( 即wait()和signal() )的具体代码描述  肯定是要烂熟于心的
在这里我就不写书上那么详细.]]></description><category></category></item><item><title><![CDATA[链表头插, 链表逆置]]></title><link>https://blog.youkuaiyun.com/qq_27868521/article/details/115964096</link><guid>https://blog.youkuaiyun.com/qq_27868521/article/details/115964096</guid><author>qq_27868521</author><pubDate>Wed, 21 Apr 2021 17:01:51 +0800</pubDate><description><![CDATA[title: reverse the linkList
date: 2020-09-23 17:49:03
tags: [链表头插, 链表逆置, C语言, 算法, AL, DS]
categories: DSandAL

链表的头插和逆置操作，很有技巧性，很值得思考

#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;

typedef struct MyStruct
{
	int data;
	struct MyStruct* next;
}Node, .]]></description><category></category></item><item><title><![CDATA[此资源非彼资源]]></title><link>https://blog.youkuaiyun.com/qq_27868521/article/details/115963999</link><guid>https://blog.youkuaiyun.com/qq_27868521/article/details/115963999</guid><author>qq_27868521</author><pubDate>Wed, 21 Apr 2021 17:01:07 +0800</pubDate><description><![CDATA[title: 此资源非彼资源
date: 2021-04-10 20:08:41
tags: [系统资源问题, 操作系统, OS, 进程阻塞, 进程运行, 进程激活]
categories: OS

啃书过程中产生的疑问，最后想通了，并且推广到了一般情况

问题出处
计算机操作系统 第四版 P60
问题描述
在看AND型信号量的Ssignal操作中的一段伪代码的时候产生的疑问，最后我给推广了，也不错，想通了一个事hhh
其中的一段伪代码是这么描述的????
Remove all the process wa]]></description><category></category></item><item><title><![CDATA[二叉树与树]]></title><link>https://blog.youkuaiyun.com/qq_27868521/article/details/115963953</link><guid>https://blog.youkuaiyun.com/qq_27868521/article/details/115963953</guid><author>qq_27868521</author><pubDate>Wed, 21 Apr 2021 17:00:09 +0800</pubDate><description><![CDATA[title: 二叉树
date: 2020-11-07 21:25:16
tags: 二叉树
categories: 数据结构

主要记录个人认为比较重要或是易错的知识

二叉树和树 区分
二叉树不是树， 因为相比于树，它多了两个条件，

每个结点的度最多是2 (此属性并不能否定它是一个树，因为可以认为是树的一种特殊形式)。
每个结点的孩子(若有孩子)有左右之分，这个条件直接否定了它是一个树，因为树的孩子可以没有左右之分。

二叉树的性质三
对任何一棵二叉树 T，如果其叶子数为 n_0，度为 2 的结点数.]]></description><category></category></item><item><title><![CDATA[二分搜索]]></title><link>https://blog.youkuaiyun.com/qq_27868521/article/details/115963911</link><guid>https://blog.youkuaiyun.com/qq_27868521/article/details/115963911</guid><author>qq_27868521</author><pubDate>Wed, 21 Apr 2021 16:59:36 +0800</pubDate><description><![CDATA[title: 二分搜索
date: 2020-12-22 20:25:07
tags: 二分搜索
categories: 数据结构

二分搜索，写的时候和快排做了一波对比，还是有一些收获的
// 二分搜索
// 二分搜索不同于快排中的二分递归，
// 二分搜索路径只有一条，只要找到头就可以了
// 而快排中的二分需要全覆盖(因为是要对整个数组进行排序)
// 这也是为什么二分搜索不使用递归也可以很轻松地实现

// 递归写法和非递归写法
#include &lt;stdio.h&gt;

#define .]]></description><category></category></item><item><title><![CDATA[非递归后序遍历二叉树]]></title><link>https://blog.youkuaiyun.com/qq_27868521/article/details/115963847</link><guid>https://blog.youkuaiyun.com/qq_27868521/article/details/115963847</guid><author>qq_27868521</author><pubDate>Wed, 21 Apr 2021 16:58:24 +0800</pubDate><description><![CDATA[title: 非递归后序遍历二叉树
date: 2020-12-25 20:06:53
tags: 后序遍历
categories: 数据结构

使用栈实现后序遍历二叉树

写了很久很久很久，可能是自己太长时间没写这样的代码了吧，简直把自己写崩溃了，不过还好，终于算是写出来了。有的是写了才发现存储结构开的不对， 有的是平时没有遇到的比较神奇的bug   也不算是神奇吧，就是平时没有遇见过的问题，也算是有收获了。爱瞎搞，爱作，可不就遇到很多阴间问题呗~ hhhhhh
里边附带了一个自己瞎搞想出来的偷懒生成满.]]></description><category></category></item><item><title><![CDATA[广义表之树的兄弟孩子表示法]]></title><link>https://blog.youkuaiyun.com/qq_27868521/article/details/115963781</link><guid>https://blog.youkuaiyun.com/qq_27868521/article/details/115963781</guid><author>qq_27868521</author><pubDate>Wed, 21 Apr 2021 16:57:45 +0800</pubDate><description><![CDATA[title: 广义表之树的兄弟孩子表示法
date: 2020-11-17 15:55:55
tags:

兄弟孩子广义表
二叉树
categories: 数据结构


用兄弟孩子广义表来表示二叉树

对比
二叉树转化来的兄弟孩子广义表和普通的兄弟孩子广义表并不相同


二叉树转换成的兄弟孩子广义表没有明确的一块内存结构来直接表示它是叶子节点还是双亲结点，而是通过 指针 tp 来隐式地表示，tp 指向空，表示它没有孩子节点，否则，有孩子结点


普通的兄弟孩子广义表则是通过 tag = 0 或 1 来表示.]]></description><category></category></item><item><title><![CDATA[稀疏矩阵转置]]></title><link>https://blog.youkuaiyun.com/qq_27868521/article/details/115963761</link><guid>https://blog.youkuaiyun.com/qq_27868521/article/details/115963761</guid><author>qq_27868521</author><pubDate>Wed, 21 Apr 2021 16:57:03 +0800</pubDate><description><![CDATA[title: 稀疏矩阵转置
date: 2020-10-30 14:38:52
tags: 稀疏矩阵转置
categories: 数据结构

稀疏矩阵的转置

#include &lt;stdio.h&gt;

#define MAX_LENGTH 100

// 定义一个用来表示非零元素的结构体
typedef struct a
{
    // 非零元素的行下标
    int rowIndex;
    // 非零元素的列下标
    int colIndex;
    // 非零元素的值
    .]]></description><category></category></item><item><title><![CDATA[快速排序]]></title><link>https://blog.youkuaiyun.com/qq_27868521/article/details/115963711</link><guid>https://blog.youkuaiyun.com/qq_27868521/article/details/115963711</guid><author>qq_27868521</author><pubDate>Wed, 21 Apr 2021 16:55:50 +0800</pubDate><description><![CDATA[title: 快速排序
date: 2020-11-01 21:45:34
tags: 快速排序
categories: 数据结构

快速排序，分治递归

主要思想
分治(二分)递归
取一个标准值，将比标准值小的放在标准值前，比标准值大的放在标准值后。 此操作视为进行了一次快排
然后对标准值前面的子数列和标准值后面的子数列分别进行快排，就这样通过调用递归函数不断地二分…直到第一步快排得到的前面的子数列在不断二分过程中得到的最后一个子数列的标准值和begin相等为止。
二分递归比较难理解，建议在纸上演算一下.]]></description><category></category></item><item><title><![CDATA[内部类]]></title><link>https://blog.youkuaiyun.com/qq_27868521/article/details/115916172</link><guid>https://blog.youkuaiyun.com/qq_27868521/article/details/115916172</guid><author>qq_27868521</author><pubDate>Tue, 20 Apr 2021 19:03:24 +0800</pubDate><description><![CDATA[title: 内部类
date: 2021-04-03 16:16:30
tags: [Java, 内部类, JavaBase, Java基础]
categories: Java

对内部类，主要是匿名内部类的一波复习以及对其浅层原理的思考

写在最前
学安卓的时候匿名内部类忘光了，写这篇文章主要是为了复习一波匿名内部类，看了一会匿名内部类，发现很多内部类的东西也是忘的差不多了，毕竟这些东西是一个有机的整体（好像也不太恰当哈   匿名内部类是内部类的一部分），单单复习匿名内部类收获不大，也领略不到一些原理.]]></description><category></category></item><item><title><![CDATA[双向链表基本操作]]></title><link>https://blog.youkuaiyun.com/qq_27868521/article/details/115916157</link><guid>https://blog.youkuaiyun.com/qq_27868521/article/details/115916157</guid><author>qq_27868521</author><pubDate>Tue, 20 Apr 2021 19:02:13 +0800</pubDate><description><![CDATA[title: 双向链表基本操作
date: 2020-10-12 21:12:51
tags: 双向链表
categories: 数据结构

&nbsp;&nbsp;&nbsp;&nbsp;双向链表的基本操作

初始化一个空的双向链表
尾插添加结点
顺序随机掉头逆序打印双向链表
按序号添加结点
按序号删除结点


// 双向链表
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;

typedef struct linkList
{
    int dat.]]></description><category></category></item><item><title><![CDATA[头指针单向链表基本操作]]></title><link>https://blog.youkuaiyun.com/qq_27868521/article/details/115916145</link><guid>https://blog.youkuaiyun.com/qq_27868521/article/details/115916145</guid><author>qq_27868521</author><pubDate>Tue, 20 Apr 2021 19:01:37 +0800</pubDate><description><![CDATA[title: 头指针单向链表基本操作
date: 2020-10-04 16:47:34
tags: 单链表基本操作
categories: 数据结构

感觉每次自己提前写的东西都和老师讲的书上内容不太一样= =
当然大多数是老师讲的更正规一些，毕竟我只是一个会了链表本质就瞎玩的人
属于自己琢磨，自己造的那种，很多东西也是不怎么规范
但是有的东西我就觉得自己的更好
比如下面所说…

课本上写的是以头指针为基本单位，每次开一个头指针，即可视为开辟了一个链表。
而我参考了动态数组静态数组的写法，将头指针作为了.]]></description><category></category></item><item><title><![CDATA[稀疏矩阵乘法]]></title><link>https://blog.youkuaiyun.com/qq_27868521/article/details/115916127</link><guid>https://blog.youkuaiyun.com/qq_27868521/article/details/115916127</guid><author>qq_27868521</author><pubDate>Tue, 20 Apr 2021 19:00:56 +0800</pubDate><description><![CDATA[title: 稀疏矩阵乘法
date: 2020-11-09 19:31:44
tags: 稀疏矩阵运算
categories: 数据结构

在本算法中，两个稀疏矩阵的特性都有用到

规定
规定以下变量名称，本文讲述 矩阵A × 矩阵B = 矩阵C 的运算过程
需要用到的存储结构有：

矩阵A，矩阵 B 的原始二维数组(2个)
矩阵A，矩阵B 的三元组数组(2个)
存储 矩阵A，矩阵B 每行有多少个非零元的数组(2个，分别存A、B矩阵)
存储 矩阵B每行首个非零元在三元组数组中的位置的数组(1个)
需要开.]]></description><category></category></item><item><title><![CDATA[简单选择排序]]></title><link>https://blog.youkuaiyun.com/qq_27868521/article/details/115916112</link><guid>https://blog.youkuaiyun.com/qq_27868521/article/details/115916112</guid><author>qq_27868521</author><pubDate>Tue, 20 Apr 2021 19:00:21 +0800</pubDate><description><![CDATA[title: 简单选择排序
date: 2020-12-22 21:35:48
tags: 排序算法
categories: 数据结构

选择排序 ，最简单的排序算法之一





平均时间复杂度
最坏时间复杂度
空间复杂度
稳定性




O(n^2)
O(n^2)
O(1)
不稳定


// 选择排序
// 首先通过 n –1 次关键字比较，从 n 个记录中找出关键
// 字最小的记录，将它与第一个记录交换。 
// 再通过 n –2 次比较，从剩余的 n –1 个记录中找出关键
// 字次小的记录，.]]></description><category></category></item><item><title><![CDATA[循环队列]]></title><link>https://blog.youkuaiyun.com/qq_27868521/article/details/115916099</link><guid>https://blog.youkuaiyun.com/qq_27868521/article/details/115916099</guid><author>qq_27868521</author><pubDate>Tue, 20 Apr 2021 18:59:35 +0800</pubDate><description><![CDATA[title: 循环队列
date: 2020-10-22 21:14:05
tags: 循环队列
categories: 数据结构

循环队列，底层内存结构：静态数组
灵魂思想: 将指针的自增改为   指针 = (指针+ 1) % (数组的真实长度)

// 循环队列
// 为了区分空队列和满队列
// 在这里我们认为当整个数组只剩下队尾的那块空间时，队列已满
// 当对头和队尾相等时，列队空
// 因此 队列中成员个数的最大值是 MAX_SIZE - 1
#include &lt;stdio.h&gt;.]]></description><category></category></item><item><title><![CDATA[循环链表的打印 合并]]></title><link>https://blog.youkuaiyun.com/qq_27868521/article/details/115916085</link><guid>https://blog.youkuaiyun.com/qq_27868521/article/details/115916085</guid><author>qq_27868521</author><pubDate>Tue, 20 Apr 2021 18:58:43 +0800</pubDate><description><![CDATA[title: 循环链表的打印 合并
date: 2020-10-02 21:12:27
tags: 打印、合并循环链表
categories: 数据结构

本文中的所有操作均使用 设有尾指针的循环链表完成，目前只写了打印和合并两个操作，后续持续更新~

看名字都可以知道，使用尾指针的循环链表和使用头指针单链表的区别

顾名思义，很容易就看出它们两个有以下这两个区别：



前者没有头指针，只有尾指针，尾指针存的是尾结点的地址，即它指向尾结点，尾指针-&gt;next 就得到了头结点的地址


前者的尾结点.]]></description><category></category></item><item><title><![CDATA[依据广度优先的输入字符串 生成二叉树]]></title><link>https://blog.youkuaiyun.com/qq_27868521/article/details/115916068</link><guid>https://blog.youkuaiyun.com/qq_27868521/article/details/115916068</guid><author>qq_27868521</author><pubDate>Tue, 20 Apr 2021 18:57:52 +0800</pubDate><description><![CDATA[title: 依据广度优先的输入字符串 生成二叉树
date: 2020-12-26 11:18:34
tags: 二叉树
categories: 数据结构

根据广度优先输入的字符串 生成一颗二叉树

说明
 这个根据输入的字符串自动生成一个二叉树
 使用的思想是广搜(BFS)
 要用到队列生成二叉树

 举个例子
 输入  12634^7^^^58^^^^^
 生成的二叉树为：

                        1
               /                \
 .]]></description><category></category></item></channel></rss>