java栈的实现(数组型)

//实现类
package stack;

/**
 * 栈是限定在表尾进行插入或者删除操作的线性表
 * 因为表尾叫栈顶
 * 表头叫栈底
 * 不含元素的叫空栈
 * 特点是后进先出LIFO
 */
public class stack<T> {
    //栈底指针
    private int base;
    //栈顶指针
    private int top;
    //栈当前大小
    int size;
    //存储栈的数组
    private T[] list;
    //初始大小
    private  Integer STACKINCREMENT = 10;

    /**
     * 初始化 构造一个空栈
     */
    public void InitStack() {
         list = (T[]) new Object[STACKINCREMENT];
        base = top = 0;
        size = 0;
        return;
    }

    /**
     * 销毁栈
     */
    public  void DestroyStack() {
        list = null;
        base = top = 0;
        size = 0;
    }

    /**
     * 清空栈
     */
    public void ClearStack() {
        list = (T[]) new Object[STACKINCREMENT];

        base = top = 0;
        size = 0;
    }

    /**
     * 判空
     */
    public Boolean StackEmpty() {
        if (size == 0) {
            return Boolean.TRUE;
        } else {
            return Boolean.FALSE;
        }
    }

    /**
     * 返回栈的长度
     */
    public int StackLength() {
        return size;
    }

    /**
     * 查看栈顶元素
     */
    public T getTop() {
        return list[top];
    }

    /**
     * 插入栈顶元素
     */
    public Boolean push(T e) {
        //先判断栈有没有满 如果满了要扩容
        if (top-base>=STACKINCREMENT){
            //扩容
            addSize();
        }

        this.list[top]=e;
        top++;
        size++;
        return Boolean.TRUE;
    }

    /**
     * 出栈
     */
    public  T Pop() {
        //判断是否是空
        if (top==base){
            return  null;
        }
       T e= this.list[top-1];
       top--;
       size--;

        return e;
    }

    /**
     * 扩容
     */
    public void addSize(){
        STACKINCREMENT= (int) (STACKINCREMENT*1.5);
        T[] list = (T[]) new Object[STACKINCREMENT];

        for (int i = 0; i <this.size ; i++) {
            list[i]=this.list[i];
        }

        return;
    }

    /**
     * 遍历栈
     */
    public void print(){

        for ( int temp=top-1;temp>=0; temp--) {
            System.out.print(this.list[temp]);
        }
        System.out.println();
    }
}


//测试
package test;

import stack.stack;

public class Stacktest {
    public static void main(String[] args) {
        stack<Integer> stack=new stack();
        stack.InitStack();
        stack.push(1);
        stack.push(2);
        stack.push(3);
        stack.print();
        System.out.println(stack.Pop());

        int size=stack.StackLength();
        for (int i = 0; i < size; i++) {
            System.out.println(stack.Pop());
        }



    }
}

猜你喜欢

转载自blog.csdn.net/qq_20009015/article/details/80723637
今日推荐