<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[GRL8013的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/GRL8013</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; GRL8013]]></copyright><item><title><![CDATA[C++ | string详解]]></title><link>https://blog.youkuaiyun.com/GRL8013/article/details/138811352</link><guid>https://blog.youkuaiyun.com/GRL8013/article/details/138811352</guid><author>GRL8013</author><pubDate>Mon, 13 May 2024 17:31:51 +0800</pubDate><description><![CDATA[其中提一下第三种，pos为子串的位置，len子串的长度，若len大于从子串pos位置开始后面字符总数，则表示初始化到子串结尾即可，比如我们要用 “hello world” 初始化字符串，若pos为6，len为20，则用world初始化字符串s1；由于各国语言的差异，可能存在一个字节不能够一一对应文字的情况，不像英文由26个英文字母组成单词，只需保存26个字母即可，而实际上许多国家的语言并不能由一字节的空间能表示出来，因此由不同储存方式繁衍出了 UTF-8、UTF-16、UTF-32，其中数字代码比特位；]]></description><category></category></item><item><title><![CDATA[二叉树与堆]]></title><link>https://blog.youkuaiyun.com/GRL8013/article/details/137290053</link><guid>https://blog.youkuaiyun.com/GRL8013/article/details/137290053</guid><author>GRL8013</author><pubDate>Tue, 02 Apr 2024 21:23:38 +0800</pubDate><description><![CDATA[树：树与前面的顺序表、单链表不一样，树是一个非线性结构，它可能存在着1对多的情况，不想线性表那样具有一对一的关系；]]></description><category></category></item><item><title><![CDATA[进阶--栈和队列（1）]]></title><link>https://blog.youkuaiyun.com/GRL8013/article/details/137150790</link><guid>https://blog.youkuaiyun.com/GRL8013/article/details/137150790</guid><author>GRL8013</author><pubDate>Fri, 29 Mar 2024 17:49:11 +0800</pubDate><description><![CDATA[压栈：栈的插入操作叫做进栈/压栈/入栈，入数据在栈顶。只允许在一端进行插入数据操作，在另一端进行删除数据操作的特殊线性表，队列具有先进先出FIFO(First In First Out)入队列：进行插入操作的一端称为队尾出队列：进行删除操作的一端称为队头。采用顺序存储的栈称为顺序栈，它利用一组地址连续的存储单元存放自栈底到栈顶的数据元素，同时附设一个指针（top）指示当前栈顶元素的位置。队列也可以数组和链表的结构实现，使用链表的结构实现更优一些，因为如果使用数组的结构，出队列在数。]]></description><category></category></item><item><title><![CDATA[顺序表（休息）]]></title><link>https://blog.youkuaiyun.com/GRL8013/article/details/136824917</link><guid>https://blog.youkuaiyun.com/GRL8013/article/details/136824917</guid><author>GRL8013</author><pubDate>Mon, 18 Mar 2024 22:57:14 +0800</pubDate><description><![CDATA[今天不想写，专心学习。]]></description><category></category></item><item><title><![CDATA[顺序表的插入]]></title><link>https://blog.youkuaiyun.com/GRL8013/article/details/136793017</link><guid>https://blog.youkuaiyun.com/GRL8013/article/details/136793017</guid><author>GRL8013</author><pubDate>Sun, 17 Mar 2024 23:15:45 +0800</pubDate><description><![CDATA[代码解析

将数据存在x中



判断i的位置是否合法，和判断表是否已满。



若插入的位置为当顺序表的最后，则直接插入



若插入的位置不为最后一位则从最后一位开始各向后移一位



最后将x插入，并将表长+1



插入过程图示


]]></description><category></category></item><item><title><![CDATA[链表--基础概念]]></title><link>https://blog.youkuaiyun.com/GRL8013/article/details/136769501</link><guid>https://blog.youkuaiyun.com/GRL8013/article/details/136769501</guid><author>GRL8013</author><pubDate>Sat, 16 Mar 2024 20:49:37 +0800</pubDate><description><![CDATA[一、链表的概念定义：链表是一种物理存储上非连续，数据元素的逻辑顺序通过链表中的指针链接次序，实现的一种线性存储结构。特点：链表由一系列节点（链表中每一个元素称为节点）组成，节点在运行时动态生成 （malloc），每个节点包括两个部分：一个是存储数据元素的数据域另一个是存储下一个节点地址的指针域。]]></description><category></category></item><item><title><![CDATA[顺序表--查找数据]]></title><link>https://blog.youkuaiyun.com/GRL8013/article/details/136748020</link><guid>https://blog.youkuaiyun.com/GRL8013/article/details/136748020</guid><author>GRL8013</author><pubDate>Fri, 15 Mar 2024 19:23:51 +0800</pubDate><description><![CDATA[顺序表要预先分配空间，会导致空间闲置或溢出，采用随机存取，时间复杂度为O(1),但删除和插入要一项一项的移动，时间复杂度为O(n)。]]></description><category></category></item><item><title><![CDATA[数据结构--顺序表插入与删除]]></title><link>https://blog.youkuaiyun.com/GRL8013/article/details/136724526</link><guid>https://blog.youkuaiyun.com/GRL8013/article/details/136724526</guid><author>GRL8013</author><pubDate>Thu, 14 Mar 2024 23:07:26 +0800</pubDate><description><![CDATA[顺序表的删除与插入差不多，区别就在于插入是往后移，而删除是往后移。根据需求，也可以用一个Boox *来保存删除的数据。]]></description><category></category></item><item><title><![CDATA[进阶--复杂度讲解（数据结构）]]></title><link>https://blog.youkuaiyun.com/GRL8013/article/details/136692316</link><guid>https://blog.youkuaiyun.com/GRL8013/article/details/136692316</guid><author>GRL8013</author><pubDate>Wed, 13 Mar 2024 21:47:27 +0800</pubDate><description><![CDATA[算法（Algorithm）是指解题方案的准确而完整的描述，是一系列解决问题的清晰指令，算法代表着用系统的方法描述解决问题的策略机制。1.2衡量算法好坏的标准这是一个通过函数递归算法实现斐波那契数列的代码你认为这样的算法是否好呢？让我们带着疑惑来阅读本篇文章，相信你读完后一定会对此算法有所理解，也希望你能有所收获。当我们写完的算法代码被编译成指令后运行程序，这期间必定消耗了时间和空间（内存空间）。通常衡量一个算法的好坏是以时间维度和空间维度这两个标准来衡量的。]]></description><category></category></item><item><title><![CDATA[文件缓冲区]]></title><link>https://blog.youkuaiyun.com/GRL8013/article/details/136638392</link><guid>https://blog.youkuaiyun.com/GRL8013/article/details/136638392</guid><author>GRL8013</author><pubDate>Mon, 11 Mar 2024 23:26:12 +0800</pubDate><description><![CDATA[ANSIC 标准采用“缓冲文件系统”处理的数据文件的，所谓缓冲文件系统是指系统自动地在内存中为程序 中每一个正在使用的文件开辟一块“文件缓冲区”。从内存向磁盘输出数据会先送到内存中的缓冲区，装 满缓冲区后才一起送到磁盘上。如果从磁盘向计算机读入数据，则从磁盘文件中读取数据输入到内存缓 冲区（充满缓冲区），然后再从缓冲区逐个地将数据送到程序数据区（程序变量等）。缓冲区的大小根 据C编译系统决定的。因为有缓冲区的存在，C语言在操作文件的时候，需要做刷新缓冲区或者在文件操作结束的时候关闭文 件。]]></description><category></category></item><item><title><![CDATA[进阶--联合]]></title><link>https://blog.youkuaiyun.com/GRL8013/article/details/136548854</link><guid>https://blog.youkuaiyun.com/GRL8013/article/details/136548854</guid><author>GRL8013</author><pubDate>Sun, 10 Mar 2024 12:00:00 +0800</pubDate><description><![CDATA[联合也是一种特殊的自定义类型 这种类型定义的变量也包含一系列的成员，特征是这些成员公用同一块空间（所以联合也叫共用体）。]]></description><category></category></item><item><title><![CDATA[进阶--枚举]]></title><link>https://blog.youkuaiyun.com/GRL8013/article/details/136548633</link><guid>https://blog.youkuaiyun.com/GRL8013/article/details/136548633</guid><author>GRL8013</author><pubDate>Sat, 09 Mar 2024 12:00:00 +0800</pubDate><description><![CDATA[以上定义的 enum Day ， enum Sex ， enum Color 都是枚举类型。{}中的内容是枚举类型的可能取值，也叫 枚举常量。这些可能取值都是有值的，默认从0开始，一次递增1，当然在定义的时候也可以赋初值。]]></description><category></category></item><item><title><![CDATA[进阶--回调函数]]></title><link>https://blog.youkuaiyun.com/GRL8013/article/details/136548532</link><guid>https://blog.youkuaiyun.com/GRL8013/article/details/136548532</guid><author>GRL8013</author><pubDate>Fri, 08 Mar 2024 12:00:00 +0800</pubDate><description><![CDATA[回调函数就是一个通过函数指针调用的函数。如果你把函数的指针（地址）作为参数传递给另一个 函数，当这个指针被用来调用其所指向的函数时，我们就说这是回调函数。回调函数不是由该函数 的实现方直接调用，而是在特定的事件或条件发生时由另外的一方调用的，用于对该事件或条件进 行响应。注意：这里第一次使用 void* 的指针，讲解 void* 的作用。使用回调函数，模拟实现qsort（采用冒泡的方式）。]]></description><category></category></item><item><title><![CDATA[进阶--指针的进阶（字符指针和指针数组）]]></title><link>https://blog.youkuaiyun.com/GRL8013/article/details/136548331</link><guid>https://blog.youkuaiyun.com/GRL8013/article/details/136548331</guid><author>GRL8013</author><pubDate>Thu, 07 Mar 2024 22:55:10 +0800</pubDate><description><![CDATA[特别容易让人以为是把字符串 hello bit 放到字符指针 pstr 里了，但是/本质是把字符串 hello bit. 首字符的地址放到了pstr中。在《指针》章节我们也学了指针数组，指针数组是一个存放指针的数组。这里我们再复习一下，下面指针数组是什么意思？代码 const char* pstr = "hello bit."在指针的类型中我们知道有一种指针类型为字符指针 char*;]]></description><category></category></item><item><title><![CDATA[进阶--宏的定义]]></title><link>https://blog.youkuaiyun.com/GRL8013/article/details/136520195</link><guid>https://blog.youkuaiyun.com/GRL8013/article/details/136520195</guid><author>GRL8013</author><pubDate>Wed, 06 Mar 2024 23:11:33 +0800</pubDate><description><![CDATA[宏可以看作为一些命令的集合。它是一种预处理器指令，在预编译阶段将宏名替换为后面的替换体。而#define可以用来定义宏：#define 机制包括了一个规定，允许把参数替换到文本中，这种实现通常称为宏（macro）或定义宏（define macro）。宏的声明方式：我们执行下面这段代码：他的实际执行结构为6+1*6+1->即为13这说明了什么？这印证了上面所说的宏是把参数替换到文本中，也就是宏直接吧6+1替换掉了x直接带入了后面的表达式当中了！对此，根据我们原来的用意。]]></description><category></category></item><item><title><![CDATA[进阶--文本和二进制]]></title><link>https://blog.youkuaiyun.com/GRL8013/article/details/136487987</link><guid>https://blog.youkuaiyun.com/GRL8013/article/details/136487987</guid><author>GRL8013</author><pubDate>Tue, 05 Mar 2024 20:56:37 +0800</pubDate><description><![CDATA[牢记：在文件读取过程中，不能用feof函数的返回值直接用来判断文件的是否结束。而是应用于当文件读取结束的时候，判断是读取失败结束，还是遇到文件尾结束。如有整数10000，如果以ASCII码的形式输出到磁盘，则磁盘占5个字节（每一个字符一个字节），而二进制形式输出，则在磁盘上只占4个字节。字符一律以ASCII形式存储，数值型数据既可以用ASCII形式存储，也可以使用二进制形式存储。因为有缓冲区的存在，C语言在操作文件的时候，需要做刷新缓冲区或者在文件操作结束的时候关闭文件。如果不做，可能导致读写文件的问题。]]></description><category></category></item><item><title><![CDATA[进阶--柔性数组]]></title><link>https://blog.youkuaiyun.com/GRL8013/article/details/136454600</link><guid>https://blog.youkuaiyun.com/GRL8013/article/details/136454600</guid><author>GRL8013</author><pubDate>Mon, 04 Mar 2024 16:21:42 +0800</pubDate><description><![CDATA[例如：]]></description><category></category></item><item><title><![CDATA[进阶--动态内存管理]]></title><link>https://blog.youkuaiyun.com/GRL8013/article/details/136434162</link><guid>https://blog.youkuaiyun.com/GRL8013/article/details/136434162</guid><author>GRL8013</author><pubDate>Sun, 03 Mar 2024 17:31:40 +0800</pubDate><description><![CDATA[有时候我们需要的空间大小在程序运行的时候，数组的编译时开辟空间的方式不能满足。这个时候只能尝试动态内存开辟了。c语言提供了另外一个函数free，专门是用来做动态内存释放和回收发，函数原型如下：]]></description><category></category></item><item><title><![CDATA[进阶--位段]]></title><link>https://blog.youkuaiyun.com/GRL8013/article/details/136412374</link><guid>https://blog.youkuaiyun.com/GRL8013/article/details/136412374</guid><author>GRL8013</author><pubDate>Sat, 02 Mar 2024 12:35:22 +0800</pubDate><description><![CDATA[例如冒号后的数字表示所需的空间，a要2bit，b要5bit。那么为什么怎么少呢？因为实际在写代码时有一些变量的值，取值不多，如int  flag表示真假，取值就只有1 or 0。所以得出，位段是可以节省空间的。A就是一个位段类型，那么位段A的大小是多少呢？结果如下：举个例子上图中字节不够，便是以4个字节为单位进行开辟的，上图也可以看出有15个字节被浪费，那么同时再举个例子，看看是如何分配内存空间的。如果上图有空余1bit被利用那么是不是只用两个字节，那么最后的结果究竟是3字节还是2字节呢？]]></description><category></category></item><item><title><![CDATA[进阶--结构体]]></title><link>https://blog.youkuaiyun.com/GRL8013/article/details/136407160</link><guid>https://blog.youkuaiyun.com/GRL8013/article/details/136407160</guid><author>GRL8013</author><pubDate>Fri, 01 Mar 2024 22:24:13 +0800</pubDate><description><![CDATA[但需要注意的是，对齐会增加一定的开销，例如填充字节需要占用内存空间，所以如果结构体中数据成员的大小很小，对齐带来的好处可能会被抵消。结构体的自引用指的是结构体类型中包含一个指向自身类型的指针成员变量。常见的对齐规则是按照数据类型的大小进行对齐，在结构体中，如果一个数据成员的大小小于对齐值，则会在该数据成员后填充一定的字节，使得下一个数据成员能够按照对齐值对齐。4. 如果嵌套了结构体的情况，嵌套的结构体对齐到自己的最大对齐数的整数倍处，结构体的整 体大小就是所有最大对齐数（含嵌套结构体的对齐数）的整数倍。]]></description><category></category></item></channel></rss>