数据结构
草莓感冒片
~~~
展开
-
细讲排序算法之交换排序
概述内部排序:全部数据可同时放入内存进行的排序。 外部排序:文件中数据太多,无法全部调入内存进行的排序。定义:设有记录序列:{R1、R2 ……….. Rn} 其相应的关键字序列为:{K1、K2 ……….. Kn}; 若存在一种确定的关系:Kx<= Ky<=… <=Kz 则将记录序列 { R1、R2 ……….. Rn} 排成按关键字有序的序...原创 2018-03-11 13:59:53 · 153 阅读 · 0 评论 -
静态链表
静态链表存储于数组中,但其顺序不是按数组下标的顺序,而是像链表一样,由当前结点link域的值决定下一个结点的位置,这是链表的特性。由于存储于数组中,故称为静态链表。静态链表与单链表的区别 单链表的结点通过new产生,结点被限制在动态存储区内。因此,指示结点位置的指针类型是长整型。而静态链表的结点被限制在静态数组内。因此,指示结点位置的指针(link成员)是整型。 单链表中不...原创 2018-08-19 15:32:34 · 579 阅读 · 0 评论 -
拓扑结构相同子树
对于两棵彼此独立的二叉树A和B,请编写一个高效算法,检查A中是否存在一棵子树与B树的拓扑结构完全相同。给定两棵二叉树的头结点A和B,请返回一个bool值,代表A中是否存在一棵同构于B的子树。分析 利用二叉树的遍历先将二叉树的每个节点放在数组中。接着进行字符的匹配。示例struct TreeNode { int val; struct TreeNode ...原创 2018-08-26 15:56:25 · 502 阅读 · 0 评论 -
重建二叉树
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 在二叉树的前序序列中,第一个数字总是树的根节点值。在中序序列中,左子树的节点的值位于根节点的左边,右子树的节点的值位于根节点的右边。...原创 2018-08-17 15:26:40 · 109 阅读 · 0 评论 -
两串旋转
如果对于一个字符串A,将A的前面任意一部分挪到后边去形成的字符串称为A的旋转词。 比如A=”12345”,A的旋转词有”12345”,”23451”,”34512”,”45123”和”51234”。对于两个字符串A和B,请判断A和B是否互为旋转词。 给定两个字符串A和B及他们的长度lena,lenb,请返回一个bool值,代表他们是否互为旋转词。 测试样例: “cda...原创 2018-08-27 13:00:19 · 163 阅读 · 0 评论 -
句子的逆序
对于一个字符串,请设计一个算法,只在字符串的单词间做逆序调整,也就是说,字符串由一些由空格分隔的部分组成,你需要将这些部分逆序。 给定一个原字符串A和他的长度,请返回逆序后的字符串。 测试样例: “dog loves pig”,13 返回:”pig loves dog”示例一class Reverse {public: string rev...原创 2018-08-27 13:58:48 · 311 阅读 · 0 评论 -
线性结构——栈
栈是先进后厨的线性表。即限定仅能在表的一端进行插入(入栈)或删除(出栈)操作的线性表。示例template<typename T>class AbstractStack{public: virtual void ClearStack() = 0; virtual bool StackEmpty() const = 0; virtua...原创 2018-08-23 08:59:04 · 252 阅读 · 0 评论 -
栈的应用-数制转换
数制转换 根据栈的先进后出的特性,可以用栈来改变顺序。如将十进制数m转换为n进制的结果。 将m连续除以n,所得余数依次是n进制由低位到高位的值,但输出结果却要由高位到低位,因此,借助栈来改变顺序。/*进制转换*/void Conversion(int m, int n) { SequenceStack<int> S(5); int e; c...原创 2018-08-25 11:04:14 · 4772 阅读 · 0 评论 -
陌生但默默一统江湖的MurmurHash
看Jedis的主键分区哈希时,看到了名字很萌很陌陌的MurmurHash,谷歌一看才发现Redis,Memcached,Cassandra,HBase,Lucene都用它。关于Hash,我之前只知道MD5,SHA1,SHA256还有Java自己的h...转载 2018-09-12 00:16:07 · 5866 阅读 · 0 评论 -
字符串移位
对于一个字符串,请设计一个算法,将字符串的长度为len的前缀平移到字符串的最后。 给定一个字符串A和它的长度,同时给定len,请返回平移后的字符串。 测试样例: “ABCDE”,5,3 返回:”DEABC”示例class Prior {public: string findSmallest(vector&lt;string&gt; strs...原创 2018-09-06 13:27:49 · 758 阅读 · 0 评论 -
单链表
单链表节点类型结构体#ifndef __LISTNODE_H__#define __LISTNODE_H__template<typename T> struct LNode{ T data; LNode<T> *next;};#endif单链表的类#ifndef __LINKLIST_H__#define __LI...原创 2018-08-19 14:50:36 · 158 阅读 · 0 评论 -
插入排序
插入排序概念void InsertSort(int *arr, int len) { for (int i = 1; i < len; i++) { int tmp = arr[i]; int j; for (j = i; j > 0 && tmp < arr[j - 1]; j--) { arr[j] = arr[j - 1]; ...原创 2018-07-23 09:27:03 · 125 阅读 · 0 评论 -
细讲排序算法之选择排序
概述内部排序:全部数据可同时放入内存进行的排序。 外部排序:文件中数据太多,无法全部调入内存进行的排序。定义:设有记录序列:{R1、R2 ……….. Rn} 其相应的关键字序列为:{K1、K2 ……….. Kn}; 若存在一种确定的关系:Kx<= Ky<=… <=Kz 则将记录序列 { R1、R2 ……….. Rn} 排成按关键字有序的序...原创 2018-03-09 22:28:21 · 175 阅读 · 0 评论 -
细讲排序算法之插入排序
概述内部排序:全部数据可同时放入内存进行的排序。 外部排序:文件中数据太多,无法全部调入内存进行的排序。定义:设有记录序列:{R1、R2 ……….. Rn} 其相应的关键字序列为:{K1、K2 ……….. Kn}; 若存在一种确定的关系:Kx<= Ky<=… <=Kz 则将记录序列 { R1、R2 ……….. R...原创 2018-03-08 18:47:23 · 154 阅读 · 0 评论 -
树与二叉树的基本概念
树的基本概念树的定义:是n(n≥0)个结点的有限集合T。当n=0时,称为空树;当n>0时,该集合满足如下条件: 1.其中必有一个称为根(root)的特定结点,它没有直接前驱,但有零个或多个直接后继。 2.其余n-1个结点可以划分成m(m≥0)个互不相交的有限集T1,T2,T3,……,Tm,其中Ti又是一棵树,称为根root的子树。树的...原创 2018-04-08 16:29:04 · 163 阅读 · 0 评论 -
二叉树遍历
二叉树的遍历先序遍历(DLR):若二叉树不空,则: (1)访问根结点; (2)先序遍历左子树; (3)先序遍历右子树。图1的先序遍历结果:A B D F G C E H ...原创 2018-04-12 21:31:11 · 146 阅读 · 0 评论 -
哈夫曼树及其应用
哈夫曼树的概念 路径:从一个结点到另一个结点之间的分支序列 路径长度:从一个结点到另一个结点所经过的分支数目 结点的权:根据应用的需要可以给树的结点赋权值 带权路径长度:从根到该结点的路径长度与该结点权的乘积 树的带权路径长度:树中所有叶子结点的带权路径之和 哈夫曼树:由n个带权叶子结点构成的所有二叉树中带权路径长...原创 2018-04-12 21:43:16 · 4721 阅读 · 1 评论 -
基于线性表的查找
查找的基本概念 列表:由同一类型的数据元素(或记录)构成的集合,可利用任意数据结构实现。 关键字:数据元素的某个数据项的值,用它可以标识列表中的一个或一组数据元素。 查找:根据给定的关键字值,在特定的列表中确定一个其关键字与给定值相同的数据元素,并返回该数据元素在列表中的位置。 静态查找:在查找过程中只对数据元素进行查找。 动态...原创 2018-04-13 22:51:31 · 872 阅读 · 0 评论 -
二叉树的使用
二叉树的二叉链表存储表示typedef struct TreeNode{ char data; struct TreeNode *LChild; struct TreeNode *RChild;}BiTree;示例二叉树创建二叉树void CreateBiTree(BiTree **root){ char ch; scanf("%c", &ch); if (ch == '...原创 2018-05-01 15:08:19 · 204 阅读 · 0 评论 -
KMP算法的原理
算法思想 每当一趟匹配过程出现字符不相等时,主串指示器不用回溯,而是利用已经得到的“部分匹配”结果,将模式串的指示器向右“滑动”尽可能远的一段距离后,再继续进行比较。举例说明1. 首先,字符串“BBC ABCDAB ABCDABCDABDE”的第一个字符与搜索串“ABCDABD”的第一个字符进行比较。因为两字符不相等,所以搜索串向后移一位。2. 两字符不相等,继续向后移动。...原创 2018-05-03 09:32:34 · 905 阅读 · 1 评论 -
快速排序
快速排序 对于C++,快速排序是实践中已知最快的泛型排序算法。它的平均运行时间是O(NlogN)。基本思想原理 若序列中有n个元素,将第一个数据作为支点,将它放在表中合适的位置。以支点为界,序列分成两部分。其中左边数据小于等于支点,右半部分数据大于等于支点。然后,对左右两部分分别进行递归处理,直至排好序为止。将支点放在表合适位置—划分算法 设两个指针,i和...原创 2018-07-29 18:44:03 · 196 阅读 · 0 评论 -
可查询最值的栈
定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。示例class Solution {public: void push(int value) { stackData.push(value); if (stackMin.empty() || value < stackMin.top()) ...原创 2018-09-06 13:32:28 · 124 阅读 · 0 评论