Rumah > Java > javaTutorial > teks badan

Bagaimana untuk Mengendalikan Kurungan dalam Infix to Postfix Conversions?

Mary-Kate Olsen
Lepaskan: 2024-11-17 19:59:02
asal
159 orang telah melayarinya

How to Handle Parentheses in Infix to Postfix Conversions?

Mengendalikan Kurungan dalam Penukaran Infix to Postfix

Menukar ungkapan infiks kepada ungkapan postfix memerlukan pengendalian kurungan yang teliti. Kehadiran tanda kurung menimbulkan cabaran dalam menentukan susunan operasi yang betul. Untuk menangani perkara ini, pendekatan berikut boleh digunakan:

Mekanisme untuk Mengendalikan Tanda Kurung

Tekan Tanda Kurung Kiri: Apabila menghadapi kurungan kiri, tolaknya pada susunan operator.

Proses Tanda Kurung Betul: Apabila menemui kurungan yang betul:

  1. Operator pop dari tindanan dan tambahkannya pada rentetan output sehingga kurungan pembukaan ditemui.
  2. Jika tindanan kosong tanpa mencari kurungan pembuka, ini menunjukkan kurungan penutup yang tidak dapat dipadankan.
  3. Jika kurungan pembuka ditemui, keluarkannya dari tindanan.
  4. Pop kurungan yang betul daripada tindanan input.

Pelaksanaan Kod

Kod Java berikut menunjukkan cara mengubah suai kaedah toPostFix() untuk mengendalikan kurungan:

public String toPostFix() {
    StringBuilder postfixstr = new StringBuilder();

    Stack<Token> in_fix = new Stack<>();
    Stack<Token> post_fix = new Stack<>();

    for (int i = tokens.length - 1; i >= 0; i--) {
        t = new Token(tokens[i]);
        in_fix.push(t);
    }

    //there are still tokens to process
    while (!in_fix.empty()) {
        // is a number
        if (in_fix.peek().type == 1) {     
            postfixstr.append(in_fix.pop().toString());
        } 

        // is an operator and the stack is empty
        else if (in_fix.peek().type == 3 && post_fix.empty()) {   
            post_fix.push(in_fix.pop());
        } 

        // is an operator that has higher priority than the operator on the stack
        else if (in_fix.peek().type == 3 && in_fix.peek().isOperator() > post_fix.peek().isOperator()) {
            post_fix.push(in_fix.pop());
        } 

        // is an operator that has lower priority than the operator on the stack
        else if (in_fix.peek().type == 3 && in_fix.peek().isOperator() <= post_fix.peek().isOperator()) {
            postfixstr.append(post_fix.pop());
            post_fix.push(in_fix.pop());
        } 

        // opening (
        else if (in_fix.peek().type == 4) {   
            post_fix.push(in_fix.pop());
        }

        // closing )
        else if(in_fix.peek().type == 5){
            while(!(post_fix.isEmpty() || post_fix.peek().type == 4)){
                 postfixstr.append(post_fix.pop());
            }
            if (post_fix.isEmpty())
                ; // ERROR - unmatched )
            else
                post_fix.pop(); // pop the (
            in_fix.pop(); // pop the )
        }

        //puts the rest of the stack onto the output string
        if (in_fix.empty()) {
            while (!post_fix.empty()) {
                postfixstr.append(post_fix.pop());
            }
        }
    }

    return postfixstr.toString();
}
Salin selepas log masuk

Dengan melaksanakan langkah-langkah ini, kaedah toPostFix() boleh mengendalikan ungkapan yang melibatkan kurungan dengan berkesan, memastikan susunan operasi yang betul dan menghasilkan ungkapan postfix yang dikehendaki.

Atas ialah kandungan terperinci Bagaimana untuk Mengendalikan Kurungan dalam Infix to Postfix Conversions?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan