队列与栈_栈结构的应用

来源:互联网 发布:unity3d navmeshagent 编辑:程序博客网 时间:2024/06/04 18:48
栈结构很有用处,有时通过它可以轻松化解一些难题。


看如下问题:


...(.[...)...]...(..(.)..)..{..}.[.]...[[...(.).]..].


请判断一个串中的括号是否匹配
注意下列不匹配的情况:


左括号太多
右括号太多
右括号先于左括号出现 ..)...(...
挎臂情况 ....[...(....]....)....


考虑用栈

import java.util.ArrayDeque;import java.util.Deque;import java.util.Scanner;public class StackTest {public static void main(String[] args) {Deque<Character> stack = new ArrayDeque<Character>();Scanner sc = new Scanner(System.in);System.out.println("请输入一行表达式:");String str = sc.nextLine();boolean flag = true;char ch;for(int i = 0; i < str.length(); i++) {ch = str.charAt(i);if(ch == '(' || ch == '[' || ch == '{') {stack.offerFirst(ch);}else if(ch == ')') {if(stack.peekFirst() != null && stack.peekFirst() == '(') {stack.pollFirst();}else {flag = false;break;}}else if(ch == ']') {if(stack.peekFirst() != null && stack.peekFirst() == '[') {stack.pollFirst();}else {flag = false;break;}}else if(ch == '}') {if(stack.peekFirst() != null && stack.peekFirst() == '{') {stack.pollFirst();}else {flag = false;break;}}}if(flag) {flag = stack.isEmpty();}System.out.println("是否匹配:" + flag);}}
结果:
Conclusion请输入一行表达式:a+b[ddd](2014)是否匹配:true请输入一行表达式:{[123]}9[))]是否匹配:false





0 0