JAVA初阶初阶结构练习(栈)

本文介绍了如何使用栈实现基础操作如打印链表、中缀表达式转后缀表达式、逆波兰式计算以及括号匹配。还讨论了栈在处理最小栈问题中的应用,展示了Java和C++代码示例。
摘要由CSDN通过智能技术生成

1  基础练习

答案:C

 答案:B

 2.打印栈

// 递归方式
void printList(Node head){
if(null != head){
printList(head.next);
System.out.print(head.val + " ");
}
}
// 循环方式
void printList(Node head){
if(null == head){
return;
}
Stack<Node> s = new Stack<>();
// 将链表中的结点保存在栈中
Node cur = head;
while(null != cur){
s.push(cur);
cur = cur.next;
}

3.表达式转换

中缀转后缀写代码有点难emmm后续算法我会补上(关注我,算法专栏会详细讲解)

中缀转后缀数字图 

 

神奇的栈

用栈来表达后缀表达式

遇到符号弹出和右边操作数进行运算然后放入栈以此循环,最后剩下的数字就是运算结果

学过安卓的同学相信会很熟悉(后续会更新安卓感兴趣可以关注一下)

总结:只要是数字就放到栈里面,遇到运算符,就弹出栈顶元素,这两个元素进行运算。

4.逆波兰式(打了20minemmmm累)

代码实现(敲太嗨了搞成c++的了主题代码是对的搞到java中)

class Solution {
public:
    int evalRPN(vector<string>& tokens) {
     stack<Integer> stack = new stack<>() ;
     for(i = 1; i <= tokens.length;i++){
        //每次循环可以拿到字符串所以要判断运算符是否合法,定义一个私有方法isOperations方法
        string str = takens[i] ;//将String类型变成int类型
        if(isOperations(str)){
           //不是运算符就是数字就放入栈
           int val = Integer.valueof(str);
           stack.push(val)
        }else{
           //式运算符,如果是运算符就弹出两个元素
           int num2 = stack.pop();//先弹出一个然后计算
           int num2 = stack.pop();
           switch(str){
            case"+":
            stack.push(num1 + num2);
            break;
             case"-":
              stack.push(num1-num2);
            break;
             case"*":
              stack.push(num1*num2);
            break;
             stack.push(num1/num2);
             case"/":
            break;
           }
        }
        return stack.pop;//最后的元素就是计算结果
     }
     //只要式加减乘除就式true
     private boolean isOperations (string){
        if(str.equals("+")||str.equals("-")||str.equals("*")||str.equals("/")){
           return true;
        }else{
            return false;
        }
     }
    }
};

5.括号匹配 

不能以括号次数来判断

一般和顺序相关的排序就可以考虑使用栈。

栈的弹出可以更好的判断括号

定义一个下标i来标记,红色的框是三种不匹配的情况其他情况都是匹配的

代码实现 

6.最小栈

 思路

代码实现

评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Frank1-0-2-4

我会继续努力的,十分感谢谢谢你

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值