CSDN的各位uu们你们好,今天千泽带来了栈的深入学习,我们会简单的用代码实现一下栈,
接下来让我们一起进入栈的神奇小世界吧!
0.速览文章
- 一、栈的定义
- 1. 栈的概念
- 2. 栈的图解
- 二、栈的模拟实现
- 三.栈的经典使用场景-逆波兰表达式
- 总结
一、栈的定义
1. 栈的概念
栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈
顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。
2. 栈的图解
压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。
出栈:栈的删除操作叫做出栈。出数据在栈顶。
可以看出,入栈和出栈会改变栈顶.
二、栈的模拟实现
Java集合中的Stack类在底层是一个顺序表 , 那么我们可以简单的用一个数组来模拟栈
import java.util.Arrays;
public class MyStack {
public int [] elem;
public int usedSize;
public MyStack() {
this.elem = new int [5];
}
public void push(int val){
if(isFull()){
this.elem = Arrays.copyOf(this.elem,2*this.elem.length);
}
this.elem[this.usedSize] = val;
this.usedSize++;
}
public boolean isFull(){
return this.usedSize == elem.length;
}
public int pop(){
if(isEmpty()){
throw new RuntimeException("栈为空!");
}
int OldValue = this.elem[usedSize - 1];
this.usedSize--;
return OldValue;
}
public int peek(){
if(isEmpty()){
throw new RuntimeException("栈为空!");
}
return this.elem[usedSize - 1];
}
public boolean isEmpty(){
return this.usedSize == 0;
}
}
友友们可以动手实践一下,数据结构一定要多写多画图多总结!
三.栈的经典使用场景-逆波兰表达式
现在,我们了解了栈的相关代码写法, 那么我们一起来看一下栈在题目中的应用
150. 逆波兰表达式求值
https://leetcode.cn/problems/evaluate-reverse-polish-notation/
解法:
在这里插入代码片import java.util.Stack;
public class 逆波兰 {
int i = 0 ;
public int evalRPN(String[] tokens) {
Stack<Integer> stack = new Stack<>();
for(int i = 0; i < tokens.length; i++){
String val = tokens[i];
if(isOperation(val) == false){
stack.push(Integer.parseInt(val));
}else {
int num1 = 0;
int num2 = 0;
switch (val){
case "+":
num2 = stack.pop();
num1 = stack.pop();
stack.push(num1 + num2);
break;
case "-":
num2 = stack.pop();
num1 = stack.pop();
stack.push(num1 - num2);
break;
case "*":
num2 = stack.pop();
num1 = stack.pop();
stack.push(num1 * num2);
break;
case "/":
num2 = stack.pop();
num1 = stack.pop();
stack.push(num1 / num2);
break;
}
}
}
return stack.pop();
}
public boolean isOperation(String str){
if(str.equals("+") || str.equals("-") || str.equals("*") || str.equals("/")){
return true;
}
return false;
}
}
总结
今天栈的相关内容就到这里,祝你学习进步,感谢你的支持!