数据结构与算法 — 栈(使用数组实现)

栈定义

栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
栈的示意图:
在这里插入图片描述

入栈

向栈中添加元素,此过程被称为"进栈" 。top指针初始值为-1,始终指向栈顶元素。
在这里插入图片描述

出栈

从栈中提取出指定元素,此过程被称为"出栈"
在这里插入图片描述

代码实现(数组)

1.创建模拟的类ArrayStack

初始化相应的成员变量。maxSize为栈能加入元素的最大个数,top初始值为-1(空栈时)。

class ArrayStack {
    private int maxSize;
    private int[] stack;
    private int top = -1;
    //重写构造函数,传入maxsize的值,并创建数组。
    public ArrayStack(int maxSize) {
        this.maxSize = maxSize;
        stack = new int[maxSize];
    }
    
}
2.判满

top始终指向栈顶,所以当top等于maxsize-1时,栈就是满的。

public boolean isFull(){
        return  top == maxSize-1;
    }
3.判空

top为-1时,该栈为空。

public boolean isEmpty(){
        return top == -1;
    }
4.入栈push

先判断是否栈满。没满的话,先将top指针向上移动后,把数据加入top指向的位置即可。

public void push(int value){
        if (isFull()){
            System.out.println("栈已经满了。。。");
            return;
        }
        top++;
        stack[top] = value;
    }
5.出栈pop

与入栈相反,要出栈的数据就是此时top指向的数据。只需将它返回,再把top指针向下移动即可。

public int pop(){
        if (isEmpty()){
            throw new RuntimeException("栈为空。。。");
        }
        int value = stack[top];
        top--;
        return value;
    }
6.显示栈

栈的显示是后加入的在前面显示,只需要一个逆循环就可以遍历出来。

public void list(){
        if (isEmpty()){
            System.out.println("栈为空。。。");
            return;
        }
        for (int i=top;i>=0 ;i--){
            System.out.println(stack[i]);
        }
    }

猜你喜欢

转载自blog.csdn.net/weixin_43773562/article/details/107761400