06 2017 档案
摘要:图的遍历有两种:深度优先和广度优先。本文中,深度优先使用递归实现,每次递归找到第一个与当前结点相连且未输出过的结点继续往下递归,直至所有结点都已输出。广度优先将开始结点的所有邻接结点全部压入栈,当栈不为空时一直循环将栈首的结点的所有相邻结点压入栈。 具体代码实现如下:
阅读全文
摘要:图有两种存储方式,邻接表和邻接矩阵。 稀疏图一般用邻接链表,稠密图一般用邻接矩阵。 具体实现如下:
阅读全文
摘要:SBT是一种平衡二叉树结构,它与AVL的不同在于它的自平衡条件是结点的size大于等于其侄子结点的size。SBT的旋转操作与AVL类似,但是有一种较为简便的maintain方法。 由于在结点类中包含了结点的size(它所在的子树的结点个数),我们可以轻易地求得结点数据从小到大的rank并找到第k小
阅读全文
摘要:AVL树是一种自平衡二叉查找树。它的平衡因子等于它的左子树的高度减去它的右子树的高度。只有平衡因子等于1,0,-1的结点是平衡的,不平衡的结点需要通过旋转来保持平衡。因此,在AVL树中任何结点的两个子树的高度差的最大值为1。 google到了一篇代码很简洁易懂的文章,将其中的代码整理了一下: 测试结
阅读全文
摘要:二叉查找树的结构和普通二叉树相同。它要么是空树,要么满足:对任意结点,如果左子树不为空,则左子树上所有结点的权值都小于该结点的权值;如果右子树不为空,则右子树上所有结点的权值都大于该结点的权值。在二叉查找树中,任意结点的左子树和右子树都是一棵二叉查找树。一般而言,二叉树上结点的权值都是唯一的。 基本
阅读全文
摘要:线索二叉树的定义为:一个二叉树通过如下的方法 “穿起来”:所有应该为空的右孩子指针指向该节点在中序序列中的后继,所有应该为空的左孩子指针指向该节点的中序序列的前驱。 那么在有 N 个节点的二叉树中共有 N+1 个空指针,这些空指针就叫做 “线索”。(提示:在一个有 N 个节点的二叉树中,每个节点有
阅读全文
摘要:1 //删除以cur为根结点的树 2 void delete_tree(node *&cur){ 3 if(cur!=NULL){ 4 delete_tree(cur->lchild); 5 delete_tree(cur->rchild); 6 //delete只是释放内存,指针可能成为野指针 7 ...
阅读全文
摘要:1 //广义表转二叉树: 2 设置一个标记变量k,初始值为-1; 3 设置一个标记结点p; 4 循环遍历广义表的字符串str; 5 如果str[i]是左括号: 6 则设置k为0; 7 把p压入栈中。 8 否则如果str[i]是逗号: 9 则设置k为1。 10 否则如果str[i]是右括号...
阅读全文
摘要:二叉树的存储结构有两种。第一种是顺序存储结构。若对一棵具有n个结点的完全二叉树的所有结点按层从上到下,每层从左到右的顺序依次对结点从1开始编号,则编号为i的结点具有以下性质: 1.i=1的结点为二叉树的根结点。 2.如果i>1,则结点i的双亲结点编号为i/2(向下取整)。 3.如果2i<=n,则编号
阅读全文
摘要:用两个栈实现栈的思路如下:栈s1装新压入的元素,顺序是“倒过来的”(先进后出),要出栈的话就把s1存的元素倒入s2中,这时候s2中的元素的出栈顺序与队列的出队顺序相同。执行的步骤如下:1. 入队时,检测s1是否已满,未满则入栈。 2. 出队时,检测s2中是否还有元素,若不为空,直接出栈即可;若s2为
阅读全文
摘要:队列是一种元素先进先出(FIFO)的线性结构,与栈不同的是,队列在队尾插入元素,在队首删除元素。这里我们实现的是循环队列,以防止“假上溢”浪费空间。
阅读全文
摘要:题目描述: 地上从左到右竖立着 n 块木板,从 1 到 n 依次编号,如下图所示。我们知道每块木板的高度,在第 n 块木板右侧竖立着一块高度无限大的木板,现对每块木板依次做如下的操作:对于第 i 块木板,我们从其右侧开始倒水,直到水的高度等于第 i 块木板的高度,倒入的水会淹没 ai 块木板(如果木
阅读全文
摘要:本文简单的设计了一个针对一位整数的四则运算进行求值的算法,对于处理多位整数的四则运算,需要对本文接受输入的数据类型进行升级,把字符数组换成字符串数组,将一个整数的多位数字存入一个字符串进行处理。 代码如下:
阅读全文
摘要:栈是一种元素满足后进先出(LIFO)规则的线性表。一般来说,我们将表头称为栈底,表尾称为栈顶,栈的操作都是在栈顶进行的。 栈的基本操作如下:
阅读全文
摘要:单链表有环的情况如上图所示,循环链表也属于有环的链表。 这里我们使用追逐法判断一个链表是否有环:设置两个指针slow和fast从头节点开始,slow每次移动一个节点,fast每次移动两个节点,如果fast遇到了NULL则表明链表没有环,停止循环。如果链表有环的话,那么这两个指针总会在某个位置相遇,相
阅读全文
摘要:约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。 下面我们用循环列表模拟这个过程:
阅读全文
摘要:链表也是一种线性表,但与线性表不同的是,链表的物理存储结构是一堆地址任意的存储单元。也就是说,链表的数据在内存中的物理位置可能相互邻接,也有可能不邻接。 单链表的基本操作如下:
阅读全文
摘要:顺序表属于线性表的一种存储表现形式,在计算机内部表示为一段连续的内存空间,数组就是一种顺序表。 下面是顺序表的主要操作:
阅读全文

浙公网安备 33010602011771号