数据结构之后缀表达式计算(链表实现)

最近熟读一本《大话数据结构》,因为在大学学过数据结构,再加上这本书通俗易懂也比较容易上手,在校期间没有用所学的东西进行实现,这次力争都实现下

上篇文章中用java实现了线性表的链式存储,链接:https://blog.csdn.net/xindanding/article/details/90373166

以下是数据结构中栈的一种体现方式,后缀表达式的计算:

public class NumberExample {   //节点
    private int number;
    private NumberExample next;

    public int getNumber() {
        return number;
    }

    public void setNumber(int number) {
        this.number = number;
    }

    public NumberExample getNext() {
        return next;
    }

    public void setNext(NumberExample next) {
        this.next = next;
    }
}
public class StackExample {    //记录节点的链表
    private NumberExample popNumber = new NumberExample();
    private int length;


    public NumberExample pop(){
        NumberExample numberExample = new NumberExample();
        numberExample = popNumber;
        popNumber = popNumber.getNext();
        length --;
        return numberExample;
    }

    public void push(NumberExample stu){
        stu.setNext(popNumber);
        popNumber = stu;
        length++;
    }

    public NumberExample getPopStudent() {
        return popNumber;
    }

    public void setPopStudent(NumberExample student) {
        this.popNumber = student;
    }

    public int getLength() {
        return length;
    }

    public void setLength(int length) {
        this.length = length;
    }
}

 

测试:

public static void main(String[] args) {
    stack();
}

private static void stack(){
    String str = "9,3,1,-,3,*,+,10,2,/,+";
    String sign = "+-*/";
    String[] exp = str.split(",");
    StackExample stack = new StackExample();
    int result = 0;
    for(int i = 0; i < exp.length; i++){
        if(sign.contains(exp[i])){


                NumberExample numberExample1 = stack.pop();
                NumberExample numberExample2 = stack.pop();

                if("+".equals(exp[i])){
                    result = numberExample2.getNumber() + numberExample1.getNumber();
                }else if("-".equals(exp[i])){
                    result = numberExample2.getNumber() - numberExample1.getNumber();
                }else if("*".equals(exp[i])){
                    result = numberExample2.getNumber() * numberExample1.getNumber();
                }else if("/".equals(exp[i])){
                    result = numberExample2.getNumber() / numberExample1.getNumber();
                }
                NumberExample numberExample = new NumberExample();
                numberExample.setNumber(result);
                stack.push(numberExample);      //将结果result入栈

        }else{
            NumberExample numberExample = new NumberExample();
            numberExample.setNumber(Integer.parseInt(exp[i]));
            stack.push(numberExample);
        }
        System.out.println(result);
    }

}

后面会用java语言对中缀表达式转后缀表达式进行具体实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值