数组模拟实现一个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个字符串的堆栈,使用堆栈,将中缀算术表达式转换成后缀表达式。的主要内容,如果未能解决你的问题,请参考以下文章