[数据结构]栈的深入学习-java实现
创始人
2024-06-01 10:33:09
0
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 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;}
}

总结

今天栈的相关内容就到这里,祝你学习进步,感谢你的支持!

相关内容

热门资讯

世事繁华不及你惊鸿一瞥什么意思... 世事繁华不及你惊鸿一瞥什么意思?理解这句话首先要明白惊鸿一瞥的意思。那惊鸿一瞥什么意思呢——只是匆匆...
朋友梦见我在火里让她救我是什么... 朋友梦见我在火里让她救我是什么意思?如果你们是单纯的朋友可能说明友谊很好吧,如果不是单纯的,那可能是...
猜谜啦!猜谜啦!很多谜语哦! 猜谜啦!猜谜啦!很多谜语哦!1,开方2,3.4,5,圆周率6。王,8,丕9,10,丰11,晶12,偶...
女孩子说感觉有点怪 女孩子说感觉有点怪这对她来说比较突然,而且也许她现在自己也不能分辨出她对你的感觉到底是喜欢还是好朋友...
南京银行股份有限公司关于实施“... 证券简称: 南京银行 证券代码: 601009 编号: 2025-052优先股简称:南银优1 优先股...
科技赋能“气象+”,一场助企富... (来源:工人日报) “8月头季稻卖一块八毛,10月份再收一季,两季加起来一亩地收上千元!”四川...
取一杯天上水是指月光吗 取一杯天上水是指月光吗不是。是指下雨的时候接一杯天上掉下来的雨水,最纯洁的水最有灵性的水。这杯水在晚...
为什么越来越觉得赚钱比男朋友重... 为什么越来越觉得赚钱比男朋友重要?我也这么认为,因为男朋友不够好。还没遇到真心待自己的人或者,是因为...
腐团儿现实中有男朋友吗? 腐团儿现实中有男朋友吗?腐团儿现实中有男朋友吗?这个谁知道呢一或者暗中有也不一定这种明星私事我也不是...
元宵与汤圆有啥区别 元宵与汤圆有啥区别元宵和汤圆的区别:1.馅料选择不同,汤圆馅偏软,咸甜荤素选择众多,元宵馅偏硬,以甜...