Java - 数据结构-栈

1. 定义

栈(stack),是一种线性存储结构,它有以下几个特点:

    1. 栈中数据是按照"后进先出(LIFO, Last In First Out)"方式进出栈的。
    1. 向栈中添加/删除数据时,只能从栈顶进行操作。

栈通常包括的三种操作:push、peek、pop。

  • push -- 向栈中添加元素。
  • peek -- 返回栈顶元素。
  • pop -- 返回并删除栈顶元素的操作。

2. 简单实现


public class GeneralArrayStack<T> {

    private static final int DEFAULT_SIZE = 12;
    private T[] mArray;
    private int count;

    public GeneralArrayStack(Class<T> type) {
        this(type, DEFAULT_SIZE);
    }

    public GeneralArrayStack(Class<T> type, int size) {
        // 不能直接使用mArray = new T[DEFAULT_SIZE];
        mArray = (T[]) Array.newInstance(type, size);
        count = 0;
    }

    // 将val添加到栈中
    public void push(T val) {
        mArray[count++] = val;
    }

    // 返回“栈顶元素值”
    public T peek() {
        return mArray[count - 1];
    }

    // 返回“栈顶元素值”,并删除“栈顶元素”
    public T pop() {
        T ret = mArray[count - 1];
        mArray[count - 1] = null; /* to let gc do its work */
        count--;
        return ret;
    }

    // 返回“栈”的大小
    public int size() {
        return count;
    }

    // 返回“栈”是否为空
    public boolean isEmpty() {
        return size() == 0;
    }

    // 打印“栈”
    public void printArrayStack() {
        if (isEmpty()) {
            System.out.printf("stack is Empty\n");
        }

        System.out.printf("stack size()=%d\n", size());

        int i = size() - 1;
        while (i >= 0) {
            System.out.println(mArray[i]);
            i--;
        }
    }
}

测试:

public static void main(String[] args) {
    GeneralArrayStack<String> stack = new GeneralArrayStack<>(String.class, 5);

    for (int i = 0; i < 5; i++) {
        stack.push("this is " + i);
    }

    System.out.println("栈顶:" + stack.peek());

    String pop = stack.pop();
    System.out.println("取出的栈顶元素:" + pop);

    stack.printArrayStack();
}

结果:

栈顶:this is 4
取出的栈顶元素:this is 4
stack size()=4
this is 3
this is 2
this is 1
this is 0
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 栈 栈的英文单词是Stack,它代表一种特殊的线性表,这种线性表只能在固定一端(通常认为是线性表的尾端)进行插入,...
    Jack921阅读 5,427评论 0 5
  • 栈和队列的特性 .栈(stacks)是一种只能通过访问其一端来实现数据存储与检索的线性数据结构,具有后进先出(la...
    锄禾日当阅读 10,268评论 0 0
  • 栈(Stack) 上一篇我们说到了列表,它是一种最自然的数据组织方式,如果对数据的存储顺序要求不重要,那么列表就是...
    Cryptic阅读 15,772评论 7 15
  • 一、栈 1.1 栈的实现 栈(Stack)是限制仅在表的一端进行插入和删除运算的线性表。java没有栈这样的数据结...
    yjaal阅读 5,293评论 0 1
  • 今天,一个少有的机会,我和我孩子被邀在一个餐厅就餐。餐厅在一个豪华酒店大楼里。就餐之余,孩子的好奇心带着我看了酒店...
    queenlotus阅读 1,859评论 0 0