数据结构
文章平均质量分 68
业余选手李主任
功不唐捐,玉汝于成
展开
-
BFS经典例题Isenbaev number
BFS——宽度优先搜索算法(又称广度优先搜索)是最简便的图的搜索算法之一。下面由一道经典例题来引出博主对于构造一个图以及在图中使用广度优先搜索的一些理解。原创 2016-05-17 00:36:33 · 674 阅读 · 0 评论 -
【数据结构】压缩特殊矩阵
矩阵是一种常用的数学对象,一般情况下,小的矩阵我们可以直接用二维数组直观方便地储存,但是在科学与工程计算问题中常会遇到较高阶数的矩阵,并且矩阵中会出现大量零元素,或者矩阵中的元素呈某种规律分布。如果在这种情况下仍然采用二维数组描述矩阵,看起来储存密度为1,实际上却占用了许多单元去储存零元素或重复的非零元素,从而会造成极大的浪费。为了节省储存空间,我们可以对这类矩阵进行储存压缩。所谓的储存压缩是原创 2016-08-08 18:13:08 · 2946 阅读 · 0 评论 -
【数据结构】稀疏矩阵
什么是稀疏矩阵?简单的说,设矩阵Amn中有s个非零元素,若s远远小于矩阵元素的总数,则称A为稀疏矩阵。s与m x n的比称为矩阵的稀疏因子。当用数组存储稀疏矩阵中的元素时,仅有少部分的空间被利用,造成空间的浪费,为了节省存储空间,可以采用一种压缩的存储方法来表示稀疏矩阵。由于非零元素的分布一般是没有规律的,因此在存储非零元素的同时,还必须同时记下元素所在的行和列的位置(i, j)。因此原创 2016-08-08 21:52:30 · 1561 阅读 · 0 评论 -
【数据结构】二叉树四种遍历的非递归算法
递归算法虽然简洁,但一般而言,其执行效率不高。因此,有时候要把递归算法转化为非递归算法。先序遍历非递归算法由先序遍历过程可知,先访问根节点,再访问左子树,最后访问右子树。因此,先将根节点进栈,在栈不空时循环如下:p出栈,访问*p结点,若右孩子不空将该右孩子结点进栈,若左孩子不空再将左孩子结点进栈。对应算法如下:template T>void PreOrder(BTNodeT>原创 2016-08-08 23:04:22 · 610 阅读 · 0 评论 -
【数据结构】线索二叉树
二叉树遍历时从任一节点出发只能找到左右孩子,而一般的情况下无法直接找到该结点在某种遍历序列中的前驱和后继结点,这种信息只能在遍历的动态过程中才能得到。但是,如果在首次遍历二叉树的过程中以某种方式保存了遍历序列中的前驱和后继结点的信息,则以后就可以根据该信息,加快相应的遍历过程。考虑到一个具有n个结点的二叉树表,在2n个指针中只有n-1个是用来存储孩子结点的地址,存在n+1个空指针,可以利用原创 2016-08-09 11:46:29 · 753 阅读 · 0 评论 -
【数据结构】拓扑排序
设G=(V, E)是一个具有n个顶点的有向图,V中的顶点序列v0,v1,v2,…,vn-1如果满足下列条件:若从vi到vj有一条路径,则在顶点序列中顶点vi必定在vj之前,这样的序列称为拓扑序列。对一个有向图构造拓扑序列的过程称为拓扑排序(topological sort)。显然,每一个可以构造出不止一个拓扑序列。拓扑排序的步骤如下:1、在有向图中选一个没有前驱的顶点并输出;2、从图中删除原创 2016-08-09 17:14:03 · 655 阅读 · 0 评论 -
【排序算法】之堆排序
特别说明,这里的序列都是从1开始。1、什么是堆对于n个元素的序列{R1, … , Rn}当且仅当满足下列关系之一时,称之为堆:(1) Ri (2) Ri >= R2i+1 且 Ri >= R2i+2 (大根堆)2、什么是堆排序堆排序是一种树形选择排序,它的特点是在排序的过程中,将r[1..n]看成是一棵完全二叉树的顺序存储结构,利用完全二叉树中双亲结点和孩子结点之间原创 2016-08-09 22:22:43 · 1846 阅读 · 0 评论 -
【排序算法】之归并排序
什么是归并排序归并排序是利用归并技术进行的一种排序方法。所谓归并,是指将两个或者两个以上的有序表合并成一个新的有序表。归并技术经常应用在顺序表、链表等存储结构的合并算法中。归并顺序的基本思想:将一个具有n个待排序记录的表看成是n个长度为1的有序子表,然后两两归并,得到[n/2]个长度为2的有序子表;再进行两两归并,得到[n/4]个长度为4的有序子表,如此重复,直至得到一个长度为n的有序表为原创 2016-08-09 23:03:07 · 343 阅读 · 0 评论 -
【排序算法】之基数排序
与前面介绍的几种排序方法不同,基数排序不比较关键字的大小。它是根据关键字中各位的值,通过对排序的n个元素进行若干趟“分配”与“收集”来实现排序的。例如,设待排序的线性表中每个元素的关键字都是d位的十进制正整数,在排序的过程中需要对该线性表进行d趟的分配和收集处理,每趟处理方法是相同的。在进行第j(j = 1, 2, …, d)趟处理时,首先按元素在线性表中的排列顺序,依次将每个元素插入到编号为原创 2016-08-10 10:41:50 · 746 阅读 · 0 评论 -
【数据结构】哈夫曼树
1、背景知识1、路径和路径长度在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层数为1,则从根结点到第L层结点的路径长度为L-1。2、结点的权及带权路径长度若将树中结点赋给一个有着某种含义的数值,则这个数值称为该结点的权。结点的带权路径长度为:从根结点到该结点之间的路径长度与该结点的权的乘积。3、树原创 2016-08-10 19:09:58 · 4115 阅读 · 0 评论 -
【数据结构】构造二叉树的三种方法
题目: binary tree is a tree data structure in which each node has at most two children, which are referred to as the left child and the right child.1、Three Constructor: creat a tree by copy. creat a t原创 2016-05-22 15:22:48 · 7424 阅读 · 0 评论 -
KMP算法详解
如果机房马上要关门了,或者你急着要和MM约会,请直接跳到第六个自然段。我们这里说的KMP不是拿来放电影的(虽然我很喜欢这个软件),而是一种算法。KMP算法是拿来处理字符串匹配的。换句话说,给你两个字符串,你需要回答,B串是否是A串的子串(A串是否包含B串)。比如,字符串A=”I’m matrix67”,字符串B=”matrix”,我们就说B是A的子串。你可以委婉地问你的MM:“假如你要向你喜欢的人表转载 2016-10-10 11:30:43 · 287 阅读 · 0 评论 -
【数据结构】用两个队列实现一个栈
题目描述: In this assignment, you need to complete Class Stack’s declaration and definition with Template. The different thing is that the Stack is implemented by two queues. And you need to define a pri原创 2016-05-22 14:12:53 · 1294 阅读 · 0 评论 -
【数据结构】中缀表达式转后缀表达式
题目描述: First of all, you are required to complete a Linked stack in stack.cpp. Linked stack, as the name implies, is a linked structure by using pointer. Then, we can use this stack to convert infix ex原创 2016-05-22 14:43:07 · 604 阅读 · 0 评论 -
一个简单的双向链表的例子
题目描述: Implement the class with given header. As you guess, DouList means 逗list, very funny. to_str() function means displaying the list with std::string, formating like [1, 2, 3, 4] , [2] or [] (emp原创 2016-05-20 10:26:55 · 2795 阅读 · 0 评论 -
【数据结构】用链表实现多项式运算
一元多项式的运算包括加法减法和乘法,而多项式的加法和乘法都可以依靠多项式的加法来实现,所以本文仅仅讲解如何用链表实现一元多项式的加法。数学上的一元多项式的表示是p(x) = p0 + p1 * x + p2 * x^2 + p3 * x^3 + … + pn * x^n; 用链表来表示就是p = (p0, p1, p2, … , pn); 所谓的多项式相加就是同类项的合并,也就是两条链表的原创 2016-08-08 12:31:06 · 21259 阅读 · 4 评论