- 博客(59)
- 收藏
- 关注
原创 C++ typedef的使用
typedef是C和C++编程语言中的一个关键字,用于为已有的数据类型创建一个新的名字。时需要注意的是,它只是为已存在的类型创建了一个新的名字,并没有创建新的类型。
2024-04-24 21:29:07
779
原创 使用select连接多个客户端
是一个系统调用,它允许程序监视多个文件描述符(通常是网络套接字)的读写事件,等待直到至少一个文件描述符准备好进行某种操作(例如,读取、写入或异常条件)。
2024-04-23 11:28:30
510
原创 【网络通信】TCP三次握手、四次挥手
TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。在TCP/IP协议族中,TCP协议负责在两个网络节点之间建立可靠的连接,并保证数据包的顺序传输和数据的完整性。
2024-04-23 10:43:00
1454
原创 【数据结构】单链表的尾插法
尾插法是一种在链表末尾插入新元素的方法,它的核心思想是保持链表的尾部指针(或称为尾节点),这样可以在常数时间内完成尾部插入操作。在双向链表或循环链表中,尾插法还需要维护额外的指针,例如前驱指针和循环链表的头节点指针,但基本思想是相同的:找到尾部并在其后面插入新节点。尾插法的优点是插入操作的时间复杂度为O(1),因为不需要遍历链表来找到插入位置,只需要修改尾部节点的。:将新节点插入到当前尾部节点的后面,并更新尾部指针(或尾部节点的。指针)以指向新节点。
2024-04-22 23:48:08
1670
1
原创 【排序算法】快速排序
快速排序的基本思想是选择一个基准元素(通常是序列中的第一个元素),然后将序列中的其他元素分为两个子序列,一个子序列中的所有元素都比基准元素小,另一个子序列中的所有元素都比基准元素大。快速排序的效率在平均状况下是非常高的,其时间复杂度为O(n log n),但最坏情况下的时间复杂度为O(n^2)。最坏情况通常是由于基准元素的选择不当造成的,例如序列已经是有序的情况下,选择第一个元素作为基准。快速排序是一个不稳定的排序算法,因为在排序过程中,相等的元素的顺序可能会改变。
2024-04-22 23:22:17
722
原创 【数据结构】霍夫曼树
霍夫曼树(Huffman Tree),又称最优二叉树,是一种带权路径长度最短的二叉树。在霍夫曼树中,叶子节点的权值通常代表字符出现的频率,非叶子节点的权值是其子节点权值的和。霍夫曼树广泛应用于数据压缩,尤其是霍夫曼编码,它是一种基于字符出现频率的变长前缀编码。:首先,将给定的字符和它们对应的权值(频率)放入一个集合中。:每次从集合中选出两个具有最小权值的节点,将它们合并成一个新节点,新节点的权值是这两个子节点权值的和。:将选出的两个最小权值节点从集合中删除,并将新创建的节点添加到集合中。
2024-04-21 22:27:18
1147
原创 【数据结构】冒泡排序
冒泡排序的平均和最坏时间复杂度都是 O(n^2),其中 n 是数组的长度。这是因为它需要比较所有相邻元素对,并且在最坏的情况下,每个元素都需要移动到数组的另一端。不过,冒泡排序有一个优点,就是它是稳定的排序算法,即相等的元素在排序后保持它们的原始顺序。此外,如果在一轮比较中没有发生任何交换,冒泡排序可以提前终止,这提供了一种优化手段。算法的每一步都会比较相邻的两个元素,如果它们的顺序错误(即第一个元素比第二个元素大),则交换它们。这样,每经过一轮比较和交换,数组中最大的元素就会“冒泡”到数组的最后位置。
2024-04-21 22:19:51
771
原创 【数据结构】插值排序
插值排序(Interpolation Search)是一种用于在有序数组中查找特定元素的搜索算法。它是二分查找算法的改进版本,通过使用当前查找值与数组中值的比例来估计下一次查找的位置,而不是简单地取中点。
2024-04-20 23:05:34
1316
原创 【数据结构】选择排序
选择排序的工作原理是在每次迭代中找到未排序部分的最小元素,并将其与未排序部分的第一个元素交换。这样,每次迭代后,排序部分的边界就会向右移动一位。它的工作原理是不断地选择剩余元素中的最小(或最大)元素,放到已排序的序列的末尾,直到排序完整个序列。
2024-04-20 22:57:50
651
1
原创 【数据结构】分块查找
1.索引表分块查找(也称为索引顺序查找)是一种改进的顺序查找方法,它将查找表,并要求,但块与块之间不要求有序。每个块内的最大元素构成一个索引表。分块查找的过程是先查找索引,确定待查元素所在的块,然后在该块内进行顺序查找。分块查找的平均查找长度介于顺序查找和二分查找之间,适用于查找次数相对较少,而插入和删除操作频繁的线性表。:首先将查找表分成若干个块,每个块内的元素不必有序,但块间必须是有序的,即第i块的每个元素都必须小于第i+1块的所有元素。
2024-04-19 19:44:24
1433
1
原创 【数据结构】二分查找
二分查找(Binary Search)是一种高效的查找算法,它在一个有序数组中查找特定的元素。二分查找的工作原理是不断将数组分成两半,比较中间元素与目标值,根据比较结果选择左半部分或右半部分继续查找,直到找到目标元素或数组被完全分割。,其中n是数组的长度。这是因为每次查找都会将查找范围减半,所以查找的次数与n的对数成正比
2024-04-18 21:42:32
819
2
原创 【数据结构】队列的使用方法
队列(Queue)是另一种基本的线性数据结构,它允许在一端进行插入操作,而在另一端进行删除操作。队列的特点是先进先出(First In First Out, FIFO),即最先进入队列的元素最先被取出。队列可以用数组来实现,也可以用链表来实现。用数组实现的队列称为顺序队列,用链表实现的队列称为链式队列。
2024-04-18 20:42:17
1368
原创 【数据结构】栈的使用
栈(Stack)是一种基本的数据结构,它是一种线性表,但只允许在固定的一端进行插入和删除操作,这一端称为栈顶(top)。栈的特点是后进先出(Last In First Out, LIFO),即最后进入栈的元素最先被取出。栈可以用数组来实现,也可以用链表来实现。用数组实现的栈称为顺序栈,用链表实现的栈称为链式栈。
2024-04-17 21:21:13
1248
1
原创 Shell脚本
脚本语⾔的特点(解释型语⾔): 脚本语⾔不需要编译,脚本语⾔的解析器可以直接阅读脚本语⾔并按照指 令执⾏。解析器本身就是⼀个程序,被CPU执⾏的程序。脚本语⾔的特点 注定脚本语⾔的执⾏效率不可能⽐编译型语⾔⾼。
2024-04-15 21:56:21
462
原创 C++模板讲解
模板又称为泛型编程(可以将类型(基本类型、自定义类型)当做参数, 进行传递)特点:只适用于函数体相同 参数个数相同 类型不同的情况。建立一个通用函数其函数返回值类型和形参类型不具体制定 而是一个虚拟类型return a/b;建立一个通用函数其函数返回值类型和形参类型不具体制定 而是一个虚拟类型。
2024-04-13 23:30:10
410
原创 C++运算符重载
1.重载:给运算符重新赋予新的含义,在类的内部定义的运算符重载和成员函数是一样的2.重载方法:定义一个重载运算符的函数 在需要执行被重载的运算符时,系统会自动调用该函数;3.重载运算符格式:函数类型operator运算符名称形参列表例子:4.运算符重载的参数个数由运算符本身决定,但是类型可以自定义5.由运算符的左值调用运算符的重载6.如果类没有重载运算符,类的对象不能进行运算符的操作7.运算符重载虽然对返回值类型和参数类型没有要求,但是我们依然不能随便定义;
2024-04-12 21:47:39
372
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人