数据结构
文章平均质量分 54
仅是路过
这个作者很懒,什么都没留下…
展开
-
初学数据结构第一题
既然要重新开始踏上征程,在学习新的知识前,先回顾下以前所学过的一些皮毛。 数据结构,对于IT行业的学习者来说是一门很重要的课,而本人学的第一个知识点,是由学长所点拨之下学习的数据结构中很重要的思想,栈与队列的思想,下面附出本人第一次运用队列知识所解决的一道题目,此题是NYOJ的第58题,也是从此题开始,本人正式踏上了学习数据结构之路,算是个小小的回顾的同时重新备忘吧!点击打开链接P原创 2012-12-06 07:20:41 · 320 阅读 · 0 评论 -
关于链表的一些操作(持续更新中)
虽然以前写过几篇关于链表的博客,但是感觉以前代码太乱,不严谨,而且太分散,所以重开一帖,贴上一些关于链表的操作,以后遇到相关问题就不断补充。struct ListNode{ int m_nValue; ListNode *m_pNext;};void BuildList(ListNode *&Head, int Val) //构建链表{原创 2014-01-22 11:32:28 · 656 阅读 · 6 评论 -
重建二叉树
输入某二叉树的前序遍历和中序遍历结果,重建出二叉树。 对于这个问题,我们首先要明白二叉树的性质,在二叉树的前序遍历中,第一个数子总是树的根节点的值,在中序列中,根节点的值总在序列的中间,而在后序遍历中,根节点的值总是在序列的最后一个。因此我们需要扫描中序遍历序列,才能找到根结点的值,并不断递归得分成左右两部分,下面是实现代码:#include #include #include原创 2014-01-23 18:54:44 · 607 阅读 · 0 评论 -
KMP模板
详情点击http://blog.csdn.net/v_july_v/article/details/7041827这里只是贴上模板备忘。void GetNext(char str[]) //求next数组{ int len = strlen(str); int i = 0; int j = -1; while(i < len - 1) { if(j == -1 |翻译 2014-01-11 16:12:50 · 483 阅读 · 0 评论 -
面试题:求二叉树中节点的最大距离
#include #include using namespace std;#define maxn 0x3ffffffint max1;struct node{ int num; //二叉树中该节点的值 int longest_val; //以该节点为根离子树中的最大距离 int second_val; //以该节点为根离子树中的第二大距离原创 2013-07-19 10:56:25 · 695 阅读 · 0 评论 -
面试题:判断整数序列是不是二元查找树的后序遍历结果
输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。如果是返回true,否则返回false。例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果: 8 / \ 6 10 / \ / \ 5 7 9 11因此返回true。如果输入7、4、6、5,没有哪棵树的后序遍历的结果是这个序列,因此返回false。解题思路:原创 2013-07-17 10:22:14 · 697 阅读 · 0 评论 -
面试题:输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。
例如输入整数22和如下二元树 10 / \ 5 12 / \ 4 7则打印出两条路径:10, 12和10, 5, 7。二元树节点的数据结构定义为:struct BinaryTreeNode{int data;BinaryTreeNode *pLeft;BinaryTreeNode *pRight;};原创 2013-07-11 10:42:59 · 3249 阅读 · 3 评论 -
面试题:定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素,要求函数min,push及pop的时间复杂度都是O(1)
思路: 在栈里添加一个成员变量存放最小元素(或最小元素的位置)。每次push一个新元素进栈的时候,如果该元素比当前的最小元素还要小,则更新最小元素。但是仅仅只添加一个成员变量存放最小元素(或最小元素的位置)是不够的,因为如果当前最小元素被pop出去,如何才能得到下一个最小元素?所以我们需要一个辅助栈。每次push一个新元素的时候,同时将最小元素(或最小元素的位置。考虑到原创 2013-07-10 10:15:32 · 4461 阅读 · 2 评论 -
面试题:把二元查找树转变成排序的双向链表
输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。10/ \6 14/ \ / \4 8 12 16转换成双向链表4=6=8=10=12=14=16。首先我们定义的二元查找树节点的数据结构如下:struct BSTreeNode{int m_nValue; // value of nodeBS原创 2013-07-09 16:14:43 · 544 阅读 · 0 评论 -
HDU1213 How Many Tables(简单的并查集)
找了个简单的并查集题目练手,对并查集复习了一遍,留个模板作为备忘。 点击打开链接#include #include using namespace std;int father[1010],a,b,visit[1010];int find(int x){ if(x!=father[x]) father[x]=find(father[x]);原创 2013-03-23 09:36:12 · 473 阅读 · 0 评论 -
拓扑排序模板(备忘之用)
自己写了个拓扑排序的模板,以便备忘之用: //int n,m;void sb(){ for(int num=1;num<=n;num++) { j=1; if(b[j]!=0) { while(1) { j++; if(b[j]==0) break; else if(j>n) break; } }原创 2013-01-19 11:39:14 · 258 阅读 · 0 评论 -
HDU1285-拓扑排序
总算放假了,这学期该死的科目,纠结死了!呵呵!今天开始正式的假期学习! 今天看了一个新的数据结构,拓扑排序! 拓扑排序: 对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若 ∈E(G),则u在线性序列中出现在v之前。 通常,这样的线性序列称原创 2013-01-18 10:30:28 · 1954 阅读 · 0 评论 -
堆与堆排序
二叉堆的定义二叉堆是完全二叉树或者是近似完全二叉树。二叉堆满足二个特性:1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值。2.每个结点的左子树和右子树都是一个二叉堆(都是最大堆或最小堆)。当父结点的键值总是大于或等于任何一个子节点的键值时为最大堆。当父结点的键值总是小于或等于任何一个子节点的键值时为最小堆。如下图所示一般都用数组来表示堆,i结点的父结点下原创 2014-01-06 18:05:21 · 486 阅读 · 0 评论