- 博客(35)
- 收藏
- 关注
原创 路由选择协议——RIP、OSPF
内部网关协议IGP(一个AS内的路由信息传递协议) :RIP、OSPF;外部网关协议EGP(两个AS之间路由信息的传递协议) :BGP;路由转发过程
2019-08-05 16:39:10
838
原创 QT计算器 之 大数运算
1、简介: 计算器是我们生活中很常见的东西,它可以由多种语言多种方式来实现,今天我想讲的是基于C++语言,由QT实现的可以计算大数的简单计算器。2、作品演示: (1)简单四则运算 (2)大数运算3、重点原理讲解 (1)四则运算如何实现 (2)大数的加减乘除4、代码主体框架1个主函数; 两个类: 一个calculator类,实现了对界面的布局,其实这个布局很简单,就设置
2019-08-05 13:48:58
1326
原创 数据链路层
点对点信道:一对一的点对点通信方式(PPP协议:主机和ISP之间点对点的通信协议)广播信道:一对多的广播通信方式(CSMA/CD)链路:一个结点到相邻结点的一段物理线路数据链路:输出数据除了有物理链路之外,还必须有必要的通信协议来控制这些数据的传输,若把实现这些协议的硬件和软件加到链路上,就构成了数据链路。数据链路层面临难的三个基本问题① 封装成帧:在IP数据报的前后添加首部...
2019-08-05 13:14:22
116
原创 域名系统DNS
1.域名系统DNS是用来干什么的?DNS是用于将便于人们使用的机器名字(域名)转换为IP地址的系统。**(博主认为学习一个协议应首先明白它是用来做什么的,然后协议的具体不过是实现这一目的的过程,带着协议最终要实现的效果来学习协议,学习目的会更明确)**...
2019-07-31 22:22:33
213
原创 深入理解计算机系统------优化程序性能(2)
1、理解现代处器 在代码级上,看上去是一次执行一条指令,每条指令都包括从寄存器或内存取值,执行一个操作,并把结果存回到一个寄存器或内存位置。在实际的处理器中,是同时执行多条指令的,这个现象称为指令级并行。多条指令并行地执行,同时又呈现出一种简单的顺序执行的表象。延迟界限:下一条指令执行之前,这条指令必须结束,当代码中的数据相关限制了处理器利用指令集并行的能力时,延迟界限能够限制程序的性能。...
2018-06-05 21:10:57
419
原创 深入理解计算机系统------优化程序性能(1)
1、优化编译器的能力和局限性 (1)编译器有自己能够优化程序的能力,但会有局限性。 ●指针指向内存的同一位置: 例如:void twiddle1(long *xp, long *yp){ *xp += *yp; *xp += *yp;}void twiddle2(long *xp, long *yp){ *xp += 2 * *yp;}函数twid...
2018-06-03 15:38:50
316
原创 Linux 目录结构及文件基本操作
1、Linux目录结构与windows的区别:一种不同是体现在目录与存储介质(磁盘,内存,DVD 等)的关系上,以往的 Windows 一直是以存储介质为主的,主要以盘符(C 盘,D 盘…)及分区来实现文件管理,然后之下才是目录,目录就显得不是那么重要,除系统文件之外的用户文件放在任何地方任何目录也是没有多大关系。然而 UNIX/Linux 恰好相反,UNIX 是以目录为主的,Linux 也继
2017-11-15 18:51:01
242
原创 用户及文件权限
1、查看当前登录用户: whoami 命令。who 命令其它常用参数 参数 说明 -a 打印能打印的全部 -d 打印死掉的进程 -m 同am i,mom likes -q 打印当前登录用户数及用户名 -u 打印当前登录用户登录信息 -r 打印运行等级2、创建用户:3、将其它用户加入 sudo 用户组:默认情况下新创建的用户是不具有 root 权
2017-11-03 16:42:06
277
原创 Linux基本概念及操作(终端、shell、快捷键、通配符)
终端的概念: 通常我们在使用 Linux 时,并不是直接与系统打交道,而是通过一个叫做 Shell 的中间程序来完成的,在图形界面下为了实现让我们在一个窗口中完成用户输入和显示输出,Linux 系统还提供了一个叫做终端模拟器的程序(Terminal)。要注意的是这里所说的终端(Terminal)和控制台(Console)是有区别的。比较常见的终端模拟器: gnome-terminal,Konsol
2017-10-30 16:55:41
395
原创 初识Linux
linux与windows区别: 1、软件与支持 Windows 平台:数量和质量的优势,不过大部分为收费软件;由微软官方提供重要支持和服务; Linux 平台:大都为开源自由软件,用户可以修改定制和再发布,由于基本免费没有资金支持,部分软件质量和体验欠缺;由全球所有的 Linux 开发者和自由软件社区提供支持。2、安全性 Windows 平台:数量和质量的优势,不过大部分为收费软件;由微软
2017-10-30 15:25:19
249
原创 最小生成树--Prim算法和Kruskal算法
1、最小生成树:一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边。最小生成树包括三个重要的性质: 最小:边的权重和最小 生成:最小生成树是从原树生成的,包含所有顶点,|v|-1条边都在图里 树:最小生成树还必须是一棵树,无回路,V个顶点一定有|v|-1条边。 最小生成树是连通的,而连通的图一定有一个最小生成树,这是充分必要的。
2017-08-19 16:10:45
2320
原创 Floyd算法
前言:在前面我们已经介绍了,最短路径问题总体上分为单源最短路径和多源最短路径,而Dijkstra算法是解决单源最短路径的方法,这里将要介绍的Floyd算法就是解决多源最短路径的算法。即解决任意两点之间的最短路径。很容易的,我们可以想到,将单源最短路径的算法对每两个结点进行一遍就得到了多源最短路径,但是这样计算是浪费时间和空间的,这样的计算的时间复杂度是T =O( |V|3 + |E|*|V|);
2017-08-19 15:23:11
514
2
原创 Dijkstra算法
1、Dijkstra算法:是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题。迪杰斯特拉算法主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。这个算法能得出最短路径的最优解,但由于它遍历计算的节点很多,所以效率低。注意该算法要求图中不存在负权边。2、Dijkstra算法的思路:该算法主要是根据最短路径的不断更新,最后获得最短路径。在最开始确定起点和目的点,将起点的邻接点路径
2017-08-18 18:56:46
724
原创 无权最短路径
1、最短路径算法: (1)、单源最短路径问题:从某固定源点出发,求其到所有其他顶点的最短路径 单源最短路径又分为有全图和无权图两种,每一种又包括有向和无向的。(2)、多源最短路径问题:求任意两顶点间的最短路径2、单源最短路径问题—无权最短路径算法: 使用某个顶点s作为输入参数,我们想要找出从s到所有其它顶点的最短路径。我们只对包含在路径中的边数有兴趣,因此在边上不存在权。显然,这是赋权最短路径
2017-08-17 22:31:48
704
原创 拓扑排序
1、拓扑排序是对有向无圈图的顶点的一种排序,它使得如果存在Vi到Vj的路径,那么在排序中Vj出现在Vi的后面。在讲解拓扑排序之前,我们先介绍一个概念,AOV网: 通常,我们把顶点表示活动、边表示活动间先后关系的有向图称做顶点活动网(Activity On Vertex network),简称AOV网。 2、拓扑排序的步骤: 由AOV网构造拓扑序列的拓扑排序算法主要是循环执行以下两步,直到不存在
2017-08-17 18:00:35
5318
原创 深度优先搜索和广度优先搜索( DFS&BFS )
1、深度优先搜索:图的深度优先搜索(Depth First Search),和树的先序遍历比较类似。简称DFS它的思想: (1)、首先选择一个入口,标记,再访问邻接的元素,标记,一直下去,直到没有路可走。 (2)、然后按照原路返回,看到没有被标记的地方就访问并且标记上,知道所有元素都被标记。 (3)、注意要原路返回,不然可能会存在有的元素没有访问到然而已经退出的情况。 在这个图中,若选择
2017-08-16 20:41:06
3777
原创 图的存储
其实关于图的很多相关术语,我们在离散数学的学习中就已经学过了,所以这里只是写一些比较重要和新的东西。1、图:图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合。 需要注意的是: !有向边的顶点对用<>表示,无向边的顶点对则是用()表示。 !在这里的学习中,我们讲解的图全是简单图,即不考虑重边和自回
2017-08-16 16:24:08
211
原创 51nod 1557(两个集合)
题目: 小X有n个互不相同的整数: p1,p2,…,pn 。他想把这些整数分到两个集合A和B里边。但是要符合下面两个条件。 · 如果x属于A,那么a-x也肯定属于A。 · 如果x属于B,那么b-x也肯定属于B。 判断一下是否存在一种方案来分配这些数字到集合A,B中。 注意:如果一个集合为空也是可以的。(数据结构,Hash,并查集,CodeForces)其实不是很
2017-08-11 18:17:43
453
原创 不相交集(并查集)
1、不相交集是一种解决等价问题的有效数据结构,这种数据结构实现起来非常简单,每个例程只要几行代码,而且可以使用一个简单的数组实现。实现也非常快,每种操作只需要常数平均时间。2、等价关系 等价关系必须满足下面三个性质: (1):自反性,对于集合S中的任意元素a,a R a;(R为定义的关系,比如R为<=, >=等等) (2);对称性,a R b当且仅当b R a (3):传递性,若a R
2017-08-09 15:06:33
2769
原创 Hash表实现
在前面已经介绍了平方探测法的概念以及基本思想,下面是平方探测法实现的部分代码:#define MAXTABLESIZE 100000 /* 允许开辟的最大散列表长度 */#include #include #include typedef int ElementType; /* 关键词类型用整型 */typedef int Index; /* 散列地址类型
2017-08-08 12:34:22
325
原创 散列、散列函数、冲突处理
1、散列:理想的散列表数据结构只不过是一个包含有关键字的具有固定大小的数组。典型情况下,一个关键字就是带有相关值的字符串。2、散列的基本思想:以关键字key为自变量,通过一个确定的函数 h(散列函数),计算出对应的函数值h(key),作为数据对象的存储地址。3、冲突:可能不同的关键字会映射到同一个散列地址上, 即h(keyi) = h(keyj)(当keyi ≠keyj),称为“冲突(Collisi
2017-08-04 17:20:03
1940
原创 堆排序
1、堆排序(Heap Sort):是指利用堆这种数据结构所设计的一种排序算法。2、堆分为”最大堆”和”最小堆”。最大堆通常被用来进行”升序”排序,而最小堆通常被用来进行”降序”排序。 两者基本上是类似的,在这里就只介绍最大堆的升序排序。3、最大堆的升序排序主要代码://向下过滤的函数 void maxheap_down(int a[], int start, int end){ int
2017-07-29 16:58:14
280
原创 堆(优先队列,最大堆的基本操作,堆的例题)
1、堆(优先队列):是一种特殊的“队列”,取出元素的顺序是 依照元素的优先权(关键字)大小,而不是元素进入队列的先后顺序。2、堆的特性: (1)结构性:用数组表示的完全二叉树(堆一定是完全二叉树);(2)有序性:任一结点的关键字是其子树所有结点的最大值(或最小值)“最大堆(MaxHeap)”,也称“大顶堆”:任一结点的关键字是其子树所有结点的最大值。 “最小堆(MinHeap)”,也称“小
2017-07-29 15:13:03
1414
原创 平衡二叉树(AVL树,AVL树旋转)
1、平衡因子(BF):BF = HL - HR(其中HL和HR分别是左子树和右子树的高度)。2、平衡二叉树(AVL树):对于任一结点,左右子树的高度差的绝对值是小于1。 即 |BF|<=1。例:1、 对于3这个结点来讲,左子树高度为2,右子树高度为0,左右子树高度差为2,2>1,所以该树不是平衡二叉树。2、 对于这个树里面的每一个结点来讲,左右子树的高度差都小于等于1,所以
2017-07-29 10:18:43
4259
原创 二叉查找树 例
1、二叉查找树:左子树的值小于根结点,右子树的值大于根结点的树 二叉查找树的中序遍历结果是从小到大的排序。 前面已经介绍了二叉查找树的基本操作,下面通过完整的代码来演示一下,会有助于更好的理解。 2、例:将数组{4,2,5,10,6,3,7,8,1,9}插入为二叉查找树,并按照前序、中序、后序遍历,再删除一个结点后中序遍历输出。最后销毁二叉查找树#include <stdio.h>#incl
2017-07-26 16:04:20
460
原创 树(树,二叉树,二叉查找树)
1.定义: n(n≥0)个结点构成的有限集合。当n=0时,称为空树2.对于任一棵非空树(n> 0),它具备以下性质: (1)、树中有一个称为“根(Root)”的特殊结点,用 r 表示; (2)、其余结点可分为m(m>0)个互不相交的有限集T1,T2,… , 其中每个集合本身又是一棵树,称为原来树的子树。3.树的一些性质: (1)
2017-07-22 19:33:16
256
原创 排序(插入排序,希尔排序,归并排序,快速排序)
1.插入排序:每一步将一个待排序的元素按照其关键字值的大小插入到已排序序列的适当位置,知道待排序元素插入完为止。(1).核心代码:void sort(int a[],int n)//插入排序 { int i,j; int temp; for(i = 0;i<n;i++) { int j = i; int temp = a[i];
2017-07-22 16:41:16
384
原创 队列(数组实现和链表实现)
1.概念:具有一定操作约束的线性表 2.特点:(1)只能在一端插入(入队),另一端删除(出队)。 (2).先进先出。 3.存储实现方式:数组、链表。 4.基本操作: 1.数组实现(循环数组): 注意:(1)、普通的顺序存储的数组用来实现队列时,存在一个问题:当rear(记录队尾的变量)到达maxsize-1时,不能确定队列是否满,因为前面可能
2017-07-16 19:43:43
1282
原创 栈(ADT)
1.概念:栈是限制插入和删除只能在一个位置上进行的表 2.注意知识点: (1).后进先出的特点(LIFO) (2).存在某个元素位于栈顶,而该元素是唯一可见的元素。 (3).栈的两种实现方式 :数组、链表 3.栈的基本操作: 1、数组实现: (1).入栈(push)和出栈(pop)#include <stdio.h>#define maxsize 10typ
2017-07-05 21:21:57
577
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人