堆栈的静态数组实现

package stack;
import java.io.*;
/**
 * @author Eightn0
 * @create 2021-03-15 14:05
 * 堆栈:一组相同数据类型的组合,具有后进先出的特性
 * 应用中的堆栈:递归调用,子程序的调用等
 * Java中的堆栈:用静态数组或者动态链表结构实现,但需要维持堆栈后进先出与从顶端读取数据的两个原则
 *
 */

/*用数组声明一个堆栈*/
class StackByArray {
    private int[] stack;//存放堆栈的数组
    private int top;//指向顶端的索引

    //构造函数
    public StackByArray(int stack_size) {//输入stack的容量
        this.stack = new int[stack_size];//返回一个带顶端指针的静态数组型堆栈
        this.top = -1;
    }


    /*压栈方法:push*/
    public boolean push(int data) {
        if (top >= stack.length) { //若指针下移到数组最后一位,说明栈空间已满
            System.out.println("堆栈已满,无法加入");
            return false;
        } else {
            stack[++top] = data;//将数据放入静态数组中,并且指针上移
            return true;
        }
    }

    /*判断是否为空:empty*/
    public boolean empty() {
        if (top == -1) return true;//指针指向数组前,说明数组空,说明栈空
        else return false;
    }

    /*出栈:pop*/
    public int pop() {
        if (empty()) return -1;//若数组空,则没有数据可以出栈
        else return stack[top--];//若数组非空,让最后进入的数据出栈,并且指针下移
    }
}

public class Stack_01{
    public static void main(String[] args) throws IOException {
        BufferedReader bufferedReader;
        int value;
        StackByArray stackByArray = new StackByArray(10);
        bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("请输入10个数据,每次以回车结束");
        for (int i = 0; i < 10; i++) {
            value = Integer.parseInt(bufferedReader.readLine());
            stackByArray.push(value);
        }
        System.out.println("==================================");
        while (!stackByArray.empty()){
            System.out.println("栈弹出的顺序为:"+stackByArray.pop());
        }
    }
}

猜你喜欢

转载自blog.csdn.net/vivian233/article/details/114832839