自己实现一个栈结构

明白一个概念:

 栈:是一种特殊的数据结构,特数性在于:栈本身是数组或者链表,常用的是数组

特点:

 LIFO:后进先出

生活场景:叠加盘子,取盘子

2.栈在函数中的调用

package com.redis.algorithm.stack;


/**
 * 栈:一种特殊的数据结构,是数组或者链表
 *
 * @param <Item>
 */
package com.redis.algorithm.stack;

public interface MyStack<Item> {

    MyStack<Item> push(Item item);   //入栈

    Item pop();   //出栈

    int size();

    boolean isEmpty();
}

public class ArrayStack<Item> implements MyStack<Item> {

    private Item[] a = (Item[]) new Object[1];   //
    private int n = 0;   //初始的元素个数

    public ArrayStack(int cap) {
        a = (Item[]) new Object[cap];    //初始化的时候,指定大小,这样就不需要扩容
    }

    @Override
    public MyStack<Item> push(Item item) {
        judgeSize();   //判断容量,是不是需要扩容
        a[n++] = item;   //向数组中添加元素
        return null;
    }

    private void judgeSize() {
        if (n <= a.length) {    //元素的个数已经超出了数组的容量,进行扩容
            resize(2 * a.length);
        } else if (n > 0 && n <= a.length / 2) {
            resize(a.length / 2);   //动态缩容
        }
    }

    private void resize(int size) {
        //扩容:建立一个临时的变量进行扩容,数的赋值关系
        Item[] temp = (Item[]) new Object[size];
        for (int i = 0; i < n; i++) {
            temp[i] = a[i];
        }
        a = temp;
    }


    @Override
    public Item pop() {  //出栈
        if (isEmpty()) {
            return null;
        }
        Item item = a[--n];    //--n 把n减了在用,n--用了在减
        a[n] = null;
        return item;   //默认值为null
    }

    @Override
    public int size() {
        return n;  //默认值为0
    }

    @Override
    public boolean isEmpty() {
        return n == 0;   //默认值为false
    }
}

 

自己实现一个栈结构自己实现一个栈结构 航海到IT的转变,梦想一直在路上 发布了320 篇原创文章 · 获赞 34 · 访问量 12万+ 私信 关注
上一篇:顺序栈


下一篇:Android_小账本_筛选功能的实现