数据结构-栈

栈也称下压栈,是一种先进后出的集合数据类型,在现代计算机科学领域有着广泛的应用。

接口设计

public interface StackInterface<Item> extends Iterable<Item> {//实现Iterable,可迭代,可Foreach循环

    /** 入栈  */
    void pop(Item item);

    /** 出栈  */
    Item push();

    /** 元素个数  */
    int size();

    /** 栈是否为空  */
    boolean isEmpty();

}

具体实现

public class Stack<Item> implements StackInterface<Item> {

    private int idx = 0;//有效界限的索引,左边为有效数据
    private Item[] data;//存放数据的数组

    public Stack(int initSize) { data = (Item[]) new Object[initSize]; }

    public void push(Item item) {
        if (idx >= data.length) resize(data.length * 2);
        data[idx++] = item;
    }

    public Item pop() {
        if (idx > 0 && idx <= data.length / 4) resize(data.length / 2);
        return isEmpty() ? null : data[--idx];
    }

    public int size() {return idx;}

    public boolean isEmpty() { return idx == 0;}

    public Iterator<Item> iterator() {
        return new Iterator<Item>() {
            private int index = idx;
            public boolean hasNext() {return index > 0;}
            public Item next() {return hasNext() ? data[--index] : null;}
            public void remove() {}
        };
    }

    private void resize(int newSize) {//重新调整数组大小
        Item[] temp = (Item[]) new Object[newSize];
        for (int i = 0; i < idx; i++) {
            temp[i] = data[i];
        }
        data = temp;
    }
}

总结

此栈的实现入栈弹栈,可迭代,支持泛型,并且能动态调整大小,提高空间利用效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值