<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[dfzzh5的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/dfzzh5</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; dfzzh5]]></copyright><item><title><![CDATA[嵌入式历史与生态]]></title><link>https://blog.youkuaiyun.com/dfzzh5/article/details/169839424</link><guid>https://blog.youkuaiyun.com/dfzzh5/article/details/169839424</guid><author>dfzzh5</author><pubDate>Mon, 02 Nov 2026 14:27:14 +0800</pubDate><description><![CDATA[将 CPU 核心、存储器（Flash、RAM）以及外设接口（GPIO、UART、SPI、I2C、ADC、Timer 等）集成在单一硅片上的单芯片微型计算机。]]></description><category></category></item><item><title><![CDATA[快速排序和归并排序]]></title><link>https://blog.youkuaiyun.com/dfzzh5/article/details/159888306</link><guid>https://blog.youkuaiyun.com/dfzzh5/article/details/159888306</guid><author>dfzzh5</author><pubDate>Mon, 06 Apr 2026 17:02:26 +0800</pubDate><description><![CDATA[基本思想：归并排序是建立在归并操作上的一种有效的排序算法，该算法是采用分治法的一个非常典型的应用。将已有序的子序列合并，得到完全有序的序列；基本思想：选取第一个为keyi，右边找到比a[keyi]小的就停，左边找到比a[keyi]大的就停，然后交换，相遇时，与a[keyi]交换，最后a[keyi]左边是比它小的，右边是比它大的。先确定左边第一个为key(坑位），右边开始走，找小，移到原坑位后，形成一个新坑位，左边再走，找大，移动坑位，形成新坑位，当左边与右边相遇时，即坑位，把key放进坑位。]]></description><category></category></item><item><title><![CDATA[插入排序和选择排序]]></title><link>https://blog.youkuaiyun.com/dfzzh5/article/details/159833978</link><guid>https://blog.youkuaiyun.com/dfzzh5/article/details/159833978</guid><author>dfzzh5</author><pubDate>Sat, 04 Apr 2026 20:40:59 +0800</pubDate><description><![CDATA[直接插入排序：是一种简单的插入排序法，其基本思想是：把待排序的记录，按其关键码值的大小，逐个插入到一个已经排好序的有序序列中，直到所有的记录插入完为止，得到一个新的有序序列。预排序（gap越大，大的可以越快跳到后面，小的数可以越快跳到前面，越不接近有序。gap>1时是预排序，gap==1时是直接插入排序。优化：从两边比较，既选出最大的，也选出最小的，放在两边，然后依次往中间收缩，直到到了中间就停止。本来是将第1个记为最小的，然后遍历，如果有更小的就交换，然后下一个记为最小的，依次类推。]]></description><category></category></item><item><title><![CDATA[排序：概览]]></title><link>https://blog.youkuaiyun.com/dfzzh5/article/details/159833604</link><guid>https://blog.youkuaiyun.com/dfzzh5/article/details/159833604</guid><author>dfzzh5</author><pubDate>Sat, 04 Apr 2026 20:19:16 +0800</pubDate><description><![CDATA[假定在待排序的记录序列中，存在多个具有相同的关键字的记录，若经过排序，这些记录的相对次序保持不变。（即在原序列中，r[i]=r[j],且r[i]在r[j]之前，而在排序后的序列中，r[i]仍在r[j]之前，则称这种排序算法是稳定的；选择排序：          O(n^2),            O(1),         不稳定。归并排序：            O(N*logN),     O(N),        稳定。排序用于我们日常生活中，很常见的就是购物中价格的排序。4.归并排序：归并排序。]]></description><category></category></item><item><title><![CDATA[二叉树的遍历]]></title><link>https://blog.youkuaiyun.com/dfzzh5/article/details/159583652</link><guid>https://blog.youkuaiyun.com/dfzzh5/article/details/159583652</guid><author>dfzzh5</author><pubDate>Sat, 28 Mar 2026 17:41:43 +0800</pubDate><description><![CDATA[2.若规定根节点的层数为1，则深度为h的二叉树的最大节点数是2^h-1,若节点数为n,那么h=log2(n+1).1.若规定根节点的层数为1，则一棵非空二叉树的第i层上最多有2^(i-1)个结点。那么前序:1 2 3 n n n 4 5 n n 6 n n。中序:n 3 n 2 n 1 n 5 n 4 n 6 n。后序：n n 3 n 2 n n 5 n n 6 4 1。前序：访问根结点的操作发生在遍历其左右子树之前。中序：访问根结点的操作发生在遍历其左右子树中间。假设层序遍历为：1 2 4 3 5 6。]]></description><category></category></item><item><title><![CDATA[数据结构：堆]]></title><link>https://blog.youkuaiyun.com/dfzzh5/article/details/159551244</link><guid>https://blog.youkuaiyun.com/dfzzh5/article/details/159551244</guid><author>dfzzh5</author><pubDate>Fri, 27 Mar 2026 20:11:23 +0800</pubDate><description><![CDATA[数据结构的堆和栈与操作系统的堆和栈不同。操作系统中的堆和栈是对内存区域的划分。a.完全二叉树 b.任何一个父亲大于等于孩子。a.完全二叉树 b.任何一个父亲小于等于孩子。大堆 70，50，30，25，15，10。小堆 10，15，56，25，30，70。//假设法(先假设左孩子小）大堆和小堆不一定有序。{//找出小的那个孩子。//建堆（向上调整）]]></description><category></category></item><item><title><![CDATA[数据结构：树]]></title><link>https://blog.youkuaiyun.com/dfzzh5/article/details/159321726</link><guid>https://blog.youkuaiyun.com/dfzzh5/article/details/159321726</guid><author>dfzzh5</author><pubDate>Sat, 21 Mar 2026 19:50:08 +0800</pubDate><description><![CDATA[有一个特殊的结点，称为根结点，根节点没有前驱结点，除根结点外，其余结点被分成M（M>0)个互不相交的集合T1,T2......Tm,其中每一个集合Ti(1<=i<=m)又是一棵结构与树类似的子树，每棵子树的根结点有且只有一个前驱，可以有0个或多个后继。对于深度为k的，有n个结点的二叉树，当且仅当每一个结点都与深度为k的满二叉树中编号从1到n的结点一一对应时称为完全二叉树。双亲节点或父节点：若一个节点含有子节点，则这个节点称为其子节点的父节点。孩子节点或子节点：一个节点含有的子树的根节点称为该节点的子节点。]]></description><category></category></item><item><title><![CDATA[数据结构：队列]]></title><link>https://blog.youkuaiyun.com/dfzzh5/article/details/159051659</link><guid>https://blog.youkuaiyun.com/dfzzh5/article/details/159051659</guid><author>dfzzh5</author><pubDate>Sat, 14 Mar 2026 20:24:26 +0800</pubDate><description><![CDATA[思路：使用两个栈，分别为pushst和popst,pushst里进数据，popst里出数据，将pushst里的数据先导入popst,再弹出。只允许在一端进行插入数据操作，在另一端进行删除数据操作的特殊线性表，队列具有先进先出（FIFO first in first out)思路：使用两个队列，保持一个存数据，一个为空，入数据入不为空的队列，出数据通过空的导一下。入队列：进行插入操作的一端称为队尾。出队列：进行删除操作的一端称为队头。队列相比栈在某些应用下更公平。可以尝试用队列实现栈。思考：设计循环队列。]]></description><category></category></item><item><title><![CDATA[数据结构：栈]]></title><link>https://blog.youkuaiyun.com/dfzzh5/article/details/157844617</link><guid>https://blog.youkuaiyun.com/dfzzh5/article/details/157844617</guid><author>dfzzh5</author><pubDate>Sat, 07 Feb 2026 22:24:51 +0800</pubDate><description><![CDATA[栈中的数据元素遵守后进先出LIFO（last in first out)的原则。压栈（push):栈的插入操作叫做进栈/压栈/入栈，入数据在栈顶。出栈（pop):栈的删除操作叫做出栈。]]></description><category></category></item><item><title><![CDATA[顺序表和链表补充]]></title><link>https://blog.youkuaiyun.com/dfzzh5/article/details/157844253</link><guid>https://blog.youkuaiyun.com/dfzzh5/article/details/157844253</guid><author>dfzzh5</author><pubDate>Sat, 07 Feb 2026 19:25:38 +0800</pubDate><description><![CDATA[思路：先查找中间节点（也是使用快慢指针，不过现在是快指针一次走两步，慢指针一次走一步，快指针走完时，慢指针就到了中点），将中间节点后的节点逆序，然后与中间节点前的节点一一比较，当有一个指针指向NULL就结束（或者值不相等）。加载链表的数据时，后面一长段的数据大部分无效，会产生数据污染，缓存利用率低。（先计算差距步，长的链表，指针先走差距步，两个指针再同时走，第一个相等就是交点）链表没有容量的概率（按需申请释放）。思路：使用快慢指针，快指针先走k步，再同时走fast和slow指针（快慢指针的相对距离为k),]]></description><category></category></item><item><title><![CDATA[复杂度概括]]></title><link>https://blog.youkuaiyun.com/dfzzh5/article/details/157476787</link><guid>https://blog.youkuaiyun.com/dfzzh5/article/details/157476787</guid><author>dfzzh5</author><pubDate>Wed, 28 Jan 2026 19:53:42 +0800</pubDate><description><![CDATA[F（N）=N^2+2*N+10   就是O（N^2)   2*N+10在N趋近于无穷时相比于N^2可以忽略不记，抓大头就只需要考虑N^2,这就是大O渐进表达法。算法的时间复杂度是一个函数，它定量描述了该算法的运行时间，一个算法所花费的时间与其中语句的执行次数成正比，算法中的基本操作的执行次数，为算法的时间复杂度。F(N）=2*N+100 就是O（N）这里我们也不考虑N前面的系数.(系数影响小，可忽略）立方阶：O（n^3) 如：n^3+2n^2+4n+6。常见的空间复杂度：O（1）、O（N）、O（N^2)]]></description><category></category></item><item><title><![CDATA[顺序表和链表]]></title><link>https://blog.youkuaiyun.com/dfzzh5/article/details/156913966</link><guid>https://blog.youkuaiyun.com/dfzzh5/article/details/156913966</guid><author>dfzzh5</author><pubDate>Tue, 13 Jan 2026 23:04:24 +0800</pubDate><description><![CDATA[从小点上可以分为带头/不带头、单向/双向、循环/不循环。结合起来总共2*2*2=8种，我们常说的单链表（不带头单向不循环链表）、双向链表（带头双向循环链表）。顺序表有一个应用就是我们常用的通讯录，一般功能包括初始化、销毁、插入（尾插、头插）、删除（尾删、头删）、查找、修改等，大家可以试试。链表也是线性表的一种，在物理结构上不是线性的，在逻辑结构上是线性的。链表是由一个一个的节点组成（包括数据和指向下一个节点的指针）。双向链表的结构(数据+指向下一个节点的指针+指向前一个节点的指针）]]></description><category></category></item><item><title><![CDATA[编译和链接]]></title><link>https://blog.youkuaiyun.com/dfzzh5/article/details/155195914</link><guid>https://blog.youkuaiyun.com/dfzzh5/article/details/155195914</guid><author>dfzzh5</author><pubDate>Mon, 24 Nov 2025 16:19:24 +0800</pubDate><description><![CDATA[源文件.c 和 头文件.h -->预处理-->中间文件.i-->编译-->中间文件.s-->汇编-->目标文件.o 和 链接库libc.a -->链接器-->可执行文件。带有副作用的宏参数：当宏参数在宏的定义中出现超过一次的时候，如果参数有副作用，表达式求值会出现永久性效果。通常包括声明和类型的匹配，类型的转换等。运行环境：程序载入内存中，调用main函数，使用一个运行时的堆栈（stack),也可以使用静态（static)内存，终止程序。但宏是没法调试的，每次调用宏的时候，一份宏定义的代码将插入到程序中。]]></description><category></category></item><item><title><![CDATA[文件操作的理解]]></title><link>https://blog.youkuaiyun.com/dfzzh5/article/details/155129231</link><guid>https://blog.youkuaiyun.com/dfzzh5/article/details/155129231</guid><author>dfzzh5</author><pubDate>Sat, 22 Nov 2025 16:32:21 +0800</pubDate><description><![CDATA[总结：程序通过打开文件，创建了一个和文件相关的流，为了维护流，同时创建了文件信息区，返回了一个文件指针，来找到文件信息区，流中的数据不是直接和文件交换，而是先放到缓存中再处理，以减少直接读写外部介质的次数，提高效率。每个被使用的文件都在内存中开辟了一个相应的文件信息区，用来存放文件的相关信息（如文件的名字，文件状态及文件当前的位置等），这些信息是保存在一个结构体变量中的。可以类比scanf.2.在读完文件后，需要继续写文件的时候，在写文件之前，使用fseek(),rewind()重新定位文件指示器的位置。]]></description><category></category></item><item><title><![CDATA[结构体的理解]]></title><link>https://blog.youkuaiyun.com/dfzzh5/article/details/154947009</link><guid>https://blog.youkuaiyun.com/dfzzh5/article/details/154947009</guid><author>dfzzh5</author><pubDate>Mon, 17 Nov 2025 15:33:06 +0800</pubDate><description><![CDATA[struct S3的总大小为16个字节.首先double占8个字节，那么占据的内存单元从偏移量为0的地址处到偏移量为7的地址处，char占一个字节，可以紧接着放在偏移量为8的地址处，int占4个字节，那么不能放在偏移量为9，10，11的地址处(不是4的倍数），也就是浪费这三个空间，找到偏移量为12的地址处，一直占据到偏移量为15的地址处，总共16个字节。位段的几个成员共有同一个字节，内存中每个字节分配一个地址，一个字节内部的bit位是没有地址的。在声明结构的时候，可以不完全的声明。]]></description><category></category></item><item><title><![CDATA[字符函数、字符串函数、内存函数]]></title><link>https://blog.youkuaiyun.com/dfzzh5/article/details/154902263</link><guid>https://blog.youkuaiyun.com/dfzzh5/article/details/154902263</guid><author>dfzzh5</author><pubDate>Sun, 16 Nov 2025 10:44:01 +0800</pubDate><description><![CDATA[strcmp 用来比较str1和str2指向的字符串，从两个字符串的第一个字符开始比较，如果两个字符的ASCII码值相等，就比较下一个字符，直到遇到不相等的两个字符或者字符串结束。memcmp 比较指定的两块内存块的内容，比较从ptr1和ptr2指针指向的位置开始，向后的num个字节，返回值与strcmp类似。strstr 查找str2指向的字符串在str1指向的字符串中第一次出现的位置（在一个字符串中查找子字符串）模拟实现：char*my_strcpy(char*dest,const char*src)]]></description><category></category></item><item><title><![CDATA[整数和浮点数在内存中的存储]]></title><link>https://blog.youkuaiyun.com/dfzzh5/article/details/154870836</link><guid>https://blog.youkuaiyun.com/dfzzh5/article/details/154870836</guid><author>dfzzh5</author><pubDate>Sat, 15 Nov 2025 11:40:19 +0800</pubDate><description><![CDATA[规定：对于32位的浮点数（float）：最高的一位存储符号位s,接着的8位存储指数E，剩下的23位存储有效数字M。对于64位的浮点数（double):最高的一位存储符号位s，接着的11位存储指数E，剩下的52位存储有效数字M。特别规定：我们知道计算机内部保存M的时候，默认M的第一位是1，因此可以舍去，只保存小数位，等读取时再把1加上去，所以可以保存24/53位有效数字。有符号的整数，三种表示方法均有符号位和数值位两部分，符号位都是用0表示正，用1表示负，最高位的一位是被当做符号位，剩余的都是数值位。]]></description><category></category></item><item><title><![CDATA[指针的总结]]></title><link>https://blog.youkuaiyun.com/dfzzh5/article/details/154598516</link><guid>https://blog.youkuaiyun.com/dfzzh5/article/details/154598516</guid><author>dfzzh5</author><pubDate>Sun, 09 Nov 2025 10:53:43 +0800</pubDate><description><![CDATA[指针变量的大小和类型是无关的，只要是指针类型的变量，在相同的平台下，大小都是相同的。我们现实生活中，以寝室为例，如果你想找到同栋的同学，你只需要知道他寝室的门牌号就行，这里门牌号就是编号，也表示同学所在的地址，在c语言中我们可以把指针理解为地址。硬件编址：32位机器有32根地址总线，每根线有两态，表示0，1（电脉冲有无），32根线能表示2的32次方种含义，每一种含义都代表一个地址。例：int*pa=&a  int*合起来是pa的类型，*是在说明pa是指针变量，pa指向的对象是int类型的。]]></description><category></category></item><item><title><![CDATA[基本版扫雷游戏]]></title><link>https://blog.youkuaiyun.com/dfzzh5/article/details/153867066</link><guid>https://blog.youkuaiyun.com/dfzzh5/article/details/153867066</guid><author>dfzzh5</author><pubDate>Sat, 25 Oct 2025 10:48:13 +0800</pubDate><description><![CDATA[接着打印一个9*9表格盘，这里需要用到for循环嵌套打印。我们知道扫雷游戏不仅需要找雷，如果遇到不是雷的地方还要显示周围8格雷的数量（以排查位置为中心，设为（x,y),将周围用x+1 x-1 x y+1 y y-1的组合坐标表示，然后相加表示总和，最后减去8*'0',得到的数+'0'就是表示相应的字符数字，显示数字到show里面），而当我们排查表格角落处，我们发现排查周围会超出我们表格的边界（也就是越界了）这时我们需要扩充表格盘为11*11（实际使用的还是9*9，就是在11*11中挖出一个9*9）。]]></description><category></category></item><item><title><![CDATA[c语言 分支和循环]]></title><link>https://blog.youkuaiyun.com/dfzzh5/article/details/153515175</link><guid>https://blog.youkuaiyun.com/dfzzh5/article/details/153515175</guid><author>dfzzh5</author><pubDate>Sat, 18 Oct 2025 10:58:33 +0800</pubDate><description><![CDATA[假设有一个圆，我们将它分为不均等的三份(条件的范围一般不同），第一份我们可看作if的条件范围，第二份可以看作else if的条件范围，第三份是else的条件范围。switch表达式的值一旦满足某个case后面的常量，则会一直进行后面的case(不再判断值），但我们往往只需要一个case后面的语句，那么我们需要在case语句的末尾加break（也可根据逻辑要求判断是否加break），表示跳出switch语句。while（条件）如果满足条件（结果为真），就一直进行，直到不满足（结果为假），结束。]]></description><category></category></item></channel></rss>