接下篇:http://www.cnblogs.com/fuck1/p/5995857.html

堆栈的应用1:括号匹配算法

括号匹配问题

假设算术表达式中包含圆括号,方括号,和花括号三种类型。使用栈数据结构编写一个算法判断表达式中括号是否正确匹配,并设计一个主函数测试。

比如:{a+[b+(c*a)/(d-e)]}     正确

         ([a+b)-(c*e)]+{a+b}    错误

   对于表达式中的括号是否匹配,不能仅仅通过统计左括号'('出现的次数和右括号')'出现的次数是否相等来实现,“a*)b+c(”这样的表达式中的括号显然是不匹配的。检验括号是否匹配最常见的方法是借助于栈这种数据结构,从左到右逐个字符扫描表达式,碰到左括号"("则压入栈中(push),碰到右括号")"则弹出栈顶元素(pop)如果栈为空,则匹配失败。字符串扫描完成后,如果栈为空,则匹配成功,否则匹配失败。

 

//-------------------------------------------------------------在这里虽然Java给出了Stack的类但是还是自定义

//下面是一个stack接口的定义

 1 //栈接口
 2 public interface Stack {
 3 
 4     // 入栈
 5     public void push(Object obj) throws Exception;
 6 
 7     // 出栈
 8     public Object pop() throws Exception;
 9 
10     // 获得栈顶元素
11     public Object getTop() throws Exception;
12 
13     // 判断栈是否为空
14     public boolean isEmpty();
15 }
Stack interface

相关文章: