数组模拟实现一个50个字符串的堆栈,使用堆栈,将中缀算术表达式转换成后缀表达式。
Posted Pistachiout
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数组模拟实现一个50个字符串的堆栈,使用堆栈,将中缀算术表达式转换成后缀表达式。相关的知识,希望对你有一定的参考价值。
1、用数组模拟实现一个50个字符串的堆栈,并使这个堆栈有如下方法和参数:
myStack:数组名,使用时不能直接对这个数组进行存取操作,存取操作都通过pop()和push()完成。
实现pop(): 弹出
实现push():压入
实现isFull():是否已满
实现isEmpty():是否为空
实现length():已有多少元素
public class StackImiate {
public int maxSize;
public char[] a;
public int top;
StackImiate(int maxSize) {
this.maxSize=maxSize;
a=new char[maxSize];
top=-1;
}
public void push(char str) {
a[++top]=str;
}
public char pop() {
return a[top--];
}
public boolean isEmpty() {
return(top==-1);
}
public boolean isFull() {
return(top==maxSize);
}
public int length()
{return top+1;}
public char peek() {
return a[top];
}
public char peekN(int n) {
//System.out.println(a[n]);
return a[n];
}
public void displayStack(String s) {
System.out.print(s);
System.out.print(" Stack (bottom-->top): ");
for(int j=0;j<maxSize;j++) {
System.out.print(peekN(j)+" ");
}
System.out.println();
}
}
2、使用堆栈,将中缀算术表达式转换成后缀表达式。
A、表达式中只有+、-、×,/,%,(,)六种运算符
B、变量名为以英文字母开头的字母数字串
C、表达式中可以出现不带符号的常数
D、适当判断表达式中的语法错误
E、不计算结果
public class InToPost {
public static void main(String[] args) {
String strResult=new String();
String Input="a+b*c+(d*e+f)*g";
strResult=strResult+doTrans(Input);
System.out.println();
System.out.println(strResult);
}
public static StringBuffer doTrans(String Input) {//返回strResult的函数
StackImiate str=new StackImiate(50);
StringBuffer strResultTemp=new StringBuffer();
for (int i = 0; i <Input.length(); i++) {
char ch = Input.charAt(i);
str.displayStack("Get " + ch + " ");
switch (ch) {
case '+':
case '-':
gotOper(ch, 1,str,strResultTemp);
break;
case '*':
case '/':
case '%':
gotOper(ch, 2,str,strResultTemp);
break;
case '(':
str.push(ch);
break;
case ')':
gotParen(ch,str,strResultTemp);
break;
default:
strResultTemp =strResultTemp.append(ch);
break;
}
}
while (!str.isEmpty()) {
str.displayStack("out ");
strResultTemp = strResultTemp.append(str.pop());
}
str.displayStack("End ");
return strResultTemp;
}
public static void gotParen(char ch,StackImiate str,StringBuffer strResultTemp) {//对括号进行处理的函数
while (!str.isEmpty()) {
char chx = (char) str.pop();
if (chx == '(') {
break;
} else {
strResultTemp =strResultTemp.append(chx);
}
}
}
private static void gotOper(char ch, int i,StackImiate str,StringBuffer strResultTemp) {//对运算符的优先级处理
// TODO Auto-generated method stub
while (!str.isEmpty()) {
char opTop = (char) str.pop();
if (opTop == '(') {
str.push('(');
break;
} else {
int k;
if (opTop == '+' || opTop == '-') {
k = 1;
} else {
k = 2;
}
if (k < i) {
str.push(opTop);
break;
} else {
strResultTemp = strResultTemp.append(opTop);
}
}
}
str.push(ch);
}
}
以上是关于数组模拟实现一个50个字符串的堆栈,使用堆栈,将中缀算术表达式转换成后缀表达式。的主要内容,如果未能解决你的问题,请参考以下文章