美文网首页
能够动态调整数组大小的栈

能够动态调整数组大小的栈

作者: 茶酒qqq | 来源:发表于2019-04-04 22:37 被阅读0次

该栈能够动态调整数组,并实现了迭代和泛型。
参考于算法第四版算法1.1
java代码如下:

import java.util.Iterator;
import edu.princeton.cs.algs4.StdIn;
import interfacefile.DataStock;
/**
 * 
 * @author Administrator
 *能够动态调整数组的实现了迭代的泛型栈
 * @param <Item>
 */
public class ResizingArrayStack<Item> implements DataStock<Item>,Iterable<Item>{
    private int N=0;
    private Item[] a;
    public ResizingArrayStack(int cap) {
        // TODO Auto-generated constructor stub
        a =(Item[])new Object[cap];
    }
    
    public void resize(int max) {
        Item[] temp =(Item[]) new Object[max];
        for (int i = 0; i < N; i++) {
            temp[i]=a[i];
        }
        a=temp;
    }
    @Override
    public void push(Item item) {
        if(N==a.length) resize(a.length*2);
        a[N++]=item;
    }
    @Override
    public Item pop() {
        Item item=a[--N];
        a[N]=null;
        if(N>0 && N==a.length/4) resize(a.length/2);
        return item;
    }
    @Override
    public boolean isEmpty() {
        return N==0;
    }
    @Override
    public int size() {
        return N;
    }
    public int getArrayLength() {
        return a.length;
    }
    //迭代器
    @Override
    public Iterator<Item> iterator() {
        // TODO Auto-generated method stub
        return new ReverseArrayIterator();
    }
    private class ReverseArrayIterator implements Iterator<Item>{
        private int i=N;
        @Override
        public boolean hasNext() {
            // TODO Auto-generated method stub
            return i>0;
        }

        @Override
        public Item next() {
            // TODO Auto-generated method stub
            return a[--i];
        }
        
        
        
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        ResizingArrayStack<String> stack1;
        stack1 =new ResizingArrayStack<String>(10);
        int i;
        //输入字符串,回车后按ctrl+z结束输入
        while(!StdIn.isEmpty()) {
            String value= StdIn.readString();
            stack1.push(value);
        }
        System.out.println("original ArrayLength: "+ stack1.getArrayLength());
        //遍历当前栈的所有元素并打印(从栈顶开始)
        i=stack1.size();
        System.out.println("origin:");
        for(String temp:stack1) {
            System.out.printf("%d:%s ",i--,temp);
        }
        System.out.println();
        
        //弹出栈顶两个元素,再打印剩下的元素
        stack1.pop();
        stack1.pop();
        i=stack1.size();
        System.out.println("after pop ArrayLength: "+ stack1.getArrayLength());
        System.out.println("current:");
        for(String temp:stack1) {
            System.out.printf("%d:%s ",i--,temp);
        }
        
        //进栈直到满
        for (int j = 0; j < 10; j++) {
            stack1.push(j+"");
        }
        System.out.println();
        i=stack1.size();
        System.out.println("after push ArrayLength: "+ stack1.getArrayLength());
        System.out.println("current:");
        for(String temp:stack1) {
            System.out.printf("%d:%s ",i--,temp);
        }
    }   
}

测试:

测试

我们发现当栈里元素个数为2时,等于原数组长度的1/4,于是调整数组的长度/2,为5,添加元素至栈满时,调整数组长度*2,为20。

相关文章

  • 能够动态调整数组大小的栈

    该栈能够动态调整数组,并实现了迭代和泛型。参考于算法第四版算法1.1java代码如下: 测试: 我们发现当栈里元素...

  • ResizingArrayStack(可扩容的栈)

    1下压(LIFO)栈(可以动态调整数组大小) 泛型可迭代的Stack 实现了所有的集合类的抽象数据类型的模板 测试...

  • js高三精炼 —— 引用类型(上)

    Object Array js中数组的两个特点: 数组每一项类型可以不同 数组大小可以动态调整 数组最大可以容纳 ...

  • JVM学习:虚拟机栈-相关面试题

    举例栈溢出的情况?(StackOverflowError) 通过 -Xss 设置栈的大小 调整栈大小,就能保证不出...

  • 实现栈_基于数组

    基于动态数组实现栈声明栈的接口 实现类及测试

  • 数据结构之栈和队列

    栈 栈 Stack: 栈是一种线性结构 相比数组,栈对应的操作是数组的子集,所以我们完全可以基于动态数组去实现它 ...

  • JS--Array类型

    ECMAScript的每一项可以保存任何类型的数据,且数组的大小是可以动态调整的。 创建数组的基本方式 使用Arr...

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

    创建ResizeArrayStack实现Iterable接口使得ResizeArrayStack能够被迭代,用It...

  • Array类型

    数组的每一项可以保存任何类型的数据;数组的大小是可以动态调整的; 创建数组的基本方式有两种。 tip:在使用 Ar...

  • C++ - STL中的Vector

    vector 向量(Vector)是一个封装了动态大小数组的顺序容器,会根据插入和删除元素自动调整容器大小。Vec...

网友评论

      本文标题:能够动态调整数组大小的栈

      本文链接:https://www.haomeiwen.com/subject/korciqtx.html