定义堆栈接口:
package stack;
public interface Stack {
//返回堆栈的大小
public int getSize();
//判断堆栈是否为空
public boolean isEmpty();
//数据元素e入栈
public void push(Object e);
//栈顶元素出栈
public Object pop()throws StackEmptyException;
//取栈顶元素看看
public Object peek()throws StackEmptyException;
}
定义节点类型:
package stack;
public class SLNode {
public SLNode next;
public Object e;
public SLNode(SLNode next,Object e)
{
this.next=next;
this.e=e;
}
}
堆栈实现:
package stack;
public class StackSLinked implements Stack{
private SLNode top;
private int size;//标记栈的大小
public StackSLinked()
{
top=null;size=0;
}
@Override
public int getSize() {
return size;
}
@Override
public boolean isEmpty() {
// TODO Auto-generated method stub
return size==0;
}
@Override
public void push(Object e) {
SLNode q=new SLNode(top,e);
top=q;
size++;
}
@Override
public Object pop() throws StackEmptyException {
if(size<1)
throw new StackEmptyException("栈为空");
Object obj=top.e;
top=top.next;
size--;
return obj;
}
@Override
public Object peek() throws StackEmptyException {
if(size<1)
{
throw new StackEmptyException("栈为空");
}
return top.e;
}
}
堆栈异常定义:
package stack;
public class StackEmptyException extends Exception{
public StackEmptyException(String exception)
{
super(exception);
}
}
Client 包含括号匹配和进制转换算法:
package stack;
public class Client {
public static void main(String[] args) {
//baseConversion(8);
System.out.println(bracketMatch("{[wf(wf)]}"));
}
// 进制转换算法
public static void baseConversion(int val) {
Stack s = new StackSLinked();
while (val > 0) {
s.push(val % 8 + "");
val = val / 8;
}
while (!s.isEmpty())
try {
System.out.print((String) s.pop());
} catch (StackEmptyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 括号匹配算法
public static boolean bracketMatch(String str) {
Stack s = new StackSLinked();
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
switch (c) {
case '{':
case '[':
case '(':
s.push(Integer.valueOf(c));
break;
case '}':
try {
if (!s.isEmpty() && ((Integer) s.pop()).intValue() == '{')
break;
else
return false;
} catch (StackEmptyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
case ']':
try {
if (!s.isEmpty() && ((Integer) s.pop()).intValue() == '[')
break;
else
return false;
} catch (StackEmptyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
case ')':
try {
if (!s.isEmpty() && ((Integer) s.pop()).intValue() == '(')
break;
else
return false;
} catch (StackEmptyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
if (s.isEmpty())
return true;
else
return false;
}
}
分享到:
相关推荐
使用栈进行进制转换和括号匹配 使用栈进行进制转换和括号匹配
【实验目的】 堆栈和队列基本操作的编程实现 要求: 堆栈和队列基本操作的编程实现(2学时,验证型),掌握堆栈和队列...利用基本功能实现各类应用,如括号匹配、回文判断、事物排队模拟、数据逆序生成、多进制转换等。
195 括号匹配 196 字符串逆置 197 SIX/NINE问题 198 单词个数统计 199 方差运算 200 级数运算 201 输出素数 202 素数题 203 序列排序 204 整数各位数字排序 205 字符串字母移位 206 Fibonacc数列 第七...
195 括号匹配 196 字符串逆置 197 SIX/NINE问题 198 单词个数统计 199 方差运算 200 级数运算 201 输出素数 202 素数题 203 序列排序 204 整数各位数字排序 205 字符串字母移位 206 Fibonacc数列 第七...
195 括号匹配 196 字符串逆置 197 SIX/NINE问题 198 单词个数统计 199 方差运算 200 级数运算 201 输出素数 202 素数题 203 序列排序 204 整数各位数字排序 205 字符串字母移位 206 Fibonacc数列 第七...
195 括号匹配 196 字符串逆置 197 SIX/NINE问题 198 单词个数统计 199 方差运算 200 级数运算 201 输出素数 202 素数题 203 序列排序 204 整数各位数字排序 205 字符串字母移位 206 Fibonacc数列 第七...
195 括号匹配 196 字符串逆置 197 SIX/NINE问题 198 单词个数统计 199 方差运算 200 级数运算 201 输出素数 202 素数题 203 序列排序 204 整数各位数字排序 205 字符串字母移位 206 Fibonacc数列 第七...
195 括号匹配 196 字符串逆置 197 SIX/NINE问题 198 单词个数统计 199 方差运算 200 级数运算 201 输出素数 202 素数题 203 序列排序 204 整数各位数字排序 205 字符串字母移位 206 Fibonacc数列 第七...
195 括号匹配 196 字符串逆置 197 SIX/NINE问题 198 单词个数统计 199 方差运算 200 级数运算 201 输出素数 202 素数题 203 序列排序 204 整数各位数字排序 205 字符串字母移位 206 Fibonacc数列 第七部分 游戏篇 ...
195 括号匹配 196 字符串逆置 197 SIX/NINE问题 198 单词个数统计 199 方差运算 200 级数运算 201 输出素数 202 素数题 203 序列排序 204 整数各位数字排序 205 字符串字母移位 206 Fibonacc数列 第七...
195 括号匹配 196 字符串逆置 197 SIX/NINE问题 198 单词个数统计 199 方差运算 200 级数运算 201 输出素数 202 素数题 203 序列排序 204 整数各位数字排序 205 字符串字母移位 ...
195 括号匹配 196 字符串逆置 197 SIX/NINE问题 198 单词个数统计 199 方差运算 200 级数运算 201 输出素数 202 素数题 203 序列排序 204 整数各位数字排序 205 字符串字母移位 206 Fibonacc数列 第七...
195 括号匹配 196 字符串逆置 197 SIX/NINE问题 198 单词个数统计 199 方差运算 200 级数运算 201 输出素数 202 素数题 203 序列排序 204 整数各位数字排序 205 字符串字母移位 206 Fibonacc数列 第七...
195 括号匹配 196 字符串逆置 197 SIX/NINE问题 198 单词个数统计 199 方差运算 200 级数运算 201 输出素数 202 素数题 203 序列排序 204 整数各位数字排序 205 字符串字母移位 206 Fibonacc数列 第七...
195 括号匹配 196 字符串逆置 197 SIX/NINE问题 198 单词个数统计 199 方差运算 200 级数运算 201 输出素数 202 素数题 203 序列排序 204 整数各位数字排序 205 字符串字母移位 206 Fibonacc数列 第七...
195 括号匹配 196 字符串逆置 197 SIX/NINE问题 198 单词个数统计 199 方差运算 200 级数运算 201 输出素数 202 素数题 203 序列排序 204 整数各位数字排序 205 字符串字母移位 206 Fibonacc数列 第七部分 游戏篇 ...
195 括号匹配 196 字符串逆置 197 SIX/NINE问题 198 单词个数统计 199 方差运算 200 级数运算 201 输出素数 202 素数题 203 序列排序 204 整数各位数字排序 205 字符串字母移位 206 Fibonacc数列 第七...
数据结构与算法 小算法问题 字符串模式匹配 反转字符串中的单词 分区标签 二叉树中的表亲 二叉树的垂直遍历 查找枢轴索引 子阵列总和等于 K 组字谜 有效括号 字符串到整数 (atoi) 最长回文子串 Manacher 算法: 合并...
12.1.2. 圆括号 12.1.3. 比较函数和操作符 12.1.4. 逻辑操作符 12.2. 控制流程函数 12.3. 字符串函数 12.3.1. 字符串比较函数 12.4. 数值函数 12.4.1. 算术操作符 12.4.2. 数学函数 12.5. 日期和时间函数 12.6. ...