数据结构 - 栈

package com.test.testStack;

import java.util.Arrays;

public class TestStack {

    private Object[] array; // 模拟栈
    private int capacity;    // 栈的容量
    private int top;    // 栈顶元素的下标

    public TestStack() {
        this.capacity= 10;
        this.array = new Object[10];
        top = -1;
    }

    public TestStack(int capacity) {
        if (maxSize <= 0)
            throw new IllegalArgumentException("Illegal Argument");
        this.capacity= capacity;
        array = new Object[capacity];
        top = -1;
    }

    /**
     * 入栈
     * @param value 新加入到栈顶的元素值
     */
    private void push(Object elem) {
        enlarge(top + 1);
        array[++top] = elem;
    }

    /**
     * 出栈
     * @return 从栈顶出栈的元素值
     */
    private Object pop() {
        Object obj = null;
        if (top > 0) {
            obj = array[top];
            array[top--] = null;
            return obj;
        }
        else if (top == 0) {
            obj = array[top];
            top = -1;
            return obj;
        }
        return obj;
    }

    /**
     * 查看栈顶元素的值
     * @return 栈顶元素的值
     */
    private Object peek() {
        return array[top];
    }

    /**
     * 判断栈是否为空
     * @return 是否为空
     */
    private boolean isEmpty() {
        return top == -1;
    }

    /**
     * 判断栈是否为满
     * @return 是否为满
     */
    private boolean isFull() {
        return top == (maxSize - 1);
    }

    /**
     * 判断栈是否需要扩容
     * @param capacity 新容量
     * @return 是否需要扩容
     */
    public boolean enlarge(int newCapacity) {
		if (newCapacity >= capacity) {
			boolean flag = (capacity << 1) > Integer.MAX_VALUE;
			capacity = flag ? Integer.MAX_VALUE : capacity << 1;
			array = Arrays.copyOfRange(array, 0, capacity);
			return true;
		}
		return false;
	}

    public static void main(String[] args) {
        TestStack demo = new TestStack(3);
        demo.push(1);
        demo.push(2);
        demo.push(3);
        demo.push(4);
        System.out.println(demo.isFull());
        demo.pop();
        demo.pop();
        System.out.println(demo.array.length);
        System.out.println(demo.peek());
        demo.pop();
        System.out.println(demo.isEmpty());
    }



}

猜你喜欢

转载自blog.csdn.net/qq_34561892/article/details/84076432