用堆栈实现括号匹配——ADT实现
来源:互联网 发布:淘宝一千零一夜视频 编辑:程序博客网 时间:2024/05/18 02:39
/**********************栈的定义*********************************/
package pk.stack;
public class OrderStack {
private int count;
private int capacity;
private int capacityIncrement;
private Object[] itemArray;
public OrderStack() {// 初始化栈
count = 0;
capacity = 10;
capacityIncrement = 5;
itemArray = new Object[capacity];
}
public boolean isEmpty() {
return (count == 0);
}
public void push(Object x) {
if (count == capacity) {// 栈满时,扩展栈
capacity += capacityIncrement;
Object[] tempArray = new Object[capacity];
for (int i = 0; i < count; i++) {
tempArray[i] = itemArray[i];
}
itemArray = tempArray;
}
itemArray[++count] = x;//将x入栈
}
public Object pop() {//出栈
if(count == 0) {
return null;
} else {
return itemArray[--count];
}
}
public Object peak() {//查看栈顶元素
if(count == 0) {
return null;
} else {
return itemArray[count-1];
}
}
}
/************************匹配分析******************************/
package pk.stack;
public class ParenMatcher {
private String inputString;
private String outputString;
private boolean match(char c, char d) {
switch (c) {//当且仅当对应括号匹配时,返回真值
case '(':
return (d == ')');
case '[':
return (d == ']');
case '{':
return (d == '}');
default:
return false;
}
}
public void parenMatch() {
OrderStack parenMatch = new OrderStack();
int n = inputString.length();
char c;
char d;
int i = 0;
while (i < n) {
d = inputString.charAt(i);
if (d == '(' || d == '[' || d == '{') {
parenMatch.push(new Character(d));// 若是左括号,则入栈
} else if (d == ')' || d == ']' || d == '}') {// 否则是右括号,则出栈
if (parenMatch.isEmpty()) {// 出栈时,先判断栈是否为空
//System.out.println("栈目前为空");
output("栈目前为空");
return;
} else {
c = ((Character) parenMatch.pop()).charValue();// 因为压栈时是以Object类型压的
// 所以出栈时必须先将它强行转化
// 成自己的类型
if (!match(d, c)) {
//System.out.println("不匹配!");
output(d + "和" + c + "不匹配!");
}
}
}
i ++;//扫描下一个字符
}
}
private void output(String s) {
outputString = s;
}
public void setInput(String s) {
inputString = s;
}
public String getOutput() {
return outputString;
}
}
/***********************测试案例Applet*************************/
package pk.stack;
import java.applet.Applet;
import java.awt.Label;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class ParenMatchApplet extends Applet implements ActionListener {
/**
*
*/
private static final long serialVersionUID = 1L;
Label
instructionLable,inputLable,outputLable;
TextField
inputField,outputField;
ParenMatcher PM;
public void init() {
instructionLable = new Label("在下面输入一个表达式并按回车键",Label.CENTER);
add(instructionLable);
inputLable = new Label("input:");
add(inputLable);
inputField = new TextField(40);
add(inputField);
inputField.addActionListener(this);
outputLable = new Label("output:");
add(outputLable);
outputField = new TextField(40);
add(outputField);
inputField.requestFocus();
PM = new ParenMatcher();//创建一个新的括号匹配器对象
}
public void actionPerformed(ActionEvent evt) {
PM.setInput(evt.getActionCommand());//将输入字符串发送到括号匹配器对象PM中
PM.parenMatch();//分析匹配情况
outputField.setText(PM.getOutput());
}
}
- 用堆栈实现括号匹配——ADT实现
- 自定义堆栈,实现括号匹配
- 用堆栈来实现括号匹配的比较
- 使用堆栈实现括号的匹配
- 不用堆栈实现的括号匹配
- 算法复习--------------利用堆栈实现括号匹配
- 数据结构——栈实现括号匹配
- 15数组实现顺序堆栈的括号匹配问题
- 判断表达式括号是否匹配,C语言堆栈实现
- 括号匹配问题——用栈实现
- 用栈实现括号匹配
- 用栈实现括号匹配
- 用栈实现括号匹配
- STL实现括号匹配
- STL实现括号匹配
- 栈实现括号匹配
- 栈实现括号匹配
- 栈实现括号匹配
- CMS之图片管理(2)
- 2013百度校招开发测试笔试题目
- 常用正则表达式
- 二叉树
- 网上看到的一个suds 给webservice接口函数传入参数的列子
- 用堆栈实现括号匹配——ADT实现
- CGI运行机制和基本环境变量备忘
- 关于数组的反射
- sqlserver2005安装指南
- Windows核心编程学习笔记(12)--线程与进程运行的时间
- 第二十四章 加薪非要老总批--责任链模式(读书模式)
- 2013ebay笔试真题回忆版
- 二叉树遍历[先序|中序|后序]Java版
- C++的RTTI和dynamic_cast