下压栈实现(可动态调整栈内存大小)

创建ResizeArrayStack实现Iterable接口使得ResizeArrayStack能够被迭代,用Item代替所有的数据类型。
public class ResizeArrayStack<Item> implements Iterable<Item>

//创建存放数据的数组(栈)
private Item[] stack = ((Item[])new Object[1]);
//记录栈中的元素个数,指明栈顶元素的位置(count-1)
private int count = 0;
//判断栈是否为空
public boolean isEmpty(){
    return count == 0;
}
//返回迭代器,可用于迭代栈元素
@Override
public Iterator<Item> iterator() {
    return new ResizeArrayStackIterator();
}

/**
 * 重置数组的大小
 */
private void resize(int max){ 
    Item[] newStack = (Item[]) new Object[max];
    for(int i = 0; i < stack.length; i ++){
        newStack[i] = stack[i];
    }
    stack = newStack;
}
//入栈操作
public void push(Item item){
    if(count == stack.length){
        resize(stack.length * 2);
    }
    stack[count++] = item;
}
/**
 * 出栈操作
 * @return
 */
public Item pop(){
    Item topItem = stack[--count];
    stack[count] = null;
    if(count >0 && count == stack.length/4)
        resize(stack.length/2);
    return topItem;
}
//创建迭代器
class ResizeArrayStackIterator implements Iterator<Item>{
    int i = count;
    @Override
    public boolean hasNext() {
        return i > 0;
    }
    @Override
    public Item next() {
        return stack[--i];
    }
    @Override
    public void remove() {
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,303评论 19 139
  • 对象的创建与销毁 Item 1: 使用static工厂方法,而不是构造函数创建对象:仅仅是创建对象的方法,并非Fa...
    孙小磊阅读 2,166评论 0 3
  • 一、基本数据类型 注释 单行注释:// 区域注释:/* */ 文档注释:/** */ 数值 对于byte类型而言...
    龙猫小爷阅读 4,403评论 0 16
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 33,816评论 18 399
  • 分手是早已注定的结局, “朋友圈”幽怨地问我:“你到底有没有真心地爱过我?”我背对着“朋友圈”望着残阳如血的远方深...
    流年飞萤阅读 396评论 0 1

友情链接更多精彩内容