-
哈希表 散列表 详解 包含哈希表处理冲突的方式
所属栏目:[语言] 日期:2022-07-10 热度:95
前面介绍了静态查找表以及动态查找表中的一些查找方法,其查找的过程都无法避免同查找表中的数据进行比较,查找算法的效率很大程度取决于同表中数据的查找次数。 而本节所介绍的哈希表可以通过关键字直接找到数据的存储位置,不需要进行任何的比较,其查找[详细]
-
插入排序算法及C语言做成
所属栏目:[语言] 日期:2022-07-10 热度:185
插入排序算法是所有排序方法中最简单的一种算法,其主要的实现思想是将数据按照一定的顺序一个一个的插入到有序的表中,最终得到的序列就是已经排序好的数据。 直接插入排序是插入排序算法中的一种,采用的方法是:在添加新的记录时,使用顺序查找的方式找[详细]
-
折半插入排序算法 C语言代码达成
所属栏目:[语言] 日期:2022-07-10 热度:78
上一节介绍了直接插入排序算法的理论实现和具体的代码实现,如果你善于思考就会发现该算法在查找插入位置时,采用的是顺序查找的方式,而在查找表中数据本身有序的前提下,可以使用折半查找来代替顺序查找,这种排序的算法就是折半插入排序算法。 该算法的[详细]
-
2路插入排序算法说明
所属栏目:[语言] 日期:2022-07-10 热度:129
2-路插入排序算法是在折半插入排序的基础上对其进行改进,减少其在排序过程中移动记录的次数从而提高效率。 具体实现思路为:另外设置一个同存储记录的数组大小相同的数组 d,将无序表中第一个记录添加进 d[0] 的位置上,然后从无序表中第二个记录开始,同[详细]
-
表插入排行算法
所属栏目:[语言] 日期:2022-07-10 热度:100
前面章节中所介绍到的三种插入排序算法,其基本结构都采用数组的形式进行存储,因而无法避免排序过程中产生的数据移动的问题。如果想要从根本上解决只能改变数据的存储结构,改用链表存储。 表插入排序,即使用链表的存储结构对数据进行插入排序。在对记录[详细]
-
冒泡排序 起泡排序 算法与其C语言实现
所属栏目:[语言] 日期:2022-07-10 热度:160
起泡排序,别名冒泡排序,该算法的核心思想是将无序表中的所有记录,通过两两比较关键字,得出升序序列或者降序序列。 对无序表的第一次起泡排序,最终将无序表中的最大值 97 找到并存储在表的最后一个位置。具体实现过程为: 首先 49 和 38 比较,由于 38[详细]
-
简单选择排序算法 C语言解析版
所属栏目:[语言] 日期:2022-07-10 热度:100
该算法的实现思想为:对于具有 n 个记录的无序表遍历 n-1 次,第 i 次从无序表中第 i 个记录开始,找出后序关键字中最小的记录,然后放置在第 i 的位置上。 例如对无序表{56,12,80,91,20}采用简单选择排序算法进行排序,具体过程为: 第一次遍历时,从[详细]
-
堆排序算法C语言细说
所属栏目:[语言] 日期:2022-07-10 热度:151
在学习堆排序之前,首先需要了解堆的含义:在含有 n 个元素的序列中,如果序列中的元素满足下面其中一种关系时,此序列可以称之为堆。 ki k2i 且 ki k2i+1(在 n 个记录的范围内,第 i 个关键字的值小于第 2*i 个关键字,同时也小于第 2*i+1 个关键字) ki[详细]
-
何为外部排序算法
所属栏目:[语言] 日期:2022-07-10 热度:75
上一章介绍了很多排序算法,插入排序、选择排序、归并排序等等,这些算法都属于内部排序算法,即排序的整个过程只是在内存中完成。而当待排序的文件比内存的可使用容量还大时,文件无法一次性放到内存中进行排序,需要借助于外部存储器(例如硬盘、U盘、光[详细]
-
socket是啥 套接字是什么
所属栏目:[语言] 日期:2022-07-10 热度:162
网络编程就是编写程序使两台联网的计算机相互交换数据。这就是全部内容了吗?是的!网络编程要比想象中的简单许多。 我们把插头插到插座上就能从电网获得电力供应,同样,为了与远程计算机进行数据传输,需要连接到因特网,而 socket 就是用来连接到因特网[详细]
-
套接字有哪些类别 socket有哪些类型
所属栏目:[语言] 日期:2022-07-10 热度:66
这个世界上有很多种套接字(socket),比如 DARPA Internet 地址(Internet 套接字)、本地节点的路径名(Unix套接字)、CCITT X.25地址(X.25 套接字)等。但本教程只讲第一种套接字Internet 套接字,它是最具代表性的,也是最经典最常用的。以后我们提及[详细]
-
OSI网络七层模型简明教案
所属栏目:[语言] 日期:2022-07-10 热度:183
如果你读过计算机专业,或者学习过网络通信,那你一定听说过 OSI 模型,它曾无数次让你头大。OSI 是 Open System Interconnection 的缩写,译为开放式系统互联。 给数据加包装的过程,实际上就是在数据的头部增加一个标志(一个数据块),表示数据经过了这[详细]
-
Windows之socket演示程序
所属栏目:[语言] 日期:2022-07-10 热度:97
上节演示了 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 热度:152
不管是 Windows 还是 Linux,都使用 socket() 函数来创建套接字。socket() 在两个平台下的参数是相同的,不同的是返回值。 在《socket是什么》一节中我们讲到了 Windows 和 Linux 在对待 socket 方面的区别。 Linux 中的一切都是文件,每个文件都有一个整[详细]
-
多路平衡归并排序 胜者树 败者树 算法细说
所属栏目:[语言] 日期:2022-07-10 热度:159
通过上一节对于外部排序的介绍得知:对于外部排序算法来说,其直接影响算法效率的因素为读写外存的次数,即次数越多,算法效率越低。若想提高算法的效率,即减少算法运行过程中读写外存的次数,可以增加 k 路平衡归并中的 k 值。 但是经过计算得知,如果毫[详细]
-
置换选择排序算法说明
所属栏目:[语言] 日期:2022-07-10 热度:132
上一节介绍了增加 k-路归并排序中的 k 值来提高外部排序效率的方法,而除此之外,还有另外一条路可走,即减少初始归并段的个数,也就是本章第一节中提到的减小 m 的值。 m 的求值方法为:m=n/l(n 表示为外部文件中的记录数,l 表示初始归并段中包含的记录[详细]
-
最佳归并树解析
所属栏目:[语言] 日期:2022-07-10 热度:181
通过上一节对置换-选择排序算法的学习了解到,通过对初始文件进行置换选择排序能够获得多个长度不等的初始归并段,相比于按照内存容量大小对初始文件进行等分,大大减少了初始归并段的数量,从而提高了外部排序的整体效率。 本节带领大家思考一个问题:无[详细]
-
Linux下的socket演练程序
所属栏目:[语言] 日期:2022-07-10 热度:58
和C语言教程一样,我们从一个简单的Hello World!程序切入 socket 编程。 本节演示了 Linux 下的代码,server.cpp 是服务器端代码,client.cpp 是客户端代码,要实现的功能是:客户端从服务器读取一个字符串并打印出来。 服务器端代码 server.cpp: #includ[详细]
-
IP、MAC和端口号 网络通信中确认身份信息的几元素
所属栏目:[语言] 日期:2022-07-10 热度:200
在茫茫的互联网海洋中,要找到一台计算机非常不容易,有三个要素必须具备,它们分别是 IP 地址、MAC 地址和端口号。 IP地址 IP地址是 Internet Protocol Address 的缩写,译为网际协议地址。 目前大部分软件使用 IPv4 地址,但 IPv6 也正在被人们接受,尤[详细]
-
重连通图与重连通分量
所属栏目:[语言] 日期:2022-07-09 热度:69
在无向图中,如果任意两个顶点之间含有不止一条通路,这个图就被称为重连通图。在重连通图中,在删除某个顶点及该顶点相关的边后,图中各顶点之间的连通性也不会被破坏。 在一个无向图中,如果删除某个顶点及其相关联的边后,原来的图被分割为两个及以上的[详细]
-
深度优先搜索 DFS 深搜 及广度优先搜索 BFS 广搜
所属栏目:[语言] 日期:2022-07-09 热度:93
深度优先搜索的过程类似于树的先序遍历,首先从例子中体会深度优先搜索。例如图 1 是一个无向图,采用深度优先算法遍历这个图的过程为: 首先任意找一个未被遍历过的顶点,例如从 V1 开始,由于 V1 率先访问过了,所以,需要标记 V1 的状态为访问过; 然后[详细]
-
深度优先生成树和广度优先生成树 解析版
所属栏目:[语言] 日期:2022-07-09 热度:117
前面已经给大家介绍了有关生成树和生成森林的有关知识,本节来解决对于给定的无向图,如何构建它们相对应的生成树或者生成森林。 其实在对无向图进行遍历的时候,遍历过程中所经历过的图中的顶点和边的组合,就是图的生成树或者生成森林。 具体实现的代码[详细]
-
图的邻接多层表存储结构
所属栏目:[语言] 日期:2022-07-09 热度:197
前面讲过,无向图的存储可以使用邻接表,但在实际使用时,如果想对图中某顶点进行实操(修改或删除),由于邻接表中存储该顶点的节点有两个,因此需要操作两个节点。 为了提高在无向图中操作顶点的效率,本节学习一种新的适用于存储无向图的方法邻接多重表[详细]
-
图的邻接表存储结构细况
所属栏目:[语言] 日期:2022-07-09 热度:158
通常,图更多的是采用链表存储,具体的存储方法有 3 种,分别是邻接表、邻接多重表和十字链表。 在具体讲解邻接表存储图的实现方法之前,先普及一个邻接点的概念。在图中,如果两个点相互连通,即通过其中一个顶点,可直接找到另一个顶点,则称它们互为邻[详细]
-
图的十字链表存储构架
所属栏目:[语言] 日期:2022-07-09 热度:190
前面介绍了图的邻接表存储法,本节继续讲解图的另一种链式存储结构十字链表法。 与邻接表不同,十字链表法仅适用于存储有向图和有向网。不仅如此,十字链表法还改善了邻接表计算图中顶点入度的问题。 十字链表存储有向图(网)的方式与邻接表有一些相同,[详细]
