我的Java数据结构学习-5---栈(stack)

栈------stack  后进先出  压栈:

出栈入栈图解:

 

 

 

 

 

 栈的应用场景:

 

 数组模拟栈数据结构:

 

 

数组模拟栈:

package Demo1.stackArray;

public class ArrayStack {
    //数组模拟栈
    private int maxSize;//栈最大的大小
    //
    private int[] stack;
    //栈顶
    private int top = -1;

    //构造器。初始化栈
    public ArrayStack(int maxSize) {
        this.maxSize = maxSize;
        stack = new int[this.maxSize];
    }

    //栈满
    public boolean stackIsFull() {
        return top == maxSize - 1;
    }

    //栈空·
    public boolean stackIsEmpty() {
        return top == -1;
    }

    //入栈操作
    public void push(int value) {
        //栈满了,就不能入栈
        if (stackIsFull()) {
            System.out.println("栈已经满了,请其他操作");
            return;
        }
        top++;
        stack[top] = value;
    }

    //出栈操作
    public int pop() {
        //栈空的化,不能出栈
        if (stackIsEmpty()) {
            System.out.println("栈为空,不能出栈");
            throw new RuntimeException("栈空无数据");
        }
        int value = stack[top];
        top--;
        return value;
    }
    //遍历栈
    public void printfStack(){
        if (stackIsEmpty()) {
            System.out.println("栈空,没有数据");
            return;
        }
        String temp = "";
        //top顶部开始遍历
        for (int i = top; i >= 0; i--) {
            temp =temp + stack[i]+ "->";
        }
        temp =temp + "栈";
        System.out.println(temp);

    }
}

测试数组模拟的栈:

package Demo1.stackArray;

import java.util.Scanner;

public class ArrayStackTest {
    public static void main(String[] args) {
        //测试数组模拟栈
        ArrayStack arrayStack = new ArrayStack(4);
        String key ="";
        boolean flag = true;
        Scanner scanner = new Scanner(System.in);
        while (flag){
            System.out.println("show:显示栈信息");
            System.out.println("exit:退出程序");
            System.out.println("push:添加数据入栈");
            System.out.println("pop:从栈里面取出数据");
            System.out.println("亲,请输入指令:");
            key = scanner.next();
            switch (key){
                case "show":
                    //显示栈
                    arrayStack.printfStack();
                    break;//预防case穿透
                case "push":
                    //压栈
                    System.out.println("请输入添加的数据:");
                    int value= scanner.nextInt();
                    arrayStack.push(value);
                    break;
                case "pop":
                    try{
                        int pop = arrayStack.pop();
                        System.out.println("出栈的数据-->"+pop);
                    }catch (Exception e){
                        System.out.println(e.getMessage());
                    }finally {
                        break;
                    }
                case "exit":
                    scanner.close();
                    flag =false;
                    System.out.println("程序退出");
                    break;
            }
        }

    }
}

show:显示栈信息
exit:退出程序
push:添加数据入栈
pop:从栈里面取出数据
亲,请输入指令:
push
请输入添加的数据:
10
show:显示栈信息
exit:退出程序
push:添加数据入栈
pop:从栈里面取出数据
亲,请输入指令:
push
请输入添加的数据:
20
show:显示栈信息
exit:退出程序
push:添加数据入栈
pop:从栈里面取出数据
亲,请输入指令:
push
请输入添加的数据:
30
show:显示栈信息
exit:退出程序
push:添加数据入栈
pop:从栈里面取出数据
亲,请输入指令:
show
30->20->10->栈
show:显示栈信息
exit:退出程序
push:添加数据入栈
pop:从栈里面取出数据
亲,请输入指令:
pop
出栈的数据-->30
show:显示栈信息
exit:退出程序
push:添加数据入栈
pop:从栈里面取出数据
亲,请输入指令:
show
20->10->栈
show:显示栈信息
exit:退出程序
push:添加数据入栈
pop:从栈里面取出数据
亲,请输入指令:
exit
程序退出

 

posted on 2020-08-07 11:27  白嫖老郭  阅读(120)  评论(0)    收藏  举报

导航