-
Linux下的socket演练程序
所属栏目:[语言] 日期:2022-07-10 热度:70
和C语言教程一样,我们从一个简单的Hello World!程序切入 socket 编程。 本节演示了 Linux 下的代码,server.cpp 是服务器端代码,client.cpp 是客户端代码,要实现的功能是:客户端从服务器读取一个字符串并打印出来。 服务器端代码 server.cpp: #includ[详细]
-
Windows之socket演示程序
所属栏目:[语言] 日期:2022-07-10 热度:123
上节演示了 Linux 下的 socket 程序,这节来看一下 Windows 下的 socket 程序。同样,server.cpp 为服务器端代码,client 为客户端代码。 服务器端代码 server.cpp: #include stdio.h #include winsock2.h #pragma comment (lib, ws2_32.lib) //加载 ws2_[详细]
-
socket 函数用法详解 创造套接字
所属栏目:[语言] 日期:2022-07-10 热度:64
不管是 Windows 还是 Linux,都使用 socket() 函数来创建套接字。socket() 在两个平台下的参数是相同的,不同的是返回值。 在《socket是什么》一节中我们讲到了 Windows 和 Linux 在对待 socket 方面的区别。 Linux 中的一切都是文件,每个文件都有一个整[详细]
-
多路平衡归并排序 胜者树 败者树 算法细说
所属栏目:[语言] 日期:2022-07-10 热度:76
通过上一节对于外部排序的介绍得知:对于外部排序算法来说,其直接影响算法效率的因素为读写外存的次数,即次数越多,算法效率越低。若想提高算法的效率,即减少算法运行过程中读写外存的次数,可以增加 k 路平衡归并中的 k 值。 但是经过计算得知,如果毫[详细]
-
置换选择排序算法说明
所属栏目:[语言] 日期:2022-07-10 热度:54
上一节介绍了增加 k-路归并排序中的 k 值来提高外部排序效率的方法,而除此之外,还有另外一条路可走,即减少初始归并段的个数,也就是本章第一节中提到的减小 m 的值。 m 的求值方法为:m=n/l(n 表示为外部文件中的记录数,l 表示初始归并段中包含的记录[详细]
-
最佳归并树解析
所属栏目:[语言] 日期:2022-07-10 热度:118
通过上一节对置换-选择排序算法的学习了解到,通过对初始文件进行置换选择排序能够获得多个长度不等的初始归并段,相比于按照内存容量大小对初始文件进行等分,大大减少了初始归并段的数量,从而提高了外部排序的整体效率。 本节带领大家思考一个问题:无[详细]
-
何为查找表
所属栏目:[语言] 日期:2022-07-10 热度:108
在日常生活中,几乎每天都要进行一些查找的工作,在电话簿中查阅某个人的电话号码;在电脑的文件夹中查找某个具体的文件等等。本节主要介绍用于查找操作的数据结构查找表。 查找表是由同一类型的数据元素构成的集合。例如电话号码簿和字典都可以看作是一张[详细]
-
顺序查找算法解说 包含C语言实现代码
所属栏目:[语言] 日期:2022-07-10 热度:176
通过前面对静态查找表的介绍,静态查找表即为只做查找操作的查找表。 静态查找表既可以使用顺序表表示,也可以使用链表结构表示。虽然一个是数组、一个链表,但两者在做查找操作时,基本上大同小异。 本节以静态查找表的顺序存储结构为例做详细的介绍。 顺[详细]
-
二分查找 折半寻找 算法详解 C语言实现
所属栏目:[语言] 日期:2022-07-10 热度:135
折半查找,也称二分查找,在某些情况下相比于顺序查找,使用折半查找算法的效率更高。但是该算法的使用的前提是静态查找表中的数据必须是有序的。 例如,在{5,21,13,19,37,75,56,64,88 ,80,92}这个查找表使用折半查找算法查找数据之前,需要首先对该表中的[详细]
-
二叉排序树 二叉查找树 及C语言达成
所属栏目:[语言] 日期:2022-07-10 热度:114
前几节介绍的都是有关静态查找表的相关知识,从本节开始介绍另外一种查找表动态查找表。 动态查找表中做查找操作时,若查找成功可以对其进行删除;如果查找失败,即表中无该关键字,可以将该关键字插入到表中。 动态查找表的表示方式有多种,本节介绍一种[详细]
-
平衡二叉树 AVL树 与C语言实现
所属栏目:[语言] 日期:2022-07-10 热度:97
上一节介绍如何使用二叉排序树实现动态查找表,本节介绍另外一种实现方式平衡二叉树。 平衡二叉树,又称为 AVL 树。实际上就是遵循以下两个特点的二叉树: 每棵子树中的左子树和右子树的深度差不能超过 1; 二叉树中每棵子树都要求是平衡二叉树; 其实就是[详细]
-
哈希表 散列表 详解 包含哈希表处理冲突的方式
所属栏目:[语言] 日期:2022-07-10 热度:116
前面介绍了静态查找表以及动态查找表中的一些查找方法,其查找的过程都无法避免同查找表中的数据进行比较,查找算法的效率很大程度取决于同表中数据的查找次数。 而本节所介绍的哈希表可以通过关键字直接找到数据的存储位置,不需要进行任何的比较,其查找[详细]
-
插入排序算法及C语言做成
所属栏目:[语言] 日期:2022-07-10 热度:56
插入排序算法是所有排序方法中最简单的一种算法,其主要的实现思想是将数据按照一定的顺序一个一个的插入到有序的表中,最终得到的序列就是已经排序好的数据。 直接插入排序是插入排序算法中的一种,采用的方法是:在添加新的记录时,使用顺序查找的方式找[详细]
-
折半插入排序算法 C语言代码达成
所属栏目:[语言] 日期:2022-07-10 热度:53
上一节介绍了直接插入排序算法的理论实现和具体的代码实现,如果你善于思考就会发现该算法在查找插入位置时,采用的是顺序查找的方式,而在查找表中数据本身有序的前提下,可以使用折半查找来代替顺序查找,这种排序的算法就是折半插入排序算法。 该算法的[详细]
-
2路插入排序算法说明
所属栏目:[语言] 日期:2022-07-10 热度:74
2-路插入排序算法是在折半插入排序的基础上对其进行改进,减少其在排序过程中移动记录的次数从而提高效率。 具体实现思路为:另外设置一个同存储记录的数组大小相同的数组 d,将无序表中第一个记录添加进 d[0] 的位置上,然后从无序表中第二个记录开始,同[详细]
-
内存紧缩 内存碎片化处置
所属栏目:[语言] 日期:2022-07-10 热度:174
前边介绍的有关动态内存管理的方法,无论是边界标识法还是伙伴系统,但是以将空闲的存储空间链接成一个链表,即可利用空间表,对存储空间进行分配和回收。 本节介绍另外一种动态内存管理的方法,使用这种方式在整个内存管理过程中,不管哪个时间段,所有未[详细]
-
串的定长顺序存储构架
所属栏目:[语言] 日期:2022-07-09 热度:58
我们知道,顺序存储结构(顺序表)的底层实现用的是数组,根据创建方式的不同,数组又可分为静态数组和动态数组,因此顺序存储结构的具体实现其实有两种方式。 通常所说的数组都指的是静态数组,如 str[10],静态数组的长度是固定的。与静态数组相对应的,[详细]
-
串的堆分配存储框架
所属栏目:[语言] 日期:2022-07-09 热度:69
串的堆分配存储,其具体实现方式是采用动态数组存储字符串。 通常,编程语言会将程序占有的内存空间分成多个不同的区域,程序包含的数据会被分门别类并存储到对应的区域。拿 C 语言来说,程序会将内存分为 4 个区域,分别为堆区、栈区、数据区和代码区,其[详细]
-
串的块链存储构造
所属栏目:[语言] 日期:2022-07-09 热度:80
串的块链存储,指的是使用链表结构存储字符串。 链表各节点存储数据个数的多少可参考以下几个因素: 串的长度和存储空间的大小:若串包含数据量很大,且链表申请的存储空间有限,此时应尽可能的让各节点存储更多的数据,提高空间的利用率(每多一个节点,[详细]
-
BF算法 串模式匹配算法 C语言解说
所属栏目:[语言] 日期:2022-07-09 热度:118
串的模式匹配算法,通俗地理解,是一种用来判断两个串之间是否具有主串与子串关系的算法。 主串与子串:如果串 A(如 shujujiegou)中包含有串 B(如 ju),则称串 A 为主串,串 B 为子串。主串与子串之间的关系可简单理解为一个串 包含 另一个串的关系。[详细]
-
什么叫做数组存储结构
所属栏目:[语言] 日期:2022-07-09 热度:89
前面学习数据结构的过程中,总是使用数组作为顺序表的底层实现,给我们一种 数据结构中,数组的作用就是实现顺序表 的错误认识。其实,数组的作用远不止于此。 本节将从数据结构的角度讲解数组存储结构。 本节所讲的数组,要将其视为一种存储结构,与平时[详细]
-
数组的排序存储 C语言版
所属栏目:[语言] 日期:2022-07-09 热度:145
数组作为一种线性存储结构,对存储的数据通常只做查找和修改操作,因此数组结构的实现使用的是顺序存储结构。 要知道,对数组中存储的数据做插入和删除操作,算法的效率是很差的。 通过以上内容,我们掌握了将多维数组存储在一维内存空间的方法。那么,后[详细]
-
矩阵 稀疏矩阵 压缩存储 3种方案
所属栏目:[语言] 日期:2022-07-09 热度:143
数据结构中,提供针对某些特殊矩阵的压缩存储结构。 矩阵中有两条对角线,其中的对角线称为主对角线,另一条从左下角到右上角的对角线为副对角线。对称矩阵指的是各数据元素沿主对角线对称的矩阵。 结合数据结构压缩存储的思想,我们可以使用一维数组存储[详细]
-
三元组顺序表 稀疏矩阵的三元组表示及 C语言 做成
所属栏目:[语言] 日期:2022-07-09 热度:187
本节介绍稀疏矩阵的三元组顺序表压缩存储方式。 通过《矩阵的压缩存储》一节我们知道,稀疏矩阵的压缩存储,至少需要存储以下信息: 矩阵中各非 0 元素的值,以及所在矩阵中的行标和列标; C 语言中,三元组需要用结构体实现,如下所示: //三元组结构体 t[详细]
-
行逻辑链接的顺序表 压缩存储稀疏矩阵 细说
所属栏目:[语言] 日期:2022-07-09 热度:122
前面学习了如何使用三元组顺序表存储稀疏矩阵,其实现过程就是将矩阵中各个非 0 元素的行标、列标和元素值以三元组的形式存储到一维数组中。通过研究实现代码你会发现,三元组顺序表每次提取指定元素都需要遍历整个数组,运行效率很低。 本节将学习另一种[详细]