自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 收藏
  • 关注

原创 应用层协议

HTTP点击某个连接发生后的几个事件1.浏览器分析链接指向页面的URL2.浏览器向DNS请求解析某个域名的IP地址3.DNS解析完成4.浏览器与服务器建立TCP连接5.浏览器发出取文件命令:GET/xxxx6.服务器给出响应,把文件发送给浏览器7.释放TCP连接HTTP本身是无连接的。无状态的:同一个客户第二次访问同一个服务器上的页面时,服务器的响应与第一次被访问的相同...

2019-05-30 18:44:06 136

原创 运输层协议

运输层UDPUDP没有拥塞控制UDP支持一对一、一对多、多对一和多对多的交互通信UDP的首部开销小UDP首部字段有8个字节,由四个字段组成1.源端口:2.目的端口:3.长度:4.检验和:检测UDP用户数据报在传输中是否有错。有错就丢失TCP面向连接的运输层协议每一条TCP连接只能有两个端点TCP提供可靠交付的服务TCP提供全双工通信TCP面向字节流TCP首部...

2019-05-29 17:50:08 401

原创 数据结构学习日志之二十二--普里姆算法

假设在n个城市之间建立通信联络网,则联通n个城市最少需要n-1条线路,最多需要n(n-1)/2条线路,连接两个城市必然需要付出一定的代价,假设有一个连通网,代表n个城市和n个城市间可能设置的通信线路,网的顶点代表n个城市,边代表线路,边上的权值代表需要连接这两个城市付出的代价。对于n个顶点的连通网可以建立许多不同的生成树,那么有一棵树必然是耗费最小代价的,那么这棵树就是最小生成树。生成最小生成树有...

2018-07-05 13:54:51 392

原创 数据结构学习日志之二十一--广度优先遍历

马踏棋盘问题(又称骑士周游或骑士漫游问题)是算法设计的经典问题之一题目要求在国际象棋的棋盘为8*8的放个棋盘,现将“马”放在任意指定的方格中,按照“马”走棋的规则将“马”进行移动。要求每个方格只能进入一次,最终使得“马”走遍棋盘64个方格。...

2018-07-04 17:51:48 157

原创 数据结构学习日志之二十--图的遍历

图的遍历,从图中某一顶点出发访遍图中其余顶点,且使每一个顶点仅被访问一次。图的深度优先遍历:假设有上图迷宫,我们需要走遍其每个顶点。假设从A开始,让其一直往右走,并标记已经走过的地点,即A-B-C-D-E-F,当其走到F时,A已经标记走过,则继续走G-H,到了H发现邻接点都走过了,则回溯到G,G发现邻接点也都走过了,则回溯到F,以此类推,回溯到B时,发现I没走过,则往I走,走完之后又回溯到B,最终...

2018-05-17 11:13:09 341

原创 数据结构学习日志之十九--十字链表与邻接多重表

之前我们讲到,对于有向图,它的邻接表有出度和入度之分。为此,重新定义顶点结构和边表结构顶点结构data表示顶点数据,firstIn表示入边表,firstOut表示出边表边表结构tailVex表示弧起点顶点下标,headVex表示弧终点顶点下标,headLink指向弧头相同的下一条弧,tailLink指向弧尾相同的下一条弧这就是十字链表,好处就是把邻接表和逆邻接表整合在一起,既容易找到以Vi为尾的弧...

2018-05-16 17:01:22 468

原创 数据结构学习日志之十八-- 图的存储结构(邻接表)

由于邻接矩阵空间利用率较低,我们可以考虑另一种存储结构方式。将数组和链表结合一起来存储,称为邻接表。邻接表的处理方法是这样的1.图中顶点用一个一维数组存储。2.图中每个顶点Vi的所有邻接点构成一个线性表,由于邻接点的个数不确定,使用单链表存储。如图,对于无向图,一维数组存储顶点数据还有指针,分别指向他们的邻接点如果是有向图,邻接表也是类似,但是邻接表对于有向图有入度与出度之分。...

2018-05-16 15:39:40 344

原创 数据结构学习日志之十七--图的存储结构(邻接矩阵)

因为任意两个顶点之间都可能存在联系,因此无法用数据元素在内存中的物理位置来表示元素之间的关系。对于无向图,图的邻接矩阵存储方式是用两个数组来表示图。一个一维数组存储图中顶点信息,一个二维数组(称为邻接矩阵)存储图中的边或弧。如图,假设该二维数组为A,则A[v0][v1]的值为1代表顶点v0跟v1之间有边,A[v1][v3]的值为0则代表v1与v3之间没有边。可以看出无向图的邻接矩阵都为对称矩阵。由...

2018-05-16 15:22:11 300

原创 数据结构学习日志之十六--图

图是比树形结构和线性结构更为复杂的数据结构。线性表里面,除第一个和最后一个,每个数据元素都只有一个直接前驱和直接后继。树形结构中,数据元素有着明显的层次关系,每一层上的数据元素可能和下一层中多个元素相关,但只能和上一层中的一个元素相关。而在图中,结点之间的关系可以是任意的,图中任意两个数据元素都可能相关。图是一种数据结构,在图中的数据元素通常称作顶点。假设V是顶点的集合;VR是两个顶点之间的关系的...

2018-05-16 11:41:26 182

原创 数据结构学习日志之十六--赫夫曼编码

赫夫曼编码可以很有效的压缩数据。我们先来看几个名词1.定长编码:像ASCII编码,每个字符8位。2.变长编码:单个编码的长度不一致,可以根据整体出现频率来调节3.前缀编码:任意一个字符的编码都不是另一个字符的编码的前缀。我们可以利用二叉树来设计二进制的前缀编码。假设有一棵如上图的二叉树,其4个叶子节点分别表示A、B、C、D这4个字符,左分支表示字符'0',右分支表示字符'1',则可以从根结点到叶子...

2018-05-14 17:09:31 232

原创 数据结构学习日志之十五--赫夫曼树

赫夫曼树,又称最优树,是一类带权路径长度最短的树,有着广泛的应用,尤其在数据压缩方面路径长度:从树中一个结点到另一个结点之间的分支构成这两个结点之间的路径,路径上的分支数目。树的路径长度是从树根到每个结点的路径长度之和,完全二叉树就是路径长度最短的二叉树。若结点带权,结点的带权路径长度是从该结点到树根之间的路径长度与结点上权的乘积。树的带权路径长度为树中所有叶子结点的带权路径长度之和,通常记做WP...

2018-05-13 15:47:05 632

原创 数据结构学习日志之十四--树和二叉树的转换

普通树转换为二叉树1.在书中所有的兄弟结点之间加连线2.对每个结点,除了长子(即最左子结点),其余与双亲连线去掉森林到二叉树的转换1.先讲森林中的每一颗树变为二叉树2.再将每颗二叉树的根节点连接在一起二叉树到森林的转换1.若结点x是其双亲y的左孩子,则把x的右孩子,右孩子的右孩子...都与y用连线连起来2.去除双亲所有右孩子的连线树和森林的遍历分为前序遍历和后序遍历,遍历结果与其转换的二叉树结果相...

2018-05-13 15:04:35 152

原创 数据结构学习日志之十三--树和森林

树的存储结构1.双亲表示法:假设以一组连续空间存储树的结点,同时在每个结点中附设一个指示器指示其双亲结点在链表中的位置。这种存储结构利用了每个结点除了根节点都只有一个双亲,求双亲容易,但是求结点的孩子难,需要遍历整个结构2.孩子表示法:由于树种每个结点可能有多颗子树,则可用多重链表,即每个结点有多个指针域,每个指针指向一颗子树的根结点。第一种方法,由于树种很多结点的度都小于d,势必会造成浪费第二种...

2018-05-13 14:47:55 293

原创 数据结构学习日志之十二--线索二叉树

在数据结构学习日志之十一里面我们知道,有n个结点的二叉树共有2n个链域,非空链域为n-1个,但其中的空链域却有n+1个。遍历二叉树是以一定规则将二叉树中的结点排成一个线性序列。这实质上是对一个非线性结构进行线性化操作,使每个结点(除第一个和最后一个外),这些线性序列中有且仅有一个直接前驱和直接后继。当二叉树链表做为存储结构时,只能找到结点的左、右孩子信息,而不能得到结点在任意序列里面的前驱和后继,...

2018-05-04 16:46:15 333

原创 数据结构学习日志之十一--遍历二叉树

二叉树由3个基本单元组成:根结点,左子树和右子树。因此,若能依次遍历这三部分,便是遍历了整个二叉树。假如以L、D、R分别表示遍历左子树、访问根结点和遍历右子树,则可有DLR、LDR、LRD、DRL、RDL、RLD这6种方案。若限定先左后右,则只有前3种情况,分别称之为先(根)序遍历、中(根)序遍历和后(根)序遍历。首先我们来建立一个二叉树,采取的是链式存储结构typedef struct BiTN...

2018-05-03 15:56:04 204

原创 设计模式学习日志之三--单例模式

单例模式,写法介绍三种:懒汉式单例,饿汉式单例,登记式单例单例模式有以下特点:1.单例类只能有一个实例。2.单例类必须自己创建自己的唯一实例3.单例类必须给所有其他对象提供这一实例单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池,缓存,日志对象,对话框,打印机这些对象常被设计成单例。避免不一致的状态,避免政出多头。饿汉式天生是线程安全的,可以直接用于多...

2018-04-24 17:50:01 181

原创 数据结构学习日志之十--二叉树

二叉树是一种特殊的树型结构,它的特点是每个结点至多只有两棵子树(即二叉树中不存在度大于2的结点),并且,二叉树的子树有左右之分,其次序不能任意颠倒。二叉树可以有5种形态,1.空二叉树 2.仅有根结点的二叉树 3.右子树为空的二叉树 4.左右子树非空的二叉树 5.左子树为空的二叉树二叉树的性质1.在二叉树的第i层至多有2^(i-1)次方个结点(i>=1)2.深度为k的二叉树至多有2^k-1个结...

2018-04-24 16:32:39 346

原创 数据结构学习日志之九--树

树是n(n >= 0)个结点的有限集。在任意一个非空树中1.有且仅有一个特定的称为根(Root)的结点;2.当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1,T2...Tm,其中每一个集合本身又是一棵树,并且称为根的子树如上图,是有13个结点的树,其中A是根,其余结点分成3个互不相交的子集:T1 = {B, E, F, K, L},T2 = {C, G}, T3 = ...

2018-04-24 15:09:19 201

原创 数据结构学习日志之八--模式匹配

字符串的模式匹配算法Brute Force 算法:有两个字符串S和T,长度为N和M,首先S[1]和T[1]比较,若相等,则再比较S[2]和T[2],一直到T[M]为止;若S[1]和T[1]不相等,则T往右移动一个字符的位置,再依次进行比较。最坏的情况是进行M*(N-M+1)次比较,时间复杂度是O(M*N)KMP算法:改进BruteForce算法,每当进行一次匹配过程中,不需要回溯i指针,而是利用已...

2018-04-24 14:21:54 258

原创 数据结构学习日志之七--串

串是由零或多个字符组成的有限序列,一般记为 其中s是串的名,n为串的长度,ai可能是字母,数字或者其他字符;串中任意个连续的字符组成的子序列称为该串的子串。串的逻辑结构和线性表极为相似,区别是串的数据对象约束为字符集。串的3种机内表示方法1.用一组地址连续的存储单元存储串值的字符序列,称为定长顺序存储表示。实现串的原操作为“字符序列的复制”,操作的时间复杂度基于复制的字符序列的长度。2.仍以一组地...

2018-04-03 16:51:50 178

原创 数据结构学习日志之六--队列

和栈相反,队列是一种先进先出的线性表。它只允许在表的一端插入,而在另一端删除元素。队列也有两种存储表示:用链表表示的队列简称为链队列。一个链队列显然需要两个分别只是队头和队尾的指针,分别称为头指针和尾指针才能唯一确定。队列和线性表的单链表一样,为了操作方便,队列也有一个头结点,并令头指针指向头结点。空链表则是头指针和尾指针都指向头结点。循环队列:在队列的顺序存储结构中,除了用一组地址连续的存储单元...

2018-03-30 11:02:25 320

原创 数据结构学习日志之五--栈

栈是限定仅在表尾进行插入或删除操作的线性表。所以对这样的线性表来说,表尾称为栈顶,表头称为栈底。因为栈是仅在表尾进行修改,即栈的修改是按后进先出的原则进行的,所以栈又称后进先出的线性表。栈的表示:顺序栈,即是利用连续一组地址连续的存储单元一次存放自栈底到栈顶的元素,附设两个指针,top指向栈顶,base指向栈底,当top == base表示空栈,当top-base == stackSize表示栈已...

2018-03-19 16:13:25 152

原创 设计模式学习日志之二--抽象工厂模式

之间介绍的工厂都是单产品系的,抽象工厂是对应了多产品系,但是产品种类数量相对固定的。举个例子来说,每个工厂不仅卖面条,还提供饮料,面条和饮料可能不断出新样品,但是还是只卖这两种。先抽象一个产品类,饮料:public abstract class IDrinks { /** * 描述每种饮料多少钱 */ public abstract void prices();...

2018-03-15 18:03:52 195

原创 数据结构学习日志之四--循环链表和双向链表

循环链表也是一种链式存储结构,特点是表中的最后一个结点的指针域会指向头结点,整个链表形成一个环。循环链表的操作和线性链表基本一致,差别在于算法中的循环条件不是p或p->next是否为空,而是它们是否等于头指针当合并两个表时,只需要修改两个指针值,即将一个表的表尾和另一个表的表头相接。双向链表不同以上的是,双向链表有两个指针域,一个指向前趋结点,一个指向后继结点。和单链表(即只有一个后继指针域...

2018-03-14 14:47:00 123

原创 数据结构学习日志之三--静态链表

当链表每个节点在物理位置上是相邻的,即用数组描述的链表叫静态链表假设S为静态链表,S[0].cur只是第一个结点在数组中的位置,若设i = S[0].cur,S[i].data存储静态链表中的第一个数据元素,S[i].cur表示第二个结点在数组中的位置。一般情况下,若第i个分量表示静态链表的第k个结点,则S[i].cur表示第k+1个结点在数组中的位置。以整型游标i代替动态指针,i = S[i]....

2018-03-14 11:47:43 397

原创 数据结构学习日志之二--线性表

线性表的特点是,在数据元素的非空有限集合,存在唯一一个“第一个”和唯一一个“最后一个”的元素;除第一个元素,每个元素只有一个前驱;除最后一个元素,每个元素只有一个后继元素线性表的顺序表示指一组地址连续的存储单元依次存储线性表的数据元素,线性表元素的存储位置满足LOC(ai+1) = LOC(ai)+l,l为一个元素的存储单元即一般来说,线性表的第i个数据元素ai的存储位置为LOC(ai) = LO...

2018-03-13 16:06:52 205

原创 设计模式学习日志之二--工厂方法模式

工厂模式,属于创建型设计模式,需要生成的对象叫做产品,生成对象的地方叫做工厂简单工厂模式举个例子创建一个面条基类(或者接口)这是产品的抽象类public abstract class INoodles { /** * 描述每种面条啥样的 */ public abstract void desc();}创建之后,来一份兰州拉面public class LzNoodle...

2018-03-05 17:32:15 192

原创 设计模式学习日志之一--概括

设计模式有两种,一种是GRASP,全称为通用职责分配软件模式,是一种设计原则,告诉我们怎样设计问题空间中的类与分配它们的行为职责,以及明确类之间的相互关系等。另一种GOF,俗称四人帮模式,是针对特定问题提出的解决方案。GRASP的核心思想是职责分配,包含9个基本模式1.信息专家模式:将职责分配给拥有履行一个职责所必需信息的类,即信息专家。对应于面向对象设计原则的单一职责原则2.创造者模式:谁负责产...

2018-03-05 17:05:15 385

原创 数据结构学习日志之一

数据结构(Data Structure)是相互之间存在一种或多种特定关系的数据元素的集合。数据元素之间的相互关系称为结构,包含四种:1.集合 2.线性结构 3. 树形结构 4.图状结构或者网状结构抽象数据类型的定义由一个值域和定义在该值域上的一组操作组成。分为1.原子类型:变量的值不可分割,例如数位为100的整数。2.固定聚合类型:由确定数目的成分按某种结构组成,例如复数由实数加虚数3.可变聚合类...

2018-03-04 12:07:33 488

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除