用java实现数据结构之-堆栈

堆栈

接口·Interface

public interface Stack {

    public boolean push(Object obj) throws Exception;//入栈

    public Object pop() throws Exception;            //出栈

    public Object getData() throws Exception;        //获取栈顶元素

    public int size();                               //获取堆栈大小

    public boolean isEmpty();                        //判断堆栈是否为空
 
    public boolean isFull();                         //判断堆栈是否已满
    
    public void clear();                             //置空堆栈
}


堆栈的实现

public class SeqStack implements Stack {

    private final int defaultSize = 10; //默认大小
    private int top;                    //栈顶数据元素下标
    private int maxStackSize;          //最大数据元素个数
    private Object[] stack;            //数组对象

    //无参的构造函数
    public SeqStack() {
        maxStackSize = defaultSize;
        stack = new Object[defaultSize];
    }

    //带参的构造函数
    public SeqStack(int size) {
        maxStackSize = size;
        top = -1;
        stack = new Object[size];
    }

    //压栈
    public boolean push(Object obj) throws Exception {
        if (!isFull()) {                       //不满,则执行入栈操作
            top++;                             //产生新栈顶元素
            stack[top] = obj;                  //保存元素
            return true;
        } else {
            System.out.println("堆栈已满!" + obj + "无法入栈");
            return false;
        }
    }

    //出栈
    public Object pop() throws Exception {
        Object ret = null;
        if (!isEmpty()) {                   //栈不空
            ret = stack[top];               //设置返回值
            stack[top] = null;              //将原数据清空
            top--;                          //产生新的栈顶元素
        } else {
            System.out.println("堆栈为空!");
        }                                   //返回栈顶元素
        return ret;
    }

    public Object getData() throws Exception {
        Object ret = null;
        if (!isEmpty()) {                   //栈不空
            ret = stack[top];              //设置返回值
        } else {
            System.out.println("堆栈已空!");
        }
        return ret;
    }

    public int size() {
        return top;
    }

    //判断堆栈是否为空
    public boolean isEmpty() {
        return (top == -1);
    }

    //判断堆栈是否已满
    public boolean isFull() {
        return (top == maxStackSize - 1);
    }

    //置空堆栈
    public void clear() {
        top = -1;
    }

}

测试类:

public class Test {

    public static void main(String[] args) {
        SeqStack stack = new SeqStack();
        int a[] = {1, 2, 3, 4, 5, 6};
        try {
            for (int i = 0; i < a.length; i++) {
                stack.push(new Integer(a[i]));
            }
            while (!stack.isEmpty()) {
                System.out.println(stack.pop());
            }

        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}












评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bruce_suxin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值