算法-定容栈

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值,并且容量要指定一个固定的数字,且不支持迭代

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

/**
 * Created by MK on 2018/7/23.
 * 定容栈: 只能处理String值,并且容量要指定一个固定的数,且不支持迭代
 * <p>
 * public class FiexedCapacityStackOfStrings
 * FiexedCapacityStackOfStrings(int cap)   //创建一个容量为cap的空栈
 * void push(String item)                      //添加一个字符串
 * String pop()                                //删除最近添加的字符串(因为栈是后进先出的原理)
 * boolean isEmpty()                           //栈是否为空
 * int size()                                  //栈中的字符串数量
 */
public class FiexedCapacityStackOfStrings {
    private String[] a;     //栈的容量
    private int N;          //集合的长度

    FiexedCapacityStackOfStrings(int cap){ a =new String[cap];} //容量的大小

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

    int Size(){return  N;}

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

}

测试

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

import edu.princeton.cs.algs4.StdOut;

/**
 * Created by MK on 2018/7/23.
 *  测试定容栈
 */
public class cece {

    public static void main(String[] args) throws InterruptedException {

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

        //压入栈中
        s.push("a");
        s.push("b");
        s.push("c");
        s.push("d");



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


    }
}

猜你喜欢

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