Javaスタック

スタック:線形テーブルの一種であり、線形テーブルの一方の端での挿入および削除操作に制限されています。挿入と削除を許可する端をスタックの最上位と呼び、挿入と削除を許可しない端を
ここに画像の説明を挿入
スタックの最下部と呼びますスタックにはプッシュとポップの2つの簡単な操作しかありませんが、さらに多くのことを実現できます。複雑な効果。たとえば
、文字列 '{[()]}'の括弧が上記と一致するかどうかを確認します。
アイデアについて話しましょう:{、[、(が一致すると、スタックにプッシュされます。一致) 、]、}はスタック比較
コードの実装です

import java.util.Scanner;  
import java.util.Stack;  
  
public class Main {
    
      
    public static void main(String[] args) {
    
      
        Scanner scan = new Scanner(System.in);  
        int N = scan.nextInt();  
        String s;  
        for (int i = 0; i < N; i++) {
    
      
            s = scan.next();  
            if (isMatch(s)) {
    
      
                System.out.println("Yes");  
            } else {
    
      
                System.out.println("No");  
            }  
        }  
    }  
    private static boolean isMatch(String s) {
    
      
        Stack<Character> sk = new Stack<Character>();  
        for (int i = 0; i < s.length(); i++) {
    
      
            if (s.charAt(i) == '(') {
    
      
                sk.push('(');  
            }  
            if (s.charAt(i) == ')') {
    
      
                if (!sk.isEmpty() && sk.pop() == '(')  
                    continue;  
                else  
                    return false;  
            }  
            if (s.charAt(i) == '[') {
    
      
                sk.push('[');  
            }  
            if (s.charAt(i) == ']') {
    
      
                if (!sk.isEmpty() && sk.pop() == '[')  
                    continue;  
                else  
                    return false;  
            }  
        }  
        if (sk.isEmpty())  
            return true;  
        else  
            return false;  
    }  
}  

そして、コンピューターはこの式をどのように計算しますか?
1+(5 + 2)X6は、
我々は最初の5 + 2 = 7、その後、逓倍数7 * 6 = 42ブラケットを計算する必要があることを知って、そして最終的にはプラス42 + 1 = 43に署名。
のスタックを使用する方法高速計算?最初にいくつかのルールを作成します

  1. すべてのデジタル出力を直接
  2. オペレーターの優先順位は、スタックへのプッシュよりも高くなります。それ以外の場合は、優先順位が高いか同じであるすべての演算子をスタックから、または括弧までポップしてから、すべての演算子をスタックにプッシュします。
  3. 開き括弧はすべてスタックにプッシュされます
  4. 左括弧がスタックに含まれている場合、すべての演算子がスタックにプッシュされます
  5. 右括弧の場合、左括弧が一致するまでスタックが継続的にポップされます

これらのいくつかのルールの後、接尾辞式「152 + 6X +」を取得します。スタックを再度使用してスタック上の任意の数値をプッシュし、任意の演算子がスタックを2回ポップする
ため、152がスタックにプッシュされ、+記号が検出されます。スタックから2がポップされ、次に5がポップされます。スタックは7を取得するように操作され、結果はスタックにプッシュされます。次に、6もスタックにプッシュされ、X番号に遭遇すると、2回ポップされ、6がスタックからポップされ、
次に7がポップされて42を取得する操作が実行され、結果がスタックにプッシュされます。最後は+記号で、スタックは2回ポップされ、42が最初にポップされ、次にスタックが計算のためにポップされます。スタックは空で、最終結果は43です。

おすすめ

転載: blog.csdn.net/qq_36008278/article/details/115173545