我的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   白嫖老郭  阅读(110)  评论(0编辑  收藏  举报

编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示