栈源码分析

栈底层实现是一个数组,可以做到先进后出原则。入栈和出栈都操作栈顶元素

package stack.init;

public class MyStack {
    /**
     * 栈最大长度
     */
    private int size;

    /**
     * 栈底层实现 数组
     */
    private int[] arrays;

    /**
     * 临时变量指向 栈顶元素
     */
    private int top;

    /**
     * 默认初始化
     */
    public MyStack() {
        size = 10;
        arrays = new int[size];
        top = -1;
    }

    /**
     * 自定义初始化
     *
     * @param size
     */
    public MyStack(int size) {
        if (size <= 0) {
            throw new IllegalArgumentException("初始容量不能为" + size);
        }
        this.size = size;
        arrays = new int[size];
        top = -1;
    }

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

    /**
     * 判断栈是否已满
     *
     * @return
     */
    public boolean isFull() {
        if (top == size - 1) {
            return true;
        }
        return false;
    }

    /**
     * 向栈顶插入元素
     *
     * @param value
     */
    public void push(int value) {
        if (isFull()) { // 栈已满
            // 自动扩容
        } else {
            // 将元素插入栈顶
            top++;
            arrays[top] = value;
        }

    }

    /**
     * 访问栈顶元素
     *
     * @return
     */
    public int peek() {
        if (top == -1) { // 空栈
            throw new IndexOutOfBoundsException("栈为空");
        }
        // 获取栈顶元素
        return arrays[top];
    }

    /**
     * 弹出栈顶元素
     *
     * @return
     */
    public int pop() {
        int size = peek();
        remove(top);
        return size;
    }

    /**
     * 删除栈顶元素
     *
     * @return
     */
    public void remove(int top) {
        arrays[top] = -1;
        this.top--;
    }
    
}

测试类


import stack.init.MyStack;

import java.util.Stack;

public class Test {

    /**
     * 栈初始化
     */
    public void myStack(){
        // 1. 初始化 自动扩容
        MyStack myStack = new MyStack();
        // 2. 判断栈是否为空
        System.out.println("栈是否为空:" + myStack.isEmpty());
        // 3. 判断栈是否满
        System.out.println("栈是否满:" + myStack.isFull());
        // 4. 向栈中添加元素
        myStack.push(1);
        myStack.push(2);
        myStack.push(3);
        myStack.push(4);
        myStack.push(5);
        myStack.push(6);
        myStack.push(7);
        myStack.push(8);
        myStack.push(9);
        myStack.push(10);
        // 5. 访问栈顶元素
        System.out.println(myStack.peek());
        System.out.println(myStack.peek());
        // 6. 弹出栈顶元素
        System.out.println(myStack.pop());
        System.out.println(myStack.pop());

    }

    public static void main(String[] args) {
        Test test = new Test();
        test.myStack();
    }
}

测试结果

栈是否为空:true
栈是否满:false
10
10
10
9

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值