-
堆排序算法C语言细说
所属栏目:[语言] 日期:2022-07-11 热度:192
在学习堆排序之前,首先需要了解堆的含义:在含有 n 个元素的序列中,如果序列中的元素满足下面其中一种关系时,此序列可以称之为堆。 ki k2i 且 ki k2i+1(在 n 个记录的范围内,第 i 个关键字的值小于第 2*i 个关键字,同时也小于第 2*i+1 个关键字) ki k[详细]
-
何为外部排序算法
所属栏目:[语言] 日期:2022-07-11 热度:192
上一章介绍了很多排序算法,插入排序、选择排序、归并排序等等,这些算法都属于内部排序算法,即排序的整个过程只是在内存中完成。而当待排序的文件比内存的可使用容量还大时,文件无法一次性放到内存中进行排序,需要借助于外部存储器(例如硬盘、U盘、光盘[详细]
-
socket是啥 套接字是什么
所属栏目:[语言] 日期:2022-07-10 热度:178
网络编程就是编写程序使两台联网的计算机相互交换数据。这就是全部内容了吗?是的!网络编程要比想象中的简单许多。 我们把插头插到插座上就能从电网获得电力供应,同样,为了与远程计算机进行数据传输,需要连接到因特网,而 socket 就是用来连接到因特网的[详细]
-
套接字有哪些类别 socket有哪些类型
所属栏目:[语言] 日期:2022-07-10 热度:58
这个世界上有很多种套接字(socket),比如 DARPA Internet 地址(Internet 套接字)、本地节点的路径名(Unix套接字)、CCITT X.25地址(X.25 套接字)等。但本教程只讲第一种套接字Internet 套接字,它是最具代表性的,也是最经典最常用的。以后我们提及套[详细]
-
OSI网络七层模型简明教案
所属栏目:[语言] 日期:2022-07-10 热度:180
如果你读过计算机专业,或者学习过网络通信,那你一定听说过 OSI 模型,它曾无数次让你头大。OSI 是 Open System Interconnection 的缩写,译为开放式系统互联。 给数据加包装的过程,实际上就是在数据的头部增加一个标志(一个数据块),表示数据经过了这一[详细]
-
IP、MAC和端口号 网络通信中确认身份信息的几元素
所属栏目:[语言] 日期:2022-07-10 热度:86
在茫茫的互联网海洋中,要找到一台计算机非常不容易,有三个要素必须具备,它们分别是 IP 地址、MAC 地址和端口号。 IP地址 IP地址是 Internet Protocol Address 的缩写,译为网际协议地址。 目前大部分软件使用 IPv4 地址,但 IPv6 也正在被人们接受,尤其[详细]
-
Linux下的socket演练程序
所属栏目:[语言] 日期:2022-07-10 热度:156
和C语言教程一样,我们从一个简单的Hello World!程序切入 socket 编程。 本节演示了 Linux 下的代码,server.cpp 是服务器端代码,client.cpp 是客户端代码,要实现的功能是:客户端从服务器读取一个字符串并打印出来。 服务器端代码 server.cpp: #include[详细]
-
Windows之socket演示程序
所属栏目:[语言] 日期:2022-07-10 热度:110
上节演示了 Linux 下的 socket 程序,这节来看一下 Windows 下的 socket 程序。同样,server.cpp 为服务器端代码,client 为客户端代码。 服务器端代码 server.cpp: #include stdio.h #include winsock2.h #pragma comment (lib, ws2_32.lib) //加载 ws2_32[详细]
-
socket 函数用法详解 创造套接字
所属栏目:[语言] 日期:2022-07-10 热度:174
不管是 Windows 还是 Linux,都使用 socket() 函数来创建套接字。socket() 在两个平台下的参数是相同的,不同的是返回值。 在《socket是什么》一节中我们讲到了 Windows 和 Linux 在对待 socket 方面的区别。 Linux 中的一切都是文件,每个文件都有一个整数[详细]
-
多路平衡归并排序 胜者树 败者树 算法细说
所属栏目:[语言] 日期:2022-07-10 热度:114
通过上一节对于外部排序的介绍得知:对于外部排序算法来说,其直接影响算法效率的因素为读写外存的次数,即次数越多,算法效率越低。若想提高算法的效率,即减少算法运行过程中读写外存的次数,可以增加 k 路平衡归并中的 k 值。 但是经过计算得知,如果毫无[详细]
-
置换选择排序算法说明
所属栏目:[语言] 日期:2022-07-10 热度:61
上一节介绍了增加 k-路归并排序中的 k 值来提高外部排序效率的方法,而除此之外,还有另外一条路可走,即减少初始归并段的个数,也就是本章第一节中提到的减小 m 的值。 m 的求值方法为:m=n/l(n 表示为外部文件中的记录数,l 表示初始归并段中包含的记录数[详细]
-
最佳归并树解析
所属栏目:[语言] 日期:2022-07-10 热度:66
通过上一节对置换-选择排序算法的学习了解到,通过对初始文件进行置换选择排序能够获得多个长度不等的初始归并段,相比于按照内存容量大小对初始文件进行等分,大大减少了初始归并段的数量,从而提高了外部排序的整体效率。 本节带领大家思考一个问题:无论[详细]
-
数据结构的图存储框架
所属栏目:[语言] 日期:2022-07-09 热度:75
我们知道,数据之间的关系有 3 种,分别是 一对一、一对多 和 多对多,前两种关系的数据可分别用线性表和树结构存储,本节学习存储具有多对多逻辑关系数据的结构图存储结构。 图存储结构基本常识 弧头和弧尾 有向图中,无箭头一端的顶点通常被称为初始点或弧[详细]
-
何为连通图 强 连通图详解
所属栏目:[语言] 日期:2022-07-09 热度:148
前面介绍了《图存储结构》,本节继续讲解什么是连通图。 前面讲过,图中从一个顶点到达另一顶点,若存在至少一条路径,则称这两个顶点是连通着的。例如图 1 中,虽然 V1 和 V3 没有直接关联,但从 V1 到 V3 存在两条路径,分别是 V1-V2-V3 和 V1-V4-V3,因此[详细]
-
什么是生成树 生成树 生成森林 解说
所属栏目:[语言] 日期:2022-07-09 热度:57
在学习连通图的基础上,本节学习什么是生成树,以及什么是生成森林。 对连通图进行遍历,过程中所经过的边和顶点的组合可看做是一棵普通树,通常称为生成树。 连通图中,由于任意两顶点之间可能含有多条通路,遍历连通图的方式有多种,往往一张连通图可能有[详细]
-
图的顺序存储结构 包括C语言实现
所属栏目:[语言] 日期:2022-07-09 热度:90
使用图结构表示的数据元素之间虽然具有多对多的关系,但是同样可以采用顺序存储,也就是使用数组有效地存储图。 使用数组存储图时,需要使用两个数组,一个数组存放图中顶点本身的数据(一维数组),另外一个数组用于存储各顶点之间的关系(二维数组)。 存[详细]
-
图的邻接表存储结构细况
所属栏目:[语言] 日期:2022-07-09 热度:117
通常,图更多的是采用链表存储,具体的存储方法有 3 种,分别是邻接表、邻接多重表和十字链表。 在具体讲解邻接表存储图的实现方法之前,先普及一个邻接点的概念。在图中,如果两个点相互连通,即通过其中一个顶点,可直接找到另一个顶点,则称它们互为邻接[详细]
-
图的十字链表存储构架
所属栏目:[语言] 日期:2022-07-09 热度:153
前面介绍了图的邻接表存储法,本节继续讲解图的另一种链式存储结构十字链表法。 与邻接表不同,十字链表法仅适用于存储有向图和有向网。不仅如此,十字链表法还改善了邻接表计算图中顶点入度的问题。 十字链表存储有向图(网)的方式与邻接表有一些相同,都[详细]
-
图的邻接多层表存储结构
所属栏目:[语言] 日期:2022-07-09 热度:94
前面讲过,无向图的存储可以使用邻接表,但在实际使用时,如果想对图中某顶点进行实操(修改或删除),由于邻接表中存储该顶点的节点有两个,因此需要操作两个节点。 为了提高在无向图中操作顶点的效率,本节学习一种新的适用于存储无向图的方法邻接多重表。[详细]
-
深度优先搜索 DFS 深搜 及广度优先搜索 BFS 广搜
所属栏目:[语言] 日期:2022-07-09 热度:113
深度优先搜索的过程类似于树的先序遍历,首先从例子中体会深度优先搜索。例如图 1 是一个无向图,采用深度优先算法遍历这个图的过程为: 首先任意找一个未被遍历过的顶点,例如从 V1 开始,由于 V1 率先访问过了,所以,需要标记 V1 的状态为访问过; 然后遍[详细]
-
深度优先生成树和广度优先生成树 解析版
所属栏目:[语言] 日期:2022-07-09 热度:181
前面已经给大家介绍了有关生成树和生成森林的有关知识,本节来解决对于给定的无向图,如何构建它们相对应的生成树或者生成森林。 其实在对无向图进行遍历的时候,遍历过程中所经历过的图中的顶点和边的组合,就是图的生成树或者生成森林。 具体实现的代码:[详细]
-
重连通图与重连通分量
所属栏目:[语言] 日期:2022-07-09 热度:106
在无向图中,如果任意两个顶点之间含有不止一条通路,这个图就被称为重连通图。在重连通图中,在删除某个顶点及该顶点相关的边后,图中各顶点之间的连通性也不会被破坏。 在一个无向图中,如果删除某个顶点及其相关联的边后,原来的图被分割为两个及以上的连[详细]
-
串的定长顺序存储构架
所属栏目:[语言] 日期:2022-07-08 热度:142
我们知道,顺序存储结构(顺序表)的底层实现用的是数组,根据创建方式的不同,数组又可分为静态数组和动态数组,因此顺序存储结构的具体实现其实有两种方式。 通常所说的数组都指的是静态数组,如 str[10],静态数组的长度是固定的。与静态数组相对应的,还[详细]
-
串的堆分配存储框架
所属栏目:[语言] 日期:2022-07-08 热度:126
串的堆分配存储,其具体实现方式是采用动态数组存储字符串。 通常,编程语言会将程序占有的内存空间分成多个不同的区域,程序包含的数据会被分门别类并存储到对应的区域。拿 C 语言来说,程序会将内存分为 4 个区域,分别为堆区、栈区、数据区和代码区,其中[详细]
-
串的块链存储构造
所属栏目:[语言] 日期:2022-07-08 热度:148
串的块链存储,指的是使用链表结构存储字符串。 链表各节点存储数据个数的多少可参考以下几个因素: 串的长度和存储空间的大小:若串包含数据量很大,且链表申请的存储空间有限,此时应尽可能的让各节点存储更多的数据,提高空间的利用率(每多一个节点,就[详细]