括号匹配算法求解(用栈实现)

1.括号匹配算法

        //括号匹配算法

        public void pipei()throws Exception{

            char temp,ch;

            int match;    //记录匹配结果

            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

            ch=(char) br.read();        //输入一个字符

            while(ch!='0'){

                if(getTop()==-1){

                    push(ch);

                }else{

                    temp=pop();        //取出栈顶元素

                    match=0;    //判断是否匹配(默认不匹配)

                    if(temp=='('&&ch==')')

                        match=1;

                    if(temp=='['&&ch==']')

                        match=1;

                    if(temp=='{'&&ch=='}')

                        match=1;

                    if(temp=='<'&&ch=='>')

                        match=1;

                    if(match==0){    //如果不匹配

                        push(temp);    //将原栈顶元素重新入栈

                        push(ch);    //将输入的括号字符入栈

                    }

                }

                ch=(char) br.read();    //输入下一个字符

            }

            if(isEmpty()){

                System.out.println("输入的括号完全匹配!");

            }else{

                System.out.println("输入的括号不匹配,请检查!");

            }

        }

2.括号匹配求解示例

package com.cn.datastruct;



import java.io.BufferedReader;

import java.io.InputStreamReader;

import java.util.Scanner;



public class KuoHaoPiPei {

    static class Stack{

        char[] data;  //存放数据

        int MaxSize;    //最大容量

        int top;        //栈顶指针

        //构造方法

        public Stack(int MaxSize){

            this.MaxSize=MaxSize;

            data = new char[MaxSize];

            top = -1;

        }



        public int getMaxSize() {

            return MaxSize;

        }



        public int getTop() {

            return top;

        }



        public boolean isEmpty(){

            return top==-1;

        }

        

        public boolean isFull(){

            return top+1==MaxSize;

        }

        //入栈

        public boolean push(char data){

            if(isFull()){

                System.out.println("栈已满!");

                return false;

            }

            this.data[++top]=data;

            return true;

        }

        //出栈

        public char pop() throws Exception{

            if(isEmpty()){

                throw new Exception("栈已空!");

            }

            return this.data[top--];

        }        

        //获得栈顶元素

        public char peek(){

            return this.data[getTop()];

        }

        

        //括号匹配算法

        public void pipei()throws Exception{

            char temp,ch;

            int match;    //记录匹配结果

            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

            ch=(char) br.read();        //输入一个字符

            while(ch!='0'){

                if(getTop()==-1){

                    push(ch);

                }else{

                    temp=pop();        //取出栈顶元素

                    match=0;    //判断是否匹配(默认不匹配)

                    if(temp=='('&&ch==')')

                        match=1;

                    if(temp=='['&&ch==']')

                        match=1;

                    if(temp=='{'&&ch=='}')

                        match=1;

                    if(temp=='<'&&ch=='>')

                        match=1;

                    if(match==0){    //如果不匹配

                        push(temp);    //将原栈顶元素重新入栈

                        push(ch);    //将输入的括号字符入栈

                    }

                }

                ch=(char) br.read();    //输入下一个字符

            }

            if(isEmpty()){

                System.out.println("输入的括号完全匹配!");

            }else{

                System.out.println("输入的括号不匹配,请检查!");

            }

        }

    }

    

    public static void main(String[] args) throws Exception {

        String go;

        Scanner input = new Scanner(System.in);

        Stack stack = new Stack(20);

        System.out.println("括号匹配问题!");

        do{

            System.out.println("请输入一组括号的组合,以0表示结束。支持的括号包括:{},(),[],<>。");

            stack.pipei();        //匹配算法

            System.out.print("\n继续匹配吗(y/n)?");

            go=input.next();

        }while(go.equalsIgnoreCase("y"));

        System.out.println("匹配结束!");

    }



}

程序运行结果如下:

括号匹配问题!

请输入一组括号的组合,以0表示结束。支持的括号包括:{},(),[],<>。

({[]})<>0

输入的括号完全匹配!



继续匹配吗(y/n)?y

请输入一组括号的组合,以0表示结束。支持的括号包括:{},(),[],<>。

({])0

输入的括号不匹配,请检查!



继续匹配吗(y/n)?n

匹配结束!

 

你可能感兴趣的:(算法)