<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[yy_0733的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/yy_0733</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; yy_0733]]></copyright><item><title><![CDATA[Leetcode：有效三角形的个数]]></title><link>https://blog.youkuaiyun.com/yy_0733/article/details/100980012</link><guid>https://blog.youkuaiyun.com/yy_0733/article/details/100980012</guid><author>yy_0733</author><pubDate>Wed, 18 Sep 2019 13:26:09 +0800</pubDate><description><![CDATA[给定一个包含非负整数的数组，你的任务是统计其中可以组成三角形三条边的三元组个数。


示例 1:

输入: [2,2,3,4]
输出: 3
解释:
有效的组合是:
2,3,4 (使用第一个 2)
2,3,4 (使用第二个 2)
2,2,3

注意:

 数组长度不超过1000。
 数组里整数的范围为 [0, 1000]。

解法一：暴力法

时间复杂度O(N3)O(N3)
先排序，然后...]]></description><category></category></item><item><title><![CDATA[Leecode：小于K的两数之和]]></title><link>https://blog.youkuaiyun.com/yy_0733/article/details/100904782</link><guid>https://blog.youkuaiyun.com/yy_0733/article/details/100904782</guid><author>yy_0733</author><pubDate>Mon, 16 Sep 2019 22:55:34 +0800</pubDate><description><![CDATA[Leecode1099号问题：

给你一个整数数组 A 和一个整数 K，请在该数组中找出两个元素，使它们的和小于 K 但尽可能地接近 K，返回这两个元素的和。

如不存在这样的两个元素，请返回 -1。


示例 1：

输入：A = [34,23,1,24,75,33,54,8], K = 60
输出：58
解释：
34 和 24 相加得到 58，58 小于 60，满足题意。

    1
   ...]]></description><category></category></item><item><title><![CDATA[剑指offer：字符串替换]]></title><link>https://blog.youkuaiyun.com/yy_0733/article/details/99467337</link><guid>https://blog.youkuaiyun.com/yy_0733/article/details/99467337</guid><author>yy_0733</author><pubDate>Wed, 14 Aug 2019 10:54:30 +0800</pubDate><description><![CDATA[字符串替换:
 1.一个换一个
  函数将字符串中的字符'*'移到字符串的前部分，前面的非'*'
  字符后移，但不能改变非'*'字符的先后顺序，函数返回串中非'*'字符的数量。(要求尽可能的占用少的时间和辅助空间)。
  例如：原始串为au**toc**h**i*ps,处理后为*******autochips,函数返回9.
 2.一个换多个(插入)
...]]></description><category></category></item><item><title><![CDATA[数据结构：不带头结点的单链表]]></title><link>https://blog.youkuaiyun.com/yy_0733/article/details/98627169</link><guid>https://blog.youkuaiyun.com/yy_0733/article/details/98627169</guid><author>yy_0733</author><pubDate>Tue, 06 Aug 2019 16:25:19 +0800</pubDate><description><![CDATA[不带头结点的单链表：

1.不带头结点的单链表操作中，除了初始化，头插，尾插，删除，操作与带头结点的单链表有差别外，其它的操作基本上一样。

2.链表指针直接指向了首元节点，因此在首元节点前插入数据元素或者删除首元节点元素都会改变头指针的值。所以这里要引入二级指针。

3、存储结构：



4、实现：

（1）list.h:


#pragma once

//链表指针直接指向了首元节点，因此在首...]]></description><category></category></item><item><title><![CDATA[数据结构：静态链表]]></title><link>https://blog.youkuaiyun.com/yy_0733/article/details/98472644</link><guid>https://blog.youkuaiyun.com/yy_0733/article/details/98472644</guid><author>yy_0733</author><pubDate>Sun, 04 Aug 2019 23:28:08 +0800</pubDate><description><![CDATA[1、对于没有指针的编程语言，可以用数组替代指针，来描述链表。让数组的每个元素由data和cur两部分组成，其中cur相当于链表的next指针，这种用数组描述的链表叫做静态链表，这种描述方法叫做游标实现法。我们对数组的第一个和最后一个元素做特殊处理，不存数据。让数组的第一个元素cur存放第一个备用元素（未被占用的元素）下标，而数组的最后一个元素cur存放第一个有值的元素下标，相当于头结点作用。

...]]></description><category></category></item><item><title><![CDATA[数据结构：单链表实现队列]]></title><link>https://blog.youkuaiyun.com/yy_0733/article/details/98447890</link><guid>https://blog.youkuaiyun.com/yy_0733/article/details/98447890</guid><author>yy_0733</author><pubDate>Sun, 04 Aug 2019 10:36:34 +0800</pubDate><description><![CDATA[1、队列示意图：



2、单链表实现队列的存储结构：



3、C语言实现：

（1）lqueue.h:


#pragma once

//利用带头节点的单链表实现队列，队头为第一个数据节点

typedef struct Node
{
   int data;
   struct Node *next;
}Node;//数据节点

typedef struct HNode
{
    str...]]></description><category></category></item><item><title><![CDATA[数据结构：顺序表实现环形队列]]></title><link>https://blog.youkuaiyun.com/yy_0733/article/details/98443759</link><guid>https://blog.youkuaiyun.com/yy_0733/article/details/98443759</guid><author>yy_0733</author><pubDate>Sun, 04 Aug 2019 10:06:48 +0800</pubDate><description><![CDATA[1、队列的定义：队列是一种特殊的线性表，线性表两端都可以进行插入删除，而队列只能在队头删除，队尾插入。插入元素称为入队，删除元素称为出队。

2、队列的特点：

（1）只允许在一端进行插入数据操作，在另一端进行删除数据操作的特殊线性表 
（2）进行插入操作的一端称为队尾（入队列） 
（3）进行删除操作的一端称为队头（出队列） 
（4）队列具有先进先出(FIFO)的特性

3、队列的分类：顺序...]]></description><category></category></item><item><title><![CDATA[数据结构：链栈]]></title><link>https://blog.youkuaiyun.com/yy_0733/article/details/98442261</link><guid>https://blog.youkuaiyun.com/yy_0733/article/details/98442261</guid><author>yy_0733</author><pubDate>Sun, 04 Aug 2019 09:46:14 +0800</pubDate><description><![CDATA[1、链栈：栈的链式存储结构

2、基本概念：

栈顶：允许插入和删除的一端称为栈顶(top)
栈底：栈顶的另外一端称为栈底(bottom)
空栈：不含任何元素的栈称为空栈

3、链栈的存储结构：



4、链栈的实现：

（1）入栈：



（2）出栈：



5、链栈的C语言实现：

（1）lstack.h:


//带头节点链栈，栈顶在第一个数据节点,入栈和出栈都是O(1)
#include ...]]></description><category></category></item><item><title><![CDATA[数据结构：不定长顺序栈]]></title><link>https://blog.youkuaiyun.com/yy_0733/article/details/98441104</link><guid>https://blog.youkuaiyun.com/yy_0733/article/details/98441104</guid><author>yy_0733</author><pubDate>Sun, 04 Aug 2019 09:34:15 +0800</pubDate><description><![CDATA[1、栈（stack）：又名堆栈，它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶，相对地，把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈，它是把新元素放到栈顶元素的上面，使之成为新的栈顶元素；从一个栈删除元素又称作出栈或退栈，它是把栈顶元素删除掉，使其相邻的元素成为新的栈顶元素。

特点：栈是允许在同一端进行插入和删除操作的特殊线性表。允许进行插入...]]></description><category></category></item><item><title><![CDATA[数据结构：单链表的逆置]]></title><link>https://blog.youkuaiyun.com/yy_0733/article/details/98355026</link><guid>https://blog.youkuaiyun.com/yy_0733/article/details/98355026</guid><author>yy_0733</author><pubDate>Sat, 03 Aug 2019 17:57:09 +0800</pubDate><description><![CDATA[单链表的逆置分为两种方法：头插法和就地逆置法。

（1）头插法：

算法思路：依次取原链表中的每一个节点，将其作为第一个节点插入到新链表中，指针用来指向当前节点，p为空时结束。

(2)就地逆置法：


ListNode* ReverseList(ListNode* pHead)
{
    if (pHead == NULL || pHead-&gt;pNext == NULL)
    {
 ...]]></description><category></category></item><item><title><![CDATA[数据结构：一元多项式及其基本运算]]></title><link>https://blog.youkuaiyun.com/yy_0733/article/details/98349609</link><guid>https://blog.youkuaiyun.com/yy_0733/article/details/98349609</guid><author>yy_0733</author><pubDate>Sat, 03 Aug 2019 17:25:16 +0800</pubDate><description><![CDATA[1、实现方式：可采用线性表的顺序存储结构，但是当多项式的每个项的指数差别很大时，会浪费很多存储空间。所以采用链式存储方式表示，每一项可以表示成一个结点，结点的结构由存放系数的coef域，存放指数的expn域和指向下一个结点的next指针域组成。

2、链表结构：





3、一元多项式的加法运算：

设La和Lb分别表示两个多项式。Lc表示和多项式。p,q,r分别表示指向单链表的当前项比较指数...]]></description><category></category></item><item><title><![CDATA[数据结构：双向链表（不循环）]]></title><link>https://blog.youkuaiyun.com/yy_0733/article/details/98217334</link><guid>https://blog.youkuaiyun.com/yy_0733/article/details/98217334</guid><author>yy_0733</author><pubDate>Fri, 02 Aug 2019 17:56:18 +0800</pubDate><description><![CDATA[1、双向链表的定义：双向链表也是链表的一种，它每个数据结点中都有两个结点，分别指向其直接前驱和直接后继。所以我们从双向链表的任意一个结点开始都可以很方便的访问其前驱元素和后继元素。

2、双向链表的节点结构：



3、双向链表的存储结构：

双向链表也是采用的链式存储结构，它与单链表的区别就是每个数据结点中多了一个指向前驱元素的指针域 ，它的存储结构如下图：



4、当双向链表只有一个节点的时...]]></description><category></category></item><item><title><![CDATA[数据结构：循环链表]]></title><link>https://blog.youkuaiyun.com/yy_0733/article/details/98215683</link><guid>https://blog.youkuaiyun.com/yy_0733/article/details/98215683</guid><author>yy_0733</author><pubDate>Fri, 02 Aug 2019 17:37:37 +0800</pubDate><description><![CDATA[1、循环链表的定义：循环链表是另一种形式的表示线性表的链表。

2、循环链表的节点结构：

循环链表的结点包括两个部分：数据域和指针域。(1)数据域(data)，用于存储该结点的数据元素，数据元素类型由应用问题决定。 (2)指针域(link)，用于存放一个指针，该指针指向下一个结点的开始存储地址。

循环链表的结点结构示意图：



3、循环链表中各节点的链接方式：

（1）循环链表与单链表一样，...]]></description><category></category></item><item><title><![CDATA[数据结构：单链表]]></title><link>https://blog.youkuaiyun.com/yy_0733/article/details/97968056</link><guid>https://blog.youkuaiyun.com/yy_0733/article/details/97968056</guid><author>yy_0733</author><pubDate>Wed, 31 Jul 2019 22:17:54 +0800</pubDate><description><![CDATA[1、链式存储结构：在链式存储的过程中，每个元素Node不仅包含元素本身的信息，还包含元素之间的逻辑信息。前驱结点包含后继结点的地址信息（指针域），可以很方便的找到后继结点的位置。

2、链表：通过一组任意的存储单元来存储线性表中的数据元素，由一个个结点构成。

3、单链表：每个结点除包含数据域外，只设置一个指针域，来指向后继结点，这样构成的链表就是单链表。

   单链表是一种链式存取的数据...]]></description><category></category></item><item><title><![CDATA[数据结构：不定长顺序表]]></title><link>https://blog.youkuaiyun.com/yy_0733/article/details/97810196</link><guid>https://blog.youkuaiyun.com/yy_0733/article/details/97810196</guid><author>yy_0733</author><pubDate>Tue, 30 Jul 2019 22:33:07 +0800</pubDate><description><![CDATA[1、定长的顺序表即为不可扩容的线性表，而不定长的顺序表一旦因插入元素而空间不足时，可进行再分配。

2、不定长顺序表的结构：是对定长顺序表的一种改进，在初始时开辟内存被利用完后，还要继续插入数据时，这时候据需要扩容。与定长的顺序表的存储结构相比较，不定长的顺序表只增加一个元素listsize(用于记录当前顺序表的总长度），具体结构如下图所示：



dseqlist.h:


//不定长顺序表
#...]]></description><category></category></item><item><title><![CDATA[数据结构：定长顺序表]]></title><link>https://blog.youkuaiyun.com/yy_0733/article/details/97789150</link><guid>https://blog.youkuaiyun.com/yy_0733/article/details/97789150</guid><author>yy_0733</author><pubDate>Tue, 30 Jul 2019 22:00:32 +0800</pubDate><description><![CDATA[1、 顺序表是在计算机内存中以数组的形式保存的线性表，是指用一组地址连续的存储单元依次存储数据元素的线性结构。线性表采用顺序存储的方式存储就称之为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。其物理地址相邻，逻辑地址也相邻

2、顺序表的特点：（1）简单；（2）支持随机访问（下标）；（3）查找快；（4）缺点：插入和删除慢（但尾删和尾插为O(1)）

3、顺序表的存储结...]]></description><category></category></item><item><title><![CDATA[C语言：单偶魔方阵的实现（不是4的倍数）]]></title><link>https://blog.youkuaiyun.com/yy_0733/article/details/97490074</link><guid>https://blog.youkuaiyun.com/yy_0733/article/details/97490074</guid><author>yy_0733</author><pubDate>Sat, 27 Jul 2019 11:50:54 +0800</pubDate><description><![CDATA[单偶魔方阵：就是当n不可以被4整除时的偶阶幻方，即4K+2阶幻方。如（n = 6,10,14,……)的幻方。

实现方法：（以10阶幻方为例）。这时，k=2.

 （1）把魔方阵分为A，B，C，D四个象限，这样每一个象限肯定是奇数阶。用奇数阶象限的填充数字的方法（罗伯法），依次在A象限，D象限，B象限，C象限填数。



 （2）在A象限的中间行、中间格开始，按自左向右的方向，标出k格。A象限...]]></description><category></category></item><item><title><![CDATA[C语言：偶数阶魔方阵的实现（四的倍数）]]></title><link>https://blog.youkuaiyun.com/yy_0733/article/details/97427013</link><guid>https://blog.youkuaiyun.com/yy_0733/article/details/97427013</guid><author>yy_0733</author><pubDate>Fri, 26 Jul 2019 22:24:05 +0800</pubDate><description><![CDATA[偶阶魔方阵的实现步骤：

1.用横线和竖线将n阶方阵划分为m个4*4的小方阵；

2.将n*n个数从小到大，从左到右，从上到下依次填入方阵中，遇到4*4小方阵的对角线不填（此位置不填的数不作为下一个位置填入的数）

3.将n*n个数从大到小，从左到右，从上到下依次填入方阵中4*4小方阵的对角线上，其他位置不填（此位置不填的数不作为下一个位置填入的数）

4.偶阶魔方阵完成。

下面进行图解（以8阶...]]></description><category></category></item><item><title><![CDATA[C语言：奇数魔方阵的实现]]></title><link>https://blog.youkuaiyun.com/yy_0733/article/details/97425852</link><guid>https://blog.youkuaiyun.com/yy_0733/article/details/97425852</guid><author>yy_0733</author><pubDate>Fri, 26 Jul 2019 22:14:02 +0800</pubDate><description><![CDATA[1、奇数阶魔方阵

奇阶魔方阵的实现步骤：

（1）将“1”放在第一行的中间一列；

（2）从“2”开始直到n*n为止的各数依次按下列规则存放：每一个数存放的行比前一个数的行数减一，列数同样加1.

（3）如果上一个数的列数为1，则下一个数的行数为n（最后一行）

（4）当上一个数的列数为n时，下一个数的列数应为1，行数减1

（5）如果按上面规则确定的位置上已有数，或上一个数是第1行第n列时，则...]]></description><category></category></item><item><title><![CDATA[C语言：strlen strcat strcmp的实现]]></title><link>https://blog.youkuaiyun.com/yy_0733/article/details/97176141</link><guid>https://blog.youkuaiyun.com/yy_0733/article/details/97176141</guid><author>yy_0733</author><pubDate>Wed, 24 Jul 2019 22:27:58 +0800</pubDate><description><![CDATA[（1）strlen：

原型：extern int strlen(char *s);

功能：用来求得字符串s的长度

思路：返回s的长度，不包括结束符NULL。

实现：



（2）strcat：

原型：char *strcat (char *strDest, const char *strSrc);其中strDest 是目的字符串，strSrc 是源字符串（不能调用库函数）。

功能：将字...]]></description><category></category></item></channel></rss>