代码中的堆栈跟踪
|
我想知道如何将跟踪添加到此代码的堆栈中,以将表达式转换为后缀。
class Node {
public Object data;
public Node next;
public Node () {
data =\' \'; next = null; }
public Node (Object val) {
data = val; next = null; }
}
public class LinkStack {
private Node top;
public LinkStack() {
top = null; }
public boolean empty(){
return top == null; }
public boolean full(){
return false;
}
public void push(Object e){
Node tmp = new Node(e);
tmp.next = top;
top = tmp;
}
public Object pop(){
Object e = top.data;
top = top.next;
return e;
}
public Object peek(){
Object e = top.data;
return e;
}
public void matching(String x)
{
LinkStack S=new LinkStack();
for(int i=0;i<x.length();i++)
{
char c=x.charAt(i);
if(c==\'(\')
S.push(c);
else
{
if(c==\')\')
if(S.empty())
System.out.println(\"NOT MATCHING !!!\");
else
S.pop();
}
}
if(!S.empty())
System.out.println(\"NOT MATCHING !!!\");
else
System.out.println(\"MATCHING !!!\");
}
public void Evaluation(String x)
{
LinkStack S=new LinkStack();
for(int i=0;i<x.length();i++)
{
char c=x.charAt(i);
String s=\"0\"+c;
if(c==\'+\')
{
int z=Integer.parseInt((String)S.pop())+Integer.parseInt((String)S.pop());
S.push(Integer.toString(z));
}
else if(c==\'*\')
{
int z=Integer.parseInt((String)S.pop())*Integer.parseInt((String)S.pop());
S.push(Integer.toString(z));
}
else if(c==\'/\')
{ int u=Integer.parseInt((String)S.pop());
int z=Integer.parseInt((String)S.pop())/u;
S.push(Integer.toString(z));
}
else if(c==\'-\')
{ int u=Integer.parseInt((String)S.pop());
int z=Integer.parseInt((String)S.pop())-u;
S.push(Integer.toString(z));
}
else
S.push(s);
}
System.out.println(\"THE POSTFIX = \"+x);
System.out.println(\"THE RESULT = \"+S.pop());
}
public void postfix(String x)
{
String output=\"\";
LinkStack S=new LinkStack();
for(int i=0;i<x.length();i++)
{
char c=x.charAt(i);
if(c==(\'+\')||c==(\'*\')||c==(\'-\')||c==(\'/\'))
{while(!S.empty() && priority(S.peek())>= priority(c))
output+=S.pop();
S.push(c);
System.out.println(output);
}
else if(c==\'(\')
{
S.push(c);
}
else if(c==\')\')
{
while(!S.peek().equals(\'(\'))
output+=S.pop();
S.pop();
System.out.println(output);
}
else
{
output+=c;
System.out.println(output);
}
}
while(!S.empty())
output+=S.pop();
System.out.println(\"THE INFIX = \"+x);
System.out.println(\"THE POSTFIX = \"+output);
}
public int priority(Object x)
{
if(x.equals(\'+\')||x.equals(\'-\'))
return 1;
else if(x.equals(\'*\')||x.equals(\'/\'))
return 2;
else
return 0;
}
public static void main(String args[])
{
LinkStack s=new LinkStack();
s.postfix(\"x*y–z+(a–c/d)\");
System.out.println(\"------------------------------------------\");
s.matching(\"x*y–z+(a–c/d)\");
System.out.println(\"------------------------------------------\");
}
}
没有找到相关结果
已邀请:
1 个回复
募磷
。 (为便于记录,术语“堆栈跟踪”通常是指程序调用堆栈的跟踪,而不是某些特定于应用程序的堆栈数据结构发生的跟踪。您可能需要稍微选择一些术语下次再仔细一点。)