算法-定容栈泛型的实现

N++与++N

假如我有一个定长的数组 a =[0,3,2,1] ,其中a.length = 4

那么我如果N++的话,先输出4,再输出5,6,7

那么如果是++N的话,先输出5,然后输出6,7,8

 

 

同理--N与N--与上面是一样的逻辑

定容栈的实现是许多用例(集合数据类型--Bag,Stack,Queue )的基础模块

定容栈:

只能处理String值,并且容量要指定一个固定的数字,且不支持迭代

 

泛型:

定容栈的缺点是只能处理String类型的值,因此我们使用泛型,让他可以处理其余的数据类型(将String替换为Item)

package base.第一章.背包_队列_和栈.定容栈;

/**
 * Created by MK on 2018/7/24.
 * public class FiexedCapacityStackOfItem<Item>
 * FiexedCapacityStackOfItem(int cap)
 * void push(Item item)
 * Item pop()
 * boolean isEmpty()
 * int size()
 */
public class 定容栈_泛型<Item> {

    private Item[] a;
    private int N;

    //创建泛型数组在Java中是不可以实现的,因此我们要使用,类型转换
    定容栈_泛型(int cap) {
        a = (Item[]) new Object[cap];
    }

    public int Size(){ return N; }

    public void push(Item item){
        a[N++]=item;
    }
    public Item pop(){
        return a[--N];
    }

}

测试

package base.第一章.背包_队列_和栈.定容栈;

import edu.princeton.cs.algs4.StdOut;

/**
 * Created by MK on 2018/7/24.
 * 测试
 */
public class 定容栈_泛型测试 {
    public static void main(String[] args) throws InterruptedException {

        //定容栈的容量这里我设置的是100
        定容栈_泛型 s = new 定容栈_泛型(100);

        //压入栈中
        s.push(1);
        s.push("2");
        s.push(3);
        s.push("a");



        //将数据弹出,因为是栈所以是后进先出的原理
        /*
         * 这里为什么弹出的是d
         *  理由:
         *      程序是从上往下执行的,当我执行到.push(d),的时候是最后一次执行
         *      因此,最后进入到栈中的就是d
         *
         * */
        StdOut.println(s.pop());
        StdOut.println(s.pop());
        StdOut.println(s.Size());


    }
}

猜你喜欢

转载自blog.csdn.net/qq_33982605/article/details/81192790