<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[啃梨的博客]]></title><description><![CDATA[专注、热爱、 全心贯注于你所期望的事物上，必有收获]]></description><link>https://blog.youkuaiyun.com/HorseCoder</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; HorseCoder]]></copyright><item><title><![CDATA[重学数据结构：三对角矩阵公式推导过程]]></title><link>https://blog.youkuaiyun.com/HorseCoder/article/details/115951957</link><guid>https://blog.youkuaiyun.com/HorseCoder/article/details/115951957</guid><author>HorseCoder</author><pubDate>Wed, 21 Apr 2021 15:13:48 +0800</pubDate><description><![CDATA[文章目录三对角矩阵概念公式推导过程(下标为1的情况)
三对角矩阵概念

公式推导过程(下标为1的情况)

k=2i+j-3推导过程：
当i=1时，只有两个元素。当i=2~i-1时，每一行都有三个元素。在最后的i行，有j-i+1个元素。

*k= 2+（i-1-2+1)3  + (j-i+1)= 2i+j-3

i=(k+1)/3+1,j=k-2i+3推导过程：





i
j
k




1
1
0


1
2
1


2
1
2


2
2
3


2
3
4


3
2
5


3
3
6


3
4]]></description><category></category></item><item><title><![CDATA[重学数据结构：循环队列(C语言)]]></title><link>https://blog.youkuaiyun.com/HorseCoder/article/details/115858908</link><guid>https://blog.youkuaiyun.com/HorseCoder/article/details/115858908</guid><author>HorseCoder</author><pubDate>Tue, 20 Apr 2021 16:35:29 +0800</pubDate><description><![CDATA[文章目录循环队列的概念循环队列的存储溢出问题（满，空）及解决方案循环队列的代码实现循环队列的代码实现测试循环队列的代码实现测试结果
循环队列的概念
将向量空间想象为一个首尾相接的圆环，并称这种向量为循环向量。存储在其中的队列称为循环队列（Circular Queue）。循环队列是把顺序队列首尾相连，把存储队列元素的表从逻辑上看成一个环，成为循环队列。

循环队列的存储溢出问题（满，空）及解决方案
问题描述:循环队列都会有队列的头指针和尾指针，而且循环队列一般用数组来定义长度，也就是说长度是有限的，头指针一般]]></description><category></category></item><item><title><![CDATA[重学数据结构：树的层序遍历(C语言)]]></title><link>https://blog.youkuaiyun.com/HorseCoder/article/details/114013867</link><guid>https://blog.youkuaiyun.com/HorseCoder/article/details/114013867</guid><author>HorseCoder</author><pubDate>Thu, 25 Feb 2021 16:54:39 +0800</pubDate><description><![CDATA[文章目录树的层序遍历层序遍历代码测试代码测试结果其他用到的代码
树的层序遍历
顾名思义，就是一层一层的输出内容。要实现这个功能，需要用到我们之前学到的队列的相关操作。以二叉树为例，，根节点先输出，遍历所有节点，把当前节点的左右子节点也加入队列，若当前列队不为空，则输出队头节点，并获取对头节点的左右子节点加入队列，直到队列为空。

层序遍历代码
//层序遍历
bool LevelOrder(BiTree tree)
{
    if(tree==NULL) return false;
	LinkQueue *]]></description><category></category></item><item><title><![CDATA[重学数据结构：树的遍历：前序、中序和后序(C语言)]]></title><link>https://blog.youkuaiyun.com/HorseCoder/article/details/113941890</link><guid>https://blog.youkuaiyun.com/HorseCoder/article/details/113941890</guid><author>HorseCoder</author><pubDate>Tue, 23 Feb 2021 17:15:05 +0800</pubDate><description><![CDATA[文章目录树的存储结构树的遍历前序遍历中序遍历后序遍历代码三种遍历的作用
树的存储结构
typedef struct BiNode
{
    int data;
	 struct BiNode *left,*right;
}BiNode,* BiTree;

树的遍历
用以下二叉树作为例子，便于演示和理解。


void InitTree(BiTree &amp;root)
{
   root=(BiTree)malloc(sizeof(BiNode));
   root-&gt;left=(BiNode ]]></description><category></category></item><item><title><![CDATA[重学数据结构：树的定义、性质]]></title><link>https://blog.youkuaiyun.com/HorseCoder/article/details/113687367</link><guid>https://blog.youkuaiyun.com/HorseCoder/article/details/113687367</guid><author>HorseCoder</author><pubDate>Tue, 09 Feb 2021 10:17:42 +0800</pubDate><description><![CDATA[文章目录树的定义树的性质节点数=度数+1度为m的树和m叉树的关系度为m的树第i层最多有mi-1个节点高度为h的m叉树最多的节点有（等差数列求和=m0+m1+m2+......+mh）高度为h的m叉树至少有h个节点高度为h且度为m的树至少有
树的定义
树的性质


节点数=度数+1


度为m的树和m叉树的关系







度为m的树
m叉树




定义
树的所有节点



相同点




不同点1




不同点2






度为m的树第i层最多有mi-1个节点


高度为h的m叉树最多的节点有（等差]]></description><category></category></item><item><title><![CDATA[重学数据结构：串的匹配算法(C语言)]]></title><link>https://blog.youkuaiyun.com/HorseCoder/article/details/113181195</link><guid>https://blog.youkuaiyun.com/HorseCoder/article/details/113181195</guid><author>HorseCoder</author><pubDate>Mon, 01 Feb 2021 11:34:49 +0800</pubDate><description><![CDATA[文章目录朴素模式匹配算法测试代码测试结果KMP算法求模式串的Next数组KMP算法优化求模式串的NextVal数组
朴素模式匹配算法

算法描述：定位操作。若主串S中存在与串T值相同的子串，则返回它在主串S中第一次出现的位置；否则函数值为0。
算法思想：就是把比較主串字符串一位一位地跟模式字符串相比，比较简单粗暴。
算法缺点：当某些子串与模式串能部分匹配时，主串的扫描指针 i 经常回溯，导致时间开销增加

//朴素匹配算法
int SimpleIndex(String S,String T)
{
   in]]></description><category></category></item><item><title><![CDATA[重学数据结构：串的基本操作（C语言）]]></title><link>https://blog.youkuaiyun.com/HorseCoder/article/details/112215592</link><guid>https://blog.youkuaiyun.com/HorseCoder/article/details/112215592</guid><author>HorseCoder</author><pubDate>Tue, 26 Jan 2021 10:58:05 +0800</pubDate><description><![CDATA[串的结构
赋值操作
StrAssign(&amp;T,chars)：赋值操作。把串T赋值为chars。
赋值操作
StrCopy(&amp;T,S)：复制操作。由串S复制得到串T。
StrEmpty(S)：判空操作。若S为空串，则返回TRUE，否则返回FALSE。
StrLength(S)：求串长。返回串S的元素个数。
ClearString(&amp;S)：清空操作。将S清为空串。
DestroyString(&amp;S)：销毁串。将串S销毁（回收存储空间）。
Concat(&amp;T,S1,S2)：]]></description><category></category></item><item><title><![CDATA[重学数据结构：栈的应用-逆波兰表达式（C语言）]]></title><link>https://blog.youkuaiyun.com/HorseCoder/article/details/111867893</link><guid>https://blog.youkuaiyun.com/HorseCoder/article/details/111867893</guid><author>HorseCoder</author><pubDate>Mon, 28 Dec 2020 23:17:04 +0800</pubDate><description><![CDATA[表达式求值

波兰表示法（Polish notation，或波兰记法），是一种逻辑、算术和代数表示方法，其特点是操作符置于操作数的前面，因此也称做前缀表示法。如果操作符的元数（arity）是固定的，则语法上不需要括号仍然能被无歧义地解析。波兰记法是波兰数学家扬·武卡谢维奇1920年代引入的，用于简化命题逻辑。


“	扬·武卡谢维奇本人提到：我在1924年突然有了一个无需括号的表达方法，我在文章第一次使用了这种表示法。	”
—— Łukasiewicz(1), p. 610, footnote.
阿隆佐·邱]]></description><category></category></item><item><title><![CDATA[重学数据结构：栈的应用-括号匹配（C语言）]]></title><link>https://blog.youkuaiyun.com/HorseCoder/article/details/111852743</link><guid>https://blog.youkuaiyun.com/HorseCoder/article/details/111852743</guid><author>HorseCoder</author><pubDate>Mon, 28 Dec 2020 13:07:58 +0800</pubDate><description><![CDATA[文章目录栈的数据结构栈初始化判断栈空判断栈满获取栈顶元素压栈退栈判断元素是否在数组中左右括号匹配括号匹配测试数据测试结果
栈的数据结构
typedef struct
{
    int top;
    char *data;
}SqStack;

栈初始化
void InitStack(SqStack *S)
{
   S-&gt;top=-1;
   S-&gt;data=new char[MaxSize-1];
   for(int i=0;i&lt;MaxSize-1;i++)
   {
     ]]></description><category></category></item><item><title><![CDATA[重学数据结构：队列的链式实现的各种操作（C语言）]]></title><link>https://blog.youkuaiyun.com/HorseCoder/article/details/111571854</link><guid>https://blog.youkuaiyun.com/HorseCoder/article/details/111571854</guid><author>HorseCoder</author><pubDate>Thu, 24 Dec 2020 23:14:13 +0800</pubDate><description><![CDATA[文章目录队列的链式定义队列的链式实现分类有头节点的链式队列链式队列初始化（有头节点）判断队空（有头节点）链式队列的创建（有头节点）打印链式队列（有头节点）入队（有头节点）出队（有头节点）获取队头元素（有头节点）无头节点的链式队列链式队列初始化（无头节点）链式队列的创建（无头节点）打印链式队列（无头节点）入队（无头节点）出队（无头节点）获取队头元素（无头节点）
队列的链式定义
队列的链式实现分类
分为有头节点和无头节点
有头节点的链式队列
链式队列初始化（有头节点）
判断队空（有头节点）
链式队列的创建（有头]]></description><category></category></item><item><title><![CDATA[重学数据结构：队列的顺序实现的各种操作（C语言）]]></title><link>https://blog.youkuaiyun.com/HorseCoder/article/details/111560934</link><guid>https://blog.youkuaiyun.com/HorseCoder/article/details/111560934</guid><author>HorseCoder</author><pubDate>Tue, 22 Dec 2020 16:32:34 +0800</pubDate><description><![CDATA[文章目录队列的顺序实现定义队列初始化判断队满判断队空创建队列打印队列入队退队测试代码测试结果
队列的顺序实现定义
队列的定义和顺序表、顺序栈其实差不多，只不过有两个变量来记录队列头，尾，操作不尽相同，队列只能在尾部插入，头部退列
typedef struct 
{
    int data[MaxSize];
	int front,rear; //队头队尾
}SqQueue;

队列初始化
void InitSqQueue(SqQueue *Q)
{
    Q-&gt;front=0;
	Q-&gt;re]]></description><category></category></item><item><title><![CDATA[重学数据结构：链栈的各种操作（C语言）]]></title><link>https://blog.youkuaiyun.com/HorseCoder/article/details/111521425</link><guid>https://blog.youkuaiyun.com/HorseCoder/article/details/111521425</guid><author>HorseCoder</author><pubDate>Tue, 22 Dec 2020 11:42:35 +0800</pubDate><description><![CDATA[链栈的定义
其实跟链表的结构是一样的，连同操作基本一样，但是链栈只能在一端进行删除节点和增加节点.
typedef struct LNode
{
    struct LNode *next;
	int data;
	int maxsize;
}LNode,* LinkStack;

头插法建立链表(带头节点)
LinkStack link_HeadInsert()
{
   LinkStack head=(LinkStack)malloc(sizeof(LinkStack));
   head-&gt;n]]></description><category></category></item><item><title><![CDATA[重学数据结构：顺序栈的各种操作（C语言）]]></title><link>https://blog.youkuaiyun.com/HorseCoder/article/details/111499978</link><guid>https://blog.youkuaiyun.com/HorseCoder/article/details/111499978</guid><author>HorseCoder</author><pubDate>Mon, 21 Dec 2020 21:16:07 +0800</pubDate><description><![CDATA[顺序栈的定义
#define MaxSize 50
#define bool int
#define true 1
#define false 0;


typedef struct
{
    int top;
    int data[MaxSize];
}SqStack;

判断栈空
bool IsEmpty(SqStack S)
{
     if(S.top==-1)
         return true;
    else
        return false;
}


判断栈满
boo]]></description><category></category></item><item><title><![CDATA[重学数据结构：静态链表的各种操作（C语言）]]></title><link>https://blog.youkuaiyun.com/HorseCoder/article/details/111397339</link><guid>https://blog.youkuaiyun.com/HorseCoder/article/details/111397339</guid><author>HorseCoder</author><pubDate>Fri, 18 Dec 2020 22:12:42 +0800</pubDate><description><![CDATA[静态链表定义
#include &lt;stdio.h&gt;
#include &lt;string.h&gt;

#define maxSize 50

typedef struct
{
    int index;
    int data;
}StaticLink[maxSize];


初始化链表
void InitStaticLink(StaticLink L)
{
    L[0].index=-1;
    for (int i=1; i&lt;maxSize; i++) {
       ]]></description><category></category></item><item><title><![CDATA[重学数据结构：循环链表的各种操作（C语言）]]></title><link>https://blog.youkuaiyun.com/HorseCoder/article/details/111307702</link><guid>https://blog.youkuaiyun.com/HorseCoder/article/details/111307702</guid><author>HorseCoder</author><pubDate>Thu, 17 Dec 2020 19:38:01 +0800</pubDate><description><![CDATA[循环单链表定义
其实这里定义的结构跟单链表的没什么区别，只不过在初始化或操作数据的时候，要把next指针指向链表的头指针。
#define bool int
#define true 1
#define false 0
typedef struct LNode
{
    struct LNode *next;
	int data;
}LNode,*ScLinkList;



初始化
void InitList(ScLinkList L)
{
    L=(LNode *)malloc(sizeof(LN]]></description><category></category></item><item><title><![CDATA[重学数据结构：双向链表的各种操作（C语言）]]></title><link>https://blog.youkuaiyun.com/HorseCoder/article/details/111304854</link><guid>https://blog.youkuaiyun.com/HorseCoder/article/details/111304854</guid><author>HorseCoder</author><pubDate>Wed, 16 Dec 2020 22:43:47 +0800</pubDate><description><![CDATA[双向链表定义
#define bool int
#define true 1
#define false 0
typedef  struct DLNode
{
    struct DLNode *next;
    struct DLNode *prior;
    int data;
}DLNode,*DLinkList;


初始化双向链表（前插值）
DLinkList InitDLinkList(DLinkList L)
{
    L=(DLinkList)malloc(sizeof(DLinkL]]></description><category></category></item><item><title><![CDATA[重学数据结构：顺序表的各种操作（C语言）]]></title><link>https://blog.youkuaiyun.com/HorseCoder/article/details/111292646</link><guid>https://blog.youkuaiyun.com/HorseCoder/article/details/111292646</guid><author>HorseCoder</author><pubDate>Wed, 16 Dec 2020 17:07:28 +0800</pubDate><description><![CDATA[顺序表(静态)的定义
#define MaxSize 50
typedef struct
{
    int array[MaxSize];
int length; //数组当前长度
}SeqList;

初始化数组
void InitList(SeqList *L)
{
for(int i=0;i&lt;MaxSize;i++)
{
     L-&gt;array[i]=0;
}
L-&gt;length=0;
}


打印数组内容
void PrintList(SeqList L)
{
    for]]></description><category></category></item><item><title><![CDATA[重学数据结构：单链表的各种操作（C语言）]]></title><link>https://blog.youkuaiyun.com/HorseCoder/article/details/111283590</link><guid>https://blog.youkuaiyun.com/HorseCoder/article/details/111283590</guid><author>HorseCoder</author><pubDate>Wed, 16 Dec 2020 16:04:40 +0800</pubDate><description><![CDATA[这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题，有助于目录的生成如何改变文本的样式插入链接与图片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能，丰富你的文章UML 图表FLowchart流程图导出与导入导出导入
欢迎使用Markdown编辑器
你好！ 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以]]></description><category></category></item><item><title><![CDATA[ARTS 第九周]]></title><link>https://blog.youkuaiyun.com/HorseCoder/article/details/100134471</link><guid>https://blog.youkuaiyun.com/HorseCoder/article/details/100134471</guid><author>HorseCoder</author><pubDate>Thu, 29 Aug 2019 11:30:11 +0800</pubDate><description><![CDATA[Algorithm:传送门
Review:传送门
Tips:传送门
Share:传送门

]]></description><category></category></item><item><title><![CDATA[重温计算机组成原理：原码、反码、补码、移码]]></title><link>https://blog.youkuaiyun.com/HorseCoder/article/details/100134445</link><guid>https://blog.youkuaiyun.com/HorseCoder/article/details/100134445</guid><author>HorseCoder</author><pubDate>Thu, 29 Aug 2019 11:29:10 +0800</pubDate><description><![CDATA[重温计算机组成原理：原码、反码、补码、移码
原码
原码(true form)是一种计算机中对数字的二进制定点表示方法。原码表示法在数值前面增加了一位符号位（即最高位为符号位）：正数该位为0，负数该位为1（0有两种表示：+0和-0），其余位表示数值的大小。
原码不能直接参加运算，可能会出错。例如数学上，1+(-1)=0，而在二进制中
原码00000001+10000001=10000010，换算成十...]]></description><category></category></item></channel></rss>