2012年11月7日

UTF的字节序和BOM

摘要: UTF-8以字节为编码单元,没有字节序的问题。UTF-16以两个字节为编码单元,在解释一个UTF-16文本前,首先要弄清楚每个编码单元的字节序。例如“奎”的Unicode编码是“594E”,“乙”的Unicode编码是“4E59”。如果收到UTF-16字节流“594E”,那么这是“奎”还是“乙”?Unicode规范中推荐的标记字节顺序的方法是BOM。BOM不是“Bill Of Material”的BOM表,而是Byte Order Mark。 BOM是一个有点小聪明的想法:在UCS(Unicode Character Set)编码中有一个叫做“ZERO WIDTH NO-BREAK SPACE 阅读全文

posted @ 2012-11-07 14:37 zhuyf87 阅读(718) 评论(0) 推荐(0) 编辑

设计Qt风格的C++API

摘要: 原文地址:http://doc.qt.digia.com/qq/qq13-apis.html在奇趣(Trolltech),为了改进Qt的开发体验,我们做了大量的研究。这篇文章里,我打算分享一些我们的发现,以及一些我们在设计Qt4时用到的原则,并且展示如何把这些原则应用到你的代码里。优秀API的六个特性便利陷阱布尔参数陷阱静态多态命名的艺术指针还是引用?案例分析:QProgressBar如何把API设计好设计应用程序接口(APIs)是有难度的,这是一门和设计语言同样难的艺术。要遵循许多不同的原则,这些原则中的许多还彼此冲突。现在,计算机科学教育把很大的力气放在算法和数据结构上,而很少关注设计语言 阅读全文

posted @ 2012-11-07 07:38 zhuyf87 阅读(3257) 评论(0) 推荐(1) 编辑

2012年11月6日

理解TCP为什么需要进行三次握手(白话)

摘要: 原文地址:http://www.cnblogs.com/yuilin/archive/2012/11/05/2755298.html首先简单介绍一下TCP三次握手在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器 进入SYN_RECV状态;第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ac 阅读全文

posted @ 2012-11-06 10:06 zhuyf87 阅读(362) 评论(0) 推荐(0) 编辑

Huffman 编码压缩算法

摘要: 原文地址:http://coolshell.cn/articles/7459.html/comment-page-1前两天发布那个rsync算法后,想看看数据压缩的算法,知道一个经典的压缩算法Huffman算法。相信大家应该听说过 David Huffman 和他的压缩算法—— Huffman Code,一种通过字符出现频率,Priority Queue,和二叉树来进行的一种压缩算法,这种二叉树又叫Huffman二叉树 —— 一种带权重的树。从学校毕业很长时间的我忘了这个算法,但是网上查了一下,中文社区内好像没有把这个算法说得很清楚的文章,尤其是树的构造,而正好看到一篇国外的文章《A Simp 阅读全文

posted @ 2012-11-06 07:17 zhuyf87 阅读(1302) 评论(0) 推荐(0) 编辑

赫夫曼树及其应用

摘要: 美国数学家赫夫曼(David Huffman)1952年发明了一种压缩编码方法,并得到广泛应用。为了纪念他的成就,人们把他在编码中用到的特殊的二叉树叫做赫夫曼树,他的编码方法叫做赫夫曼编码。下面一段程序用来给学生考试成绩划分等级:if (a < 60) b = "不及格";else if (a < 70) b = "及格";else if (a < 80) b = "中等";else if (a < 90) b = "良好";else b = "优秀";这段程序的判断过程 阅读全文

posted @ 2012-11-06 06:57 zhuyf87 阅读(4190) 评论(0) 推荐(1) 编辑

2012年11月4日

树、森林和二叉树的转换

摘要: 树转换为二叉树(1)加线。在所有兄弟结点之间加一条连线。(2)去线。树中的每个结点,只保留它与第一个孩子结点的连线,删除它与其它孩子结点之间的连线。(3)层次调整。以树的根节点为轴心,将整棵树顺时针旋转一定角度,使之结构层次分明。(注意第一个孩子是结点的左孩子,兄弟转换过来的孩子是结点的右孩子)森林转换为二叉树(1)把每棵树转换为二叉树。(2)第一棵二叉树不动,从第二棵二叉树开始,依次把后一棵二叉树的根结点作为前一棵二叉树的根结点的右孩子,用线连接起来。二叉树转换为树是树转换为二叉树的逆过程。(1)加线。若某结点X的左孩子结点存在,则将这个左孩子的右孩子结点、右孩子的右孩子结点、右孩子的右孩子 阅读全文

posted @ 2012-11-04 17:04 zhuyf87 阅读(102544) 评论(5) 推荐(23) 编辑

2012年11月3日

二叉树的三叉链表存储和基本操作

摘要: 三叉链表存储表示改进于二叉链表,增加指向父节点的指针,能更好地实现结点间的访问。存储结构/* 二叉树的三叉链表存储表示 */ typedef struct BiTPNode { TElemType data; struct BiTPNode *parent,*lchild,*rchild; /* 双亲、左右孩子指针 */ }BiTPNode,*BiPTree;基本操作(基于C/C++的实现算法)/* 二叉树的三叉链表存储的基本操作(21个) */ #define ClearBiTree DestroyBiTree /* 清空二叉树和销毀二叉树的操作一样 */ void InitBiTr... 阅读全文

posted @ 2012-11-03 23:46 zhuyf87 阅读(14241) 评论(1) 推荐(0) 编辑

推导二叉树遍历结果

摘要: 已知一棵二叉树的先序遍历序列为:ABCDEF,中序遍历序列为CBAEDF,求后序遍历结果。先序为:ABCDEF,所以A为根结点。又中序为:CBAEDF,所以C、B为A的左子树结点,E、D、F是A的右子树的结点。再看先序:ABCDEF,打印A之后接着打印B,所以B是A的左孩子。再看中序:CBAEDF,C于B之前打印,所以C是B的左孩子。看先序:ABCDEF,结合上图可知D是A的右孩子。再看中序:CBAEDF,所以E是D的左孩子,F是D的右孩子。最终得到的二叉树如下:为避免推导失误,可以检查一遍所得二叉树的先序和中序遍历。最后由所得二叉树得到后序遍历:CBEFDA。二叉树遍历有如下性质:已知先序和 阅读全文

posted @ 2012-11-03 21:54 zhuyf87 阅读(971) 评论(0) 推荐(0) 编辑

线索二叉树

摘要: 线索二叉树 (threaded binary tree)上图所示的二叉链表,存在多个空指针域。假设一个二叉链表的结点数为n,则共有2n个指针域。而n个结点的二叉树共有n-1条分支。所以空指针域的个数为:2n - (n-1) = n+1。可以在这n+1个空指针域中保存结点的(以先序、中序或后序遍历的)前驱和后继指针,这样在下次遍历时,可以大大提高速度。将所有空指针域中的rchild指向它的后继。将所有空指针域中的lchild指向它的前驱。线索二叉树(保留遍历时结点在任一串行的前驱和后继的信息):若结点有左子树,则其lchild域指示其左孩子,否则令lchild域指示其前驱;若结点有右子树,则其r 阅读全文

posted @ 2012-11-03 16:04 zhuyf87 阅读(8568) 评论(1) 推荐(1) 编辑

二叉树的遍历

摘要: 二叉树的遍历(traversing binary tree)是指从根节点触发,按照某种次序依次访问二叉树中的所有结点,使得每个结点都被访问一次且仅被访问一次。1 先(前)序遍历若二叉树为空,则空操作返回;否则(1)访问根节点;(2)先序遍历左子树;(3)先序遍历右子树。void PreOrderTraverse(BiPTree T,void(*Visit)(BiPTree)) { /* 先序递归遍历二叉树T */ if(T) { Visit(T); /* 先访问根结点 */ PreOrderTraverse(T->lchild,Visit); /* 再先序遍历左子树 *... 阅读全文

posted @ 2012-11-03 08:36 zhuyf87 阅读(734) 评论(0) 推荐(0) 编辑

导航