摘要:
设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 push(x) —— 将元素 x 推入栈中。pop() —— 删除栈顶的元素。top() —— 获取栈顶元素。getMin() —— 检索栈中的最小元素。 示例: 输入:["MinStack","push","p 阅读全文
摘要:
什么是优先队列? 优先队列也是一种队列,只不过不同的是,优先队列的出队顺序是按照优先级来的;在有些情况下,可能需要找到元素集合中的最小或者最大元素,可以利用优先队列ADT来完成操作,优先队列ADT是一种数据结构,它支持插入和删除最小值操作(返回并删除最小元素)或删除最大值操作(返回并删除最大元素); 阅读全文
摘要:
一、线索二叉树的原理 通过考察各种二叉链表,不管儿叉树的形态如何,空链域的个数总是多过非空链域的个数。 n各结点的二叉链表共有2n个链域,非空链域为n-1个,但其中的空链域却有n+1个。如下图所示。 (除根结点以外,所有结点都有一共指向它的结点,所有非空链域为n-1,空链域为n+1) 因此,提出了一 阅读全文
摘要:
二叉树的遍历-链式存储 利用指针域我们便可以完美的存储非完全二叉树,如下: 结构体 struct TreeNode { TreeNode*left; TreeNode*right; char data; }; typedef TreeNode* BTree; 建树 BTree CreateBTree 阅读全文
摘要:
二叉树存储结构 存储结构: ① 顺序存储结构 ② 链式存储结构 顺寻存储结构 结构体 typedef int DataType ; struct SeqBinTree{ int MAXNUM; int n; DataType *nodelist; }; typedef SeqBinTree* PSe 阅读全文
摘要:
树的概念 之前介绍的所有的数据结构都是线性存储结构。本章所介绍的树结构是一种非线性存储结构,存储的是具有“一对多”关系的数据元素的集合。 图 1(A) 是使用树结构存储的集合 {A,B,C,D,E,F,G,H,I,J,K,L,M} 的示意图。对于数据 A 来说,和数据 B、C、D 有关系;对于数据 阅读全文
摘要:
KMP字符串匹配算法 算法流程 (1) 首先,主串"BBC ABCDAB ABCDABCDABDE"的第一个字符与模式串"ABCDABD"的第一个字符,进行比较。因为 B 与 A 不匹配,所以模式串后移一位。 (2) 因为 B 与 A 又不匹配,模式串再往后移。 (3) 就这样,直到主串有一个字符, 阅读全文
摘要:
主串和子串 主串与子串:如果串 A(如 "shujujiegou")中包含有串 B(如 "ju"),则称串 A 为主串,串 B 为子串。主串与子串之间的关系可简单理解为一个串 "包含" 另一个串的关系。 实现串的模式匹配的算法主要有以下两种: 普通的模式匹配算法; 快速模式匹配算法; BF算法原理 阅读全文
摘要:
字符串 1.1 字符串及其运算 1.2 字符串的存储表示 1.3 模式匹配 1.1 字符串及其运算 ⚫字符串:简称串,是特殊的线性表,其特殊性主要在于表 中的每个元素是一个字符,以及由此而要求的一些特殊操 作。 ⚫ 长度:一个串中包括的字符个数。长度为零的串称为空串。 ⚫ 子串:字符串s1中任意个连 阅读全文
摘要:
求 1+2+...+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。 示例 1: 输入: n = 3 输出: 6 示例 2: 输入: n = 9 输出: 45 方法一:递归 思路和算法 试想一下如果不加限制地使用递归的方法来实 阅读全文