栈结构
栈结构
王胖子总叫我减肥
学习使我进步
展开
-
Java数据结构与算法之-----如何翻转栈的所有元素,如何排序栈中的元素(递归)
1.问题 翻转栈的所有的元素,如果输入栈{1,2,3,4,5},其中1 在栈顶,翻转之后的栈为{5,4,3,2,1},5在栈顶。2 问题分析 思路1: 首先最简单的方法就是申请一个新的栈,把原来栈中的元素依次弹出,并且压如到新的栈中,这种方法的空间复杂度高,但是简单。 思路2 :采用递归的方法 递归程序需要注意两个关键因素:递归定义和递归终止的条件。 递归定义:将当前栈的最底元素移动到栈顶,...原创 2020-07-29 15:26:20 · 409 阅读 · 0 评论 -
Java数据结构与算法-----如何从给定的车票中找出旅程
1.问题 给定一趟旅途中所有的车票信息,根据这个车牌哦信息找出这趟旅程的路线。例如,给定下面的车票:(“西安---成都”),北京--上海,大连--西安 , 上海--大连,那么可以得到的旅程路线就是:北京-上海- 上海--大连--大连-西安 西安--成都,假定给定的车票不会有环,也就是说,有一个城市只能作为终点,不能作为起点。2 思路分析 根据车票的信息构建一个HashMap,然后会这个hashMap 中找到整个旅程的起点,接着就可以从起到出发一次找到下一站,进而知道终点,具体的思...原创 2020-07-30 16:55:39 · 173 阅读 · 0 评论 -
Java数据结构与算法------如何实现LRU缓存方案
1.问题 LRU是least Recently Used 的缩写,他的意思是“最近最少使用”。LRU缓存就是使用功能这种原理实现的。简单的说,就是缓存一定量的数据,当超过设定阈值时就把一些过期的数据删除掉,常用于页面置换算法,为虚拟页式存储管理中常用的算法、2 思路分析: 可以使用两个数据结构实现一个LRU缓存。 1)使用双向链表实现的队列。队列的最大容量为缓存的大小,在使用过程中,把最近使用的页面移动到队列头,最近没有使用到的页面放在队列尾的位置。2)使用一个哈希表,...原创 2020-07-30 15:40:21 · 230 阅读 · 0 评论 -
Java数据结构与算法-----如何设计一个排队系统
1.问题 设计一个排队系统,能够让每个进入队的用户都能看到自己在队列中所处的位置和变化。队列可能随时有人加入和退出,当有人退出时影响到用户的位置需要及时的反馈到用户。2.问题分析: 不仅要实现队列常见的入队和出队的功能,还要实现队列中任意元素可以随时出队,并且出队列后需要更新队里用户位置的变化。3 代码实现package Queue;import java.util.LinkedList;import java.util.Objects;import ja...原创 2020-07-30 14:27:16 · 1372 阅读 · 1 评论 -
Java数据结构与算法----如何用两个栈模拟队列
1 分析 要求用两个栈模拟队列,假设使用功能栈A和栈B来模拟队列Q,A为插入栈,B为弹出栈,以实现队列Q。 假设栈A和栈B都为空栈,可以认为A栈提供进队的功能,B栈提供出队的功能。出队需要考虑一下两种情况: 1) 如果栈B不为空,则直接弹出B的数据。 2) 如果栈B为空,则一次的弹出A的数据放入B中,在弹出栈B的数据2 代码实现package Stack;import java.util.Stack;public class myStack1<T...原创 2020-07-29 19:45:20 · 101 阅读 · 0 评论 -
Java数据结构与算法----如何用O(1)的时间复杂度求栈中最小元素
1.问题 如何用O(1)的时间复杂度求栈中最小元素。2 问题分析: 由于具有先进后出的特点,因此push和pop只需要对栈顶元素进行操作。这样只能访问到栈顶的元素,无法得到栈中的最小的元素。当然可以使用另外一个变量来记录栈底的元素,通过遍历栈中的所有元素找出最小值,但是此种方法的时间复杂度为O(N)。 要想让算法的时间复杂度为O(N),可以采用时间换空间的方式来提高时间的复杂度。也就是说采用额外的存储空间来降低时间的复杂度。 主要思路:使用两个栈结构,一个...原创 2020-07-29 19:27:12 · 286 阅读 · 0 评论 -
Java数据结构与算法------如何根据入栈序列判断可能的出栈序列
1 问题 输入两个整数序列,其中一个序列表示站的push(入栈)顺序,判读另一个序列有没有可能是对应的pop(出站)顺序。2 思路分析 1) 把push序列依次入栈,直到栈顶元素等于pop序列的第一个元素,然后栈顶元素出站,pop序列的移动到第二个元素。 2)在1)后,如果栈顶元素还等于pop序列现在的元素,则继续执行第一步里面的不走,出栈同时pop后移;否则push序列继续 入栈,同时和pop序列继续和比较。 3) 当pus...原创 2020-07-29 16:45:51 · 537 阅读 · 0 评论 -
java数据结构与算法之栈结构----波兰计算器
1 需求: 1).输入一个逆波兰表达式(后缀表达式),使用栈(Stack),计算其结果。 2)这里我们只支持整数。2 思路分析: 例如:(3+4)*5-6 对应的后缀表达式为 3 4 + 5 * 6 - ,针对后缀表达式求值步骤如下: 1. 从左向右扫描,将3 和4 压入堆栈中。 2. 遇到 + 运算符,因此弹出4 和3 (4位栈顶元素,3为次顶元素),计算出3+4的值,得7,再将7 入栈 3. 将5 入栈; 4 ...原创 2020-06-10 12:47:29 · 98 阅读 · 0 评论 -
java数据结构与算法之栈结构----栈实现综合计算器(中缀表达式)
1.使用栈来实现综合计算器 计算 【7*2*2-5+1+5-3】2.思路分析 1. 通过一个索引值(index),来遍历我们输入的表达式 2. 如果我们发现是一个数字,就直接入数栈。 3. 如果发现 是一个符号,就分为以下情况: 3.1 如果发现当前的符号栈为空,就直接入符号栈。 3.1 如果符号栈中有操作符,就进行比较,如果当前的操作符的优先级小于或者等于栈中的操作符,就需要...原创 2020-06-04 14:38:56 · 217 阅读 · 1 评论 -
java数据结构之栈结构之算法(上)--用数组和链表模拟栈结构
1. 栈(Stack)的概念:栈是一个先进后出的有序列表。 栈是限制线性表中元素的出入和删除只能在线性表的一段进行的一种特殊线性表。允许插入和删除的一端,为变化的一 端,成为栈顶 ,另一端为固定的一端,成为栈底。 最先存放入栈中的元素在栈底,最后放入栈中的元素在栈顶。删除元素时正好相反,最后放入的元素最先删除,最先放入的元素最后删除。 2. 用数组来模拟栈结构: 由于栈是一种有序列表,可以通过数组的结构来存储栈的数据内...原创 2020-06-03 22:19:08 · 110 阅读 · 0 评论