数据结构
文章平均质量分 80
_土豆_
这个作者很懒,什么都没留下…
展开
-
实现简单的迷宫
我们知道栈的特点是:后进先出(First In Last Out);也就是说只能在栈的尾部进行压栈和出栈,而且出栈的时候只能从最后一个数据开始。 所以我们利用栈这个特点,来实现这个迷宫。在这之中我们要采用“回溯”的方法去处理当遇到路径不通的情况。 原理:每找到一个通路,就将这个数据压栈,这样当前位置的上一个位置就位于栈的顶部,假如当前位置的上下左右都找不到通路的时候,就开始回溯,也就是开始从来原创 2016-05-26 09:38:01 · 371 阅读 · 0 评论 -
判定一个组数是否是一个搜索二叉数的后序遍历
判定一个组数是否是一个搜索二叉数的后序遍历 对于一个序列arr,最后一个元素是arr[len] (也就是根root),如果去掉最后一个元素的序列为T,那么T满足:T可以分成两段,前一段(左子树)小于root,后一段(右子树)大于root,且这两段(子树)都是合法的后序序列。完美的递归定义 。 第一种方法:bool Ispostsort(int* arr,in原创 2016-08-03 21:59:59 · 260 阅读 · 0 评论 -
由前序遍历和中序遍历重建二叉树
对于二叉树,在此我不做过多讲解,如有不懂,请参照一下链接点击打开链接 1、在此二叉树的定义:struct BinaryTreeNode { BinaryTreeNode *_Left; BinaryTreeNode *_Right; T _data; public: BinaryTreeNode(const T& x)原创 2016-06-15 09:56:53 · 511 阅读 · 0 评论 -
排序的几种类型
//快速排序//排序思想://1.从数列中挑出一个元素,称为 “基准”(pivot),//2.重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。//3.递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序650) this.原创 2016-05-26 09:38:18 · 834 阅读 · 0 评论 -
平衡二叉树(AVLTree)详解
一、平衡二叉树: 这几天学了平衡二叉树,对于平衡二叉树,我觉得开始在理解插入旋转以及其平衡因子的调整时有点吃力。如今理清就来谈谈这部分。 对于平衡二叉树的理解: 平衡二叉树又称AVL树,(有别于AVL算法),且具有以下性质: 它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都原创 2016-07-06 23:27:25 · 1674 阅读 · 0 评论 -
快速排序的优化
//快速排序//1.从数列中挑出一个元素,称为 “基准”(pivot),//2.重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。//3.递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序int PartSort(原创 2016-05-27 17:43:42 · 411 阅读 · 0 评论 -
二叉搜索树
二叉查找树(Binary Search Tree)(二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 1. 每个节点都有一个作为搜索依据的关键码(key),所有节点的关键码互不同。 2. 左子树上所有节点的关键码(key)都小于根节点的关键码(key)。 3. 右子树上所有节点的关键码(ke原创 2016-06-18 20:25:49 · 462 阅读 · 0 评论 -
判断一个序列是否为另一个栈的出栈序列(栈的压入、弹出序列)
判断一个序列是否为另一个栈的出栈序列【思路】借用一个辅助的栈,遍历压栈顺序,先讲第一个放入栈中,这里是1,然后判断栈顶元素是不是出栈顺序的第一个元素,这里是4,很显然1≠4,所以我们继续压栈,直到相等以后开始出栈,出栈一个元素,则将出栈顺序向后移动一位,直到不相等,这样循环等压栈顺序遍历完成,如果辅助栈还不为空说明弹出序列不是该栈原创 2016-07-25 11:31:57 · 2389 阅读 · 3 评论 -
面试题1-将二叉搜索树转变成排序的双向链表
输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。 对于一棵二叉搜索树 若采用中序遍历,其遍历顺序为1-2-3-4-5-6-7,通过适当的指针变换操作,可变成的双向有序链表如下:对于将其转换为双链表有两种思路: 首先看第一种思路:原创 2016-06-24 20:50:06 · 3805 阅读 · 0 评论 -
堆的实现(大小堆及 优先队列)
一、堆的概念 堆数据结构是一种数组对象,它可以被视为一棵完全二叉树结构。 堆结构的二叉树存储是: 最大堆:每个父节点的都大于孩子节点。 最小堆:每个父节点的都小于孩子节点。 堆栈中的物体具有一个特性: 最后一个放入堆栈中的物体总是被最先拿出来, 这个特性通常称为后进先出(LIFO)队列。 堆栈中定义了一些操作。 两个最重要的是PUSH和POP。 PUSH操作在堆栈的顶部加入一原创 2016-05-26 09:38:15 · 5700 阅读 · 0 评论 -
稀疏矩阵
稀疏矩阵是矩阵中非零元素的个数远远小于矩阵元素的总数,并且非零元素的分布没有规律,通常认为非零元素比上矩阵所有元素的值小于等于0.05时,则称该矩阵为稀疏矩阵(sparse matrix);与之相区别的是,如果非零元素的分布存在规律(如上三角矩阵、下三角矩阵、对角矩阵),则称该矩阵为特殊矩阵。 一个稀疏矩阵中有许多元素等于零,这便于矩阵的计算和保存.如果Matlab把一个矩阵当作稀疏矩阵,那么原创 2016-05-26 09:38:13 · 762 阅读 · 0 评论 -
二叉树的先序、中序、后序、层序递归及非递归遍历
二叉树是一种树形结构,它每个结点至多只有两棵子树(即二叉树中不存在度大于2的结点)。所谓度是结点拥有的子树数。650) this.width=650;" src="http://s1.51cto.com/wyfs02/M02/7F/31/wKioL1cWRZ_g1ddLAAAn7bdu_34291.png" title="C47G6G`N73Y9V`4O)FFYDBN.png " alt="wKi原创 2016-05-26 09:38:10 · 579 阅读 · 0 评论 -
广义表
广义表(Lists,又称列表)是一种非线性的数据结构,是线性表的一种推广。即广义表中放松对表元素的原子限制,容许它们具有其自身结构。650) this.width=650;" src="http://s4.51cto.com/wyfs02/M00/7F/2A/wKioL1cVuxqzk4guAABOfPTUY_Y086.png" title="QQ截图20160419125358.png" alt原创 2016-05-26 09:38:07 · 446 阅读 · 0 评论 -
单链表的增删查 逆置 倒数第k个节点等问题
对于单链表而言,它没有双链表那么复杂,它只有头节点,尾节点,节点数据,后继指针。在下面本人实现了 单链表的 增 删 插 查 改。 #include#include#include#includetypedef int Datatype;typedef struct SListNode{ Datatype data; struct SListNode*next;原创 2016-05-26 09:38:04 · 223 阅读 · 0 评论 -
海量数据处理
1、海量日志数据,提取出某日访问百度次数最多的那个IP。 首先是这一天,并且是访问百度的日志中的IP取出来,逐个写入到一个大文件中。注意到IP 是32位的,最多有个2^32个IP。同样可以采用映射的方法,比如模1000,把整个大文件映射为1000个小文件,再找出每个小文件中出现频率最大的IP (可以采用hash_map进行频率统计,然后再找出频率最大的几个)及相应的频率。然后再在这1000转载 2016-10-20 10:39:18 · 322 阅读 · 0 评论