数据结构之栈应用

1.1括号匹配

leetcode 20 题

public boolean isValid(String s) {

//有效括号时隔4个月后重新打卡 看看栈学的怎么样

Stack stack=new Stack<>();

for(int i=0;i<s.length();i++){

char ch=s.charAt(i);

if(ch==‘(’||ch==‘{’||ch==‘[’){

stack.push(ch);

}else{

if(stack.empty()){

//右括号多

return false;

}else{

char ch1=stack.peek();

if(ch1==‘{’&&ch==‘}’||ch1==‘[’&&ch==‘]’||ch1==‘(’&&ch==‘)’){

stack.pop();

}else{

return false;

}

}

}

}

if(!stack.empty()){

return false;

}

return true;

}

1.2后缀表达式

a+b 这是我们最常见的表达式

前缀表达式就是+ab

后缀表达式就是ab+

转换方式就是每一个表达式用括号括起,将两个表达式中间的运算符放到括号外,加括号的顺序就是先乘除后加减

leetcode 150题

逆波兰表达式求值:这里是后缀表达式,所以减法就是后出的减先出的,除法也是。利用栈的特性来实现后缀表达式

public int evalRPN(String[] tokens) {

Stack stack=new Stack<>();

int num1=0;

int num2=0;

for(String str:tokens){

if(str.equals(“+”)){

num1=stack.pop();

num2=stack.pop();

stack.push(num1+num2);

}else if(str.equals(“-”)){

num1=stack.pop();

num2=stack.pop();

stack.push(num2-num1);

}else if(str.equals(“*”)){

num1=stack.pop();

num2=stack.pop();

stack.push(num1*num2);

}else if(str.equals(“/”)){

num1=stack.pop();

num2=stack.pop();

stack.push(num2/num1);

}else{

stack.push(Integer.parseInt(str));

}

}

return stack.pop();

}

1.3用栈实现队列

leetcode 232 题

用栈模拟出队列的push(),pop(),peek(),empty() 方法

class MyQueue {

public Stack stack1;

public Stack stack2;

/** Initialize your data structure here. */

public MyQueue() {

stack1 =new Stack<>();

stack2 =new Stack<>();

}

/** Push element x to the back of queue. */

public void push(int x) {

stack1.push(x);

}

/** Removes the element from in front of queue and returns that element. */

public int pop() {

if(stack2.empty()){

while(!stack1.empty()){

stack2.push(stack1.pop());

}

}

return stack2.pop();

}

/** Get the front element. */

public int peek() {

if(stack2.empty()){

while(!stack1.empty()){

stack2.push(stack1.pop());

}

}

return stack2.peek();

}

/** Returns whether the queue is empty. */

public boolean empty() {

return stack1.empty()&&stack2.empty();

}

}

/**

  • Your MyQueue object will be instantiated and called as such:

  • MyQueue obj = new MyQueue();

  • obj.push(x);

  • int param_2 = obj.pop();

  • int param_3 = obj.peek();

  • boolean param_4 = obj.empty();

*/

1.4最小栈

leetcode 155题

class MinStack {

//定义双栈来实现最小栈

public Deque stack1;

public Deque minStack;

/** initialize your data structure here. */

public MinStack() {

stack1=new LinkedList();

minStack=new LinkedList();

minStack.push(Integer.MAX_VALUE);

}

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

在面试前我整理归纳了一些面试学习资料,文中结合我的朋友同学面试美团滴滴这类大厂的资料及案例

MyBatis答案解析
由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!

大家看完有什么不懂的可以在下方留言讨论也可以关注。

觉得文章对你有帮助的话记得关注我点个赞支持一下!
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
存中…(img-MqymHz7S-1713714073029)]

[外链图片转存中…(img-lxPWuzvr-1713714073029)]
由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!

大家看完有什么不懂的可以在下方留言讨论也可以关注。

觉得文章对你有帮助的话记得关注我点个赞支持一下!
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 20
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值