代码中的堆栈跟踪

| 我想知道如何将跟踪添加到此代码的堆栈中,以将表达式转换为后缀。
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”通话即可。或者,如果您是在生产代码中执行此操作的,则请使用might2ѭ代替
System.err
。 (为便于记录,术语“堆栈跟踪”通常是指程序调用堆栈的跟踪,而不是某些特定于应用程序的堆栈数据结构发生的跟踪。您可能需要稍微选择一些术语下次再仔细一点。)     

要回复问题请先登录注册