压栈:栈的插入操作叫做进栈/压栈/入栈。入数据在栈顶。
出栈:栈的删除操作叫做出栈。出数据在栈顶。
1.2 栈的基本操作public class TestStack {
public static void main(String[] args) {
Stack s=new Stack();
//入栈
s.push(1);
s.push(2);
s.push(3);
s.push(4);
s.push(5);
System.out.println(s.size());
System.out.println(s.peek());
s.pop();
s.pop();
System.out.println(s.peek());
if(s.empty()){
System.out.println("是空栈");
}else{
System.out.println("不是空栈");
}
}
}
1.3 模拟实现
public class TestStack021.4 oj题目{ E[] array=(E[])new Object[3];//栈的大小为3 int size=0;// //1.入栈 public E push(E value){ // if(top==array.length){ // System.out.println("栈已满"); // } ensureCapacity(); array[size++]=value; return value; } //2.判断为空 public boolean empty(){ if(0==size){ return true; } return false; } public int size(){ return size; } //3.取出栈顶元素 public E peek(){ if(empty()){ throw new RuntimeException("栈为空,无法获取栈顶元素"); } return array[size-1]; } //4.出栈 public E pop(){ E value=peek(); size--; return value; } public void ensureCapacity(){ if(size== array.length){ array= Arrays.copyOf(array,size*2); } } //测试该类 public static void main(String[] args) { TestStack02 ms = new TestStack02(); ms.push("hello"); ms.push("我"); ms.push("and"); ms.push("张张"); ms.push("yeap"); ms.push("!"); System.out.println(ms.size()); System.out.println(ms.peek()); System.out.println(ms.pop()); System.out.println(ms.pop()); System.out.println(ms.peek()); System.out.println(ms.empty()); } }
逆波兰表达式求值(如果是整数直接入栈,如果是运算符,取两个元素进行操作后再将结果入栈)
class Solution {
public int evalRPN(String[] tokens) {
Stack s=new Stack<>();
for(String e : tokens){
if(!((e.equals("+")) || (e.equals("*"))
|| (e.equals("-")) || (e.equals("/")) )){
s.push(Integer.parseInt(e));
}else{
int right=s.pop();
int left =s.pop();
switch(e){
case"+":
s.push(left+right);
break;
case"-":
s.push(left-right);
break;
case"*":
s.push(left*right);
break;
case"/":
s.push(left/right);
break;
}
}
}
return s.peek();
}
}



