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");
		}

	}
}
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值