关闭

哈夫曼编码(Huffman Coding) cpp完整代码实现 详细注释 ASCII码表

1.概念       哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式,哈夫曼编码是可变字长编码(VLC)的一种。Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码,一般就叫做Huffman编码(有时也称为霍夫曼编码)。 1951年,哈夫曼和他在MIT信息论的同学需要选择是完成学期报告还是期末考试...
阅读(227) 评论(0)

深入理解什么是变量?

总结: 变量是为某一内存起一个名字,本质就是代表内存中的一段存储空间。变量名存在编译器中(如vs 下的cl.exe),变量名指向一块内存地址,编译之后,变量名变成地址。变量是一种使用方便的占位符,用于引用计算机内存地址。 参考:http://baike.baidu.com/link?url=QH98DaRn-l9tI-EGi1U3AWbuEXBLoTXXQ9mUE4ouwdQ8M_UcY5JLH...
阅读(95) 评论(0)

线索二叉树(Binary Thread Tree)

// 1.用户前序输入二叉树数据 // 2.对二叉树进行线索化 lchild ltag Data rtag rchild // ltag/rtag 左右标记位 0:有孩子结点 link 1: 存储前驱或后继结点线索 Thread // 3.中序迭代遍历输出二叉树数据...
阅读(155) 评论(0)

理解线程/多线程处理数组(MultiThreaded dealing with arrays)

1、理解线程   要讲解线程,不得不说一下进程,进程是应用程序的执行实例,每个进程是由私有的虚拟地址空间、代码、数据和其它系统资源组成。进程在运行时创建的资源随着进程的终止而死亡。线程的基本思想很简单,它是一个独立的执行流,是进程内部的一个独立的执行单元,相当于一个子程序,它对应于Visual C++中的CwinThread类对象。单独一个执行程序运行时,缺省地包含的一个主线程,主线程以函数地址...
阅读(189) 评论(0)

完全二叉树/ 满二叉树/二叉树遍历(前序、中序、后序、层序遍历)

1.概念     在计算机科学中,二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。二叉树的第i层至多有2^{i-1}个结点;深度为k的二叉树至多有2^k-1个结点;对任何一棵二...
阅读(278) 评论(0)

树 的 双亲表示法 及 双亲孩子表示法

1.概念     树状图是一种数据结构,它是由n(n>=1)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:每个节点有零个或多个子节点;没有父节点的节点称为根节点;每一个非根节点有且只有一个父节点;除了根节点外,每个子节点可以分为多个不相交的子树。 节点的度(degree):一个节点含有的子树的个数称为该节点的...
阅读(350) 评论(0)

KMP算法计算next数组 匹配字符串

1.概念      KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现,因此人们称它为克努特——莫里斯——普拉特操作(简称KMP算法)。KMP算法的关键是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是实现一个next()函数,函数本身包含了模式串的局部匹配信息。时间复杂度O(m+n)。     设...
阅读(95) 评论(0)

递归算法计算八皇后问题(Eight Queen Problem with Recursive Algorithm)

1.概念 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。 2.实现 #incl...
阅读(74) 评论(0)

递归算法—输入字母逆序输出&汉诺塔递归算法

1.概念 递归——将一个大的问题分解成比较小的、有着相同形式的问题。递归是一种强有力的思想。在计算机科学的学习中,一个重要的必须学习的概念是递归。递归是一种编程策略,它把一个大的问题分解成具有相同形式的简单问题。递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。 2.代码 1)递归实...
阅读(192) 评论(0)

循环队列 代码实现(FIFO)

1.概念     为充分利用向量空间,克服顺序存储结构的"假溢出"现象的方法是:将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量。存储在其中的队列称为循环队列(Circular Queue)。这种循环队列可以以单链表的方式来在实际编程应用中来实现。     循环队列中,由于入队时尾指针向前追赶头指针;出队时头指针向前追赶尾指针,造成队空和队满时头尾指针均相等。因此,无法通过条件fro...
阅读(540) 评论(0)

线性表_栈_逆波兰计算式(Reverse Polish Notation)

1.概念     逆波兰式(Reverse Polish notation,RPN,或逆波兰记法),也叫后缀表达式(将运算符写在操作数之后)     实现逆波兰式的算法,难度并不大,但为什么要将看似简单的中序表达式转换为复杂的逆波兰式?原因就在于这个简单是相对人类的思维结构来说的,对计算机而言中序表达式是非常复杂的结构。相对的,逆波兰式在计算机看来却是比较简单易懂的结构。因为计算机普遍...
阅读(98) 评论(0)

线性表_使用栈实现二进制转换到八进制/十进制/十六进制

1.定义与概念 栈 栈是允许在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈底固定,而栈顶浮动;栈中元素个数为零时称为空栈。插入一般称为进栈(PUSH),删除则称为退栈(POP)。栈也称为后进先出表。 viod *malloc(size_t size)   向系统申请分配指定size个字节的内存空间。返回类型是...
阅读(188) 评论(0)

线性表_双向循环链表(Caesar加密变换结点顺序 代码实现 )

1.有图有真相 2.代码实现 //Caesar Password with DualLinkList #include #include #define OK 1 #define ERROR 0 typedef char ElemType; //双向循环链表元素类型 typedef int Stutas; typedef struct DualNo...
阅读(66) 评论(0)

线性表_循环链表(增减删查 + 约瑟夫环问题 代码实现 )

1.概念 循环链表是链式存储结构。它的特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环。 判断空链表的条件是 head==head->next; rear==rear->next; 循环链表的特点是无须增加存储量,仅对表的链接方式稍作改变,即可使得表处理更加方便灵活。①循环链表中没有NULL指针。涉及遍历操作时,其终止条件就不再是像非循环链表那样判...
阅读(81) 评论(0)

线性表(插入/清除数据/快慢指针查找中间数据)

1.概念 线性表 :顺序存储结构线性表  及 链式存储结构线性表  链式存储结构线性表(线性链表): 具有链接存储结构的线性表,它用一组地址任意的存储单元存放线性表中的数据元素,逻辑上相邻的元素在物理上不要求也相邻,不能随机存取。一般用结点描述:结点(表示数据元素) =数据域(数据元素的映象) + 指针域(指示后继元素存储位置) 顺序存储结构线性表: 顺序存储结构就是用一组地址连...
阅读(111) 评论(0)
34条 共3页1 2 3 下一页 尾页
    个人资料
    • 访问:5695次
    • 积分:370
    • 等级:
    • 排名:千里之外
    • 原创:33篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条