队列、栈 2023年11月8日总结

@Override
    public boolean offer(E e) {
        Node<E> added=new Node<>(e,head);
        tail.next=added;
        tail=added;
        return true;
    }
//队列尾指针插入元素,头指针删除元素

环形数组(tail+1)%数组长度==head 说明环形数组已满,其实空了一个元素,但如果head==tail则无法判断数组是满还是空;

(可以添加第三个变量来减少那个位置的缺失,不够时间复杂度增高)

二进制除法

商是高位

余数是除数几位余数就几位,相当于右移

与运算       

按位与运算 2的n次方与2的n次方-1按位与运算位0

102. 二叉树的层序遍历 - 力扣(LeetCode)

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        
        List<List<Integer>> lists=new LinkedList<>();
        if(root==null){
            return lists;
        }
        Queue<TreeNode> queue=new  LinkedList<>(); 
        queue.offer(root);
        int c1=1;
        while(!queue.isEmpty()){
            List<Integer> list=new LinkedList<>();
            
            int c2=0;
            for(int i=0;i<c1;i++){
                TreeNode node=queue.poll();
                list.add(node.val);
                if(node.left!=null){
                    queue.offer(node.left);
                    c2++;
                }
                if(node.right!=null){
                    queue.offer(node.right);
                    c2++;
                }
                
            }
            lists.add(list);
            c1=c2;
        }
        return lists;

    }
}

   栈

队列

20. 有效的括号 - 力扣(LeetCode)

class Solution {
    public static boolean  isValid(String s){
        if(s==null)return true;
        
        Stack<Character> stack=new Stack<>();
        for(int i=0;i<s.length();i++){
            char c=s.charAt(i);
            //先将所有右括号入栈
            if(c=='('){
                stack.push(')');
            }
            else if(c=='['){
                stack.push(']');
            }else if(c=='{'){
                stack.push('}');
            }else{
                if(!stack.isEmpty()&&stack.peek()==c) {//非空才能判断是否可以出栈,右括号比左括号多会出现这种情况
                    stack.pop();
                }else{
                    return false;
                }
            }
        }
        if(stack.isEmpty()){
            return true;
        }else{
            return false;
        }
    }
}

后缀表达式求值

150. 逆波兰表达式求值 - 力扣(LeetCode)

LInkedList实现队列(Queue)和堆栈(Stack)_linkedlist stack-CSDN博客(LinkeList可以实现队列和栈内的方法)

class Solution {
    public int evalRPN(String[] tokens){
        LinkedList<Integer> stack=new LinkedList<>();
   
        for (String s : tokens) {
            switch(s){
                case  "+":
                    Integer p1 = stack.pop();
                    Integer p2 = stack.pop();
                    stack.push(p1+p2);  
                    break;
                case  "-":
                    Integer p3 = stack.pop();
                    Integer p4 = stack.pop();
                    stack.push(p4-p3);
                    break;
                case  "*":
                    Integer p5 = stack.pop();
                    Integer p6 = stack.pop();
                    stack.push(p6*p5);
                    break;
                case  "/":
                    Integer p7= stack.pop();
                    Integer p8 = stack.pop();
                    stack.push(p8/p7);
                    break;
                default:stack.push(Integer.parseInt(s));// 通过Integer包装类将数组内的数字压入栈中   
            }
          
        }


          return stack.pop();
}
}

Java将中缀表达式转化为底层的后缀表达式

后缀表达式如下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

liu12345_6789

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值