`

java栈实现括号匹配

    博客分类:
  • java
 
阅读更多

算法思想:

做一个空栈,读入字符。

若字符是左运算符,则入栈

若字符时右运算符,当栈为空时报错

                           否则,将栈顶元素弹出,若不匹配,则报错

最后,字符读完后,栈非空,则报错

 

代码:

Stack类

package cn.edu.tju.stack;

public class Stack {
	
	public static void push(char[] arr, int topOfStack, char x){
		
		arr[topOfStack] = x;
	}
	
	public static char pop(char[] arr, int topOfStack){
		char x = arr[topOfStack];
		return x;
	}

}

 客户端Client类

package cn.edu.tju.stack;

public class Client {

	public static void main(String[] args){
		char[] input = {'[', '(', ')', ']', '{', '(', '}', ')'};
		char[] stack = new char[input.length];
		
		int topOfStack = -1;
		boolean result = true;
		
		for(int i = 0; i < input.length; i ++){
			switch(input[i]){
			case '[':
			case '{':
			case '(':
				Stack.push(stack, ++topOfStack, input[i]);
				break;
			default:
				if(topOfStack == -1){
					result = false;
					break;
				}else{
					char top = Stack.pop(stack, topOfStack--);
					//if(input[i] != top){
					if((input[i] == ')' && top != '(') || (input[i] == ']' && top != '[') || (input[i] == '}' && top != '{')){
						result = false;
					}
					break;
				}
			}
		}
		if(topOfStack > -1){
			System.out.println("false");
		}else if(result){
			System.out.println("true");
		}else if(!result){
			System.out.println("false");
		}

	}
}
 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics