堆栈是一种 “后进先出” (LIFO) 的数据结构, 只能在一端进行插入(称为 “压栈” ) 或删除 (称为“出栈”)数据的操作,Stack堆栈添加移除元素的原则是后进先出。
Stack类的主要方法是:push(), peek(), pop(), empty(), search()。
push() - 将元素推送到堆栈顶部(在栈顶添加元素)peek() - 返回栈顶的元素,但是不删除栈顶元素pop() - 和peek()一样返回栈顶元素,但是要将栈顶元素移除掉 即移除并返回堆栈的顶部元素 如果我们在调用堆栈为空时调用pop(),则抛出’EmptyStackException’异常 empty() - 检查栈是否为空 如果堆栈顶部没有任何内容,则返回true。否则,返回false。 earch() - 返回元素在堆栈中的位置基础篇
Stack stack = new Stack();String s1 = "element 1";
String s2 = "element 2";stack.push(s1);
stack.push(s2);
现在栈中有两个元素,栈顶应该是element 2,我们可以通过peek方法看栈顶的元素:
System.out.println(stack.peek());
输出:element 2
要看element 1的位置需要使用search方法:
int pos = stack.search("element 1");
System.out.println(pos);
上面代码将输出:2
要移除栈顶的元素应该用pop()方法:
System.out.println(stack.pop());
System.out.println(stack.pop());
在上一步中栈中的两个元素都被pop了,现在我们看下empty()方法是否返回true
System.out.println(stack.empty());
输出:true
进阶篇
LeetCode:每日温度【739】
题目描述:根据每日气温列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高超过该日的天数。如果之后都不会升高,请在该位置用 0 来代替。例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。
class Solution{public int[] dailyTemperatures(int[] T) {// 单调栈 里面的数 非递增排序 Stack<Integer> stack = new Stack<>();int[] res = new int[T.length];for(int i=res.length-1; i>=0; i--) {// 当前元素比栈顶元素大 出栈 重新调整栈直至满足要求while(!stack.empty() && T[i]>=T[stack.peek()]) {stack.pop();}// 栈为空 即后面没有比当前天温度高的// 不为空 栈顶元素对应的下标减去当前下标即为经过几天后温度比当前天温度高res[i] = stack.empty()?0:stack.peek()-i;// 当前元素进栈stack.push(i);}return res;}
}
更多推荐
堆栈,温度,LeetCode,Stack,JAVA
发布评论