package com.xingej.algorithm.datastructure.stack;

/**
 * 数据结构之栈Stack
 * 
 * 以long类型为测试用例
 * 
 * @author erjun 2017年12月4日 下午10:22:34
 */
public class LongStack {
    // 底层数据存储
    private long[] arr;

    // 最大元素数量
    private int maxSize;

    // 当前元素的指针
    private int top;

    public LongStack(int maxSize) {
        this.maxSize = maxSize;
        arr = new long[maxSize];
        top = -1;// 默认值为-1,栈里没有元素
    }

    // 添加数据
    public void push(long value) {
        arr[++top] = value;
    }

    // 查看、并删除元素数据
    public long pop() {
        return arr[top--]; // 先返回,然后,指针再减一
    }

    // 仅仅查看元素
    public long peek() {
        return arr[top];
    }

    // 查看当前栈空间是否为空
    public boolean isEmpty() {
        return top == -1;
    }

    // 查看当前栈空间是否已经满了
    public boolean isFull() {
        return top == (maxSize - 1);
    }

}


测试用例:

package com.xingej.algorithm.datastructure.stack;

import org.junit.Test;

/**
 * 栈的特点:先进后出;
 * 
 * 栈和队列的区别?
 * 
 * 栈的主要组成:一个存数据的容器,如数组,或者链表;一个指针;其他API行为都是围绕容器进行的
 * 
 * 队列的主要组成:一个存数据的容器,如数组,或者链表;两个指针。
 * 
 * 不适合大量存储,只是实现某种算法的一种手段吧,
 * 
 * 受限访问方式
 * 
 * @author erjun 2017年12月6日 上午9:11:40
 */
public class LongStackTest {

    @Test
    public void test() {
        LongStack theStack = new LongStack(10);

        theStack.push(29);
        theStack.push(2);
        theStack.push(9);
        theStack.push(5);

        while (!theStack.isEmpty()) {
            System.out.print(theStack.pop() + " ");
        }
        System.out.println();

    }

}


【备注】

package com.xingej.algorithm.datastructure.stack;

/**
 * java 不允许泛型数组, 因此,这里定义的MyStack不能使用的
 * 
 * @author erjun 2017年12月6日 上午9:41:12
 * @param <T>
 */
public class MyStack<T> {
    private T[] arr;

    // 栈允许最大的存储元素个数
    private int maxSize;

    private int top;

    public MyStack(int maxSize) {
        this.maxSize = maxSize;
        // 这里会报错,java不允许泛型数组
        // arr = new T[];
        top = -1;
    }

    // 插入新元素
    public void push(T element) {
        arr[++top] = element; // 一定先累加指针,不然会覆盖以前的数据
    }

    // 从栈里弹出一个元素,一定是栈的顶部
    public T pop() {
        return arr[top--]; // 弹出元素后,再让指针减一
    }

    public T peek() {
        return arr[top]; // 返回当前栈的最顶部的元素
    }

    // 查看当前栈空间是否为空
    public boolean isEmpty() {
        return top == -1;
    }

    // 查看当前栈空间是否已经满了
    public boolean isFull() {
        return top == (maxSize - 1);
    }

}




代码已上传到git上:

https://github.com/xej520/xingej-algorithm