![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
lamdaxu
微信公众号:【lamdaxu】,欢迎大家关注
展开
-
逆波兰表达式求值问题
逆波兰表达式逆波兰表达式又被称为后缀表达式。特点:运算符总是放在它相关数的后面中缀表达式中缀表达式就是平常生活中使用的表达式,特点:二元运算符总是置于两个操纵数中间解题思路:1.创建一个栈对象oprands存储操作数2.从左到右遍历逆波兰表达式,得到每一个字符串3.判断字符串是不是运算符,如果不是,则说明是操纵数,把操纵数压入栈中4.如果是运算符,则从oprands中弹出两个操作数o1,o25.使用该运算符计算o1和o2,得到结果result6.把该结果压入oprands栈中7.遍历结原创 2020-09-06 08:03:14 · 296 阅读 · 0 评论 -
队列
队列队列是基于先进先出的数据结构,是一种只能在一端进行插入,在另一端进行删除操作的特殊线性表,它按照先进先出的原则存储数据,先进入的数据,在读取数据时先被读出来public class Queue<T> implements Iterable<T>{ //记录首节点 private Node head; //记录尾结点 private Node last; //记录队列中元素个数 private int N; public原创 2020-09-06 08:01:35 · 120 阅读 · 0 评论 -
符号表
符号表符号表最主要的目的是将一个键和一个值联系起来,符号表能够将存储的数据元素是一个键和一个值组成的键值对数据,我们可以根据键来查找对应的值无序符号表的实现//符号表public class SymbolTable<Key,Value>{ //记录首结点 private Node head; //记录符号表中元素的个数 private int N; public SymbolTable(){ head=new Node(null,原创 2020-09-06 08:00:14 · 169 阅读 · 0 评论 -
二叉查找树
树树是由n(n>=1)个有限结点组成一个具有层次关系的集合,把它叫做树是因为它看起来像一颗倒挂的树,根朝上,叶朝下树具有的特点:1.每个结点有零个或多个子结点2.没有父结点的结点为根结点3.每一个非根节点只有一个父结点,4.每个结点及其后代结点整体上都可以看做一棵树称为当前结点的父结点的一个子树二叉查找树的实现插入方法put的实现思想:1.如果当前树中没有任何一个结点,则直接把新结点当做根结点使用2.如果当前树不为空,则从根结点开始2.1如果插入结点的key小于当前结点的ke原创 2020-09-06 07:58:13 · 117 阅读 · 0 评论 -
折纸问题
问题描述请把一段纸条竖着放在桌子上,然后从纸条的下边向上方对折1次,压出折痕后展开。此时 折痕是凹下去的,即折痕突起的方向指向纸条的背面。如果从纸条的下边向上方连续对折2次,压出折痕后展开,此时有三条折痕,从上到下依次是下折痕、下折痕和上折痕给定一 个输入参数N,代表纸条都从下边向上方连续对折N次,请从上到下打印所有折痕的方向 例如:N=1时,打印: down;N=2时,打印: down down up分析:我们把对折后的纸张翻过来,让粉色朝下,这时把第一次对折产生的折痕看做是根结点,那第二次对折原创 2020-09-06 07:54:37 · 271 阅读 · 0 评论 -
堆介绍
堆堆通常可以被看做是一棵完全二叉树的数组对象。堆的特性1.它是完全二叉树,除了树的最后一层结点不需要是满的,其他的每一层从左到右都是满的,如果最后一层结点不是满的,那么要求左满右不满2.它通常用数组来实现。具体方法就是将二叉树的结点按层级顺序放入数组中,根节点的在位置1,它的子节点在位置2和位置3,而子节点的子节点则分别在位置4,5,6,7如果一个结点的位置为k,则它的父节点的位置为[k/2],而它的两个子节点的位置分别是2K和2K+1。这样,在不使用指针的情况下,我们也可以通过计算数组的索引在原创 2020-09-06 07:51:53 · 193 阅读 · 0 评论 -
优先队列
优先队列普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在某些情况下,我们可能需要找出队列中的最大值或者最小值。普通的队列要完成这样的功能,需要每次遍历队列中的所有元素,比较并找出最大值,效率不是很高,这个时候我们就可以使用一种特殊的队列来完成这种需求,那就是优先队列优先队列按照其作用不同,可以分为以下两种:最大优先队列:可以获取并删除队列中最大的值最小优先队列:可以获取并删除队列中最小的值最大优先队列//最大优先队列public class MaxPriorityQue原创 2020-09-05 09:57:24 · 2326 阅读 · 0 评论 -
红黑树
红黑树红链接:将两个2-结点连接起来构成一个3-结点黑链接:2-3树中的普通链接红黑树是一种自适应二叉树,通过左旋,右旋来实现树的平衡。红黑树是含有红黑链接并满足下列条件的二叉查找树:1.红链接均为左链接2.没有任何一个结点同时和两条红链接相连3.该树是完美黑色平衡的,即任意空链接到根节点的路径上的黑链接数量相同左旋当某个结点的左子结点为黑色,右子结点为红色,此时需要左旋。前提:当前结点为h,它的右子结点为x;左旋过程:1.让x的左子结点变为h的右子结点:h.right=x.left原创 2020-09-05 09:52:14 · 124 阅读 · 0 评论 -
并查集
并查集并查集也是一种树型结构,但这棵树跟我们之前讲的二叉树、红黑树、B树等都不一样,这种树的要求比较简单:每个元素都唯一的对应一个结点;每一组数据中的多个元素都在同一颗树中;一个组中的数据对应的树和另外一个组中的数据对应的树之间没有任何联系;元素在树中并没有子父级关系的硬性要求;//并查集代码public class UF { private int[] eleAndGroup; //记录结点元素和所在分组的标识 private int count; //记录并查集中数据分原创 2020-09-05 09:40:53 · 98 阅读 · 0 评论 -
无向图
无向图边仅仅连接两个顶点常见图的存储结构有两种:邻接矩阵和邻接表邻接矩阵1.使用一个v*v的二维数组int[V][V] adj,把索引的值看做顶点2.如果顶点v和顶点w相连,我们只需要将adj[v][w]和adj[w][v]的值设置为1,否则设置为0邻接表1.使用一个大小为V的数组 Queue[V] adj,把索引看做顶点2.每个索引处adj[v]存储了一个队列,该队列中存储的是所有与该顶点相邻的顶点//无向图public class Graph { private fin原创 2020-09-05 09:14:46 · 3283 阅读 · 2 评论