您现在的位置是:首页 > 后台技术 > 数据结构与算法数据结构与算法

栈(图文)

第十三双眼睛2022-06-07【数据结构与算法】人已围观

简介

栈的介绍
栈的英文为stack
栈是一个先入后出的有序列表
栈只能在一端进行元素的插入和删除,允许插入和删除的一端称为栈顶,不动的一端称为栈底

栈的应用场景
子程序的调用:先将下个程序的地址存放在栈中,直到子程序执行完后,再将地址取出,回到原来的程序中
处理递归调用:和子程序的调用类似,只是除了子程序的地址外,也将参数,区域变量存入栈中
表达式的转换:中缀表达式转后缀表达式,与求值
二叉树的遍历
图的深度优先(deep-first)搜索法
创建一个栈
package day002;
public class ArrayStack {
    private int maxSize;
    private int []stack;
    private int top=-1;
    public ArrayStack(int maxSize){
        this.maxSize=maxSize;
        this.stack=new int[maxSize];
    }
    public boolean isFull(){
        return this.top==maxSize-1;
    }
    public boolean isEmpty(){
        return top==-1;
    }
    public void push(int value){
        if(isFull()){
            System.out.println("栈满");
            return;
        }
        top++;
        stack[top] = value;
    }
    public int pop(){
        if(isEmpty()){
            throw new RuntimeException("栈空");
        }
        int value=stack[top--];
        return value;
    }
    public void list(){
        if(isEmpty()){
            System.out.println("栈空");
            return;
        }
        for(int i=top;i>=0;i--){
            System.out.println(stack[i]);
        }
    }
}
测试一下
package day002;
import java.util.Scanner;
public class ArrayStackDemo {
    public static void main(String[] args) {
        ArrayStack stack = new ArrayStack(4);
        String key = "";
        boolean loop = true;
        Scanner scanner = new Scanner(System.in);
        while (loop){
            System.out.println("show(s),遍历栈");
            System.out.println("exit(e),退出");
            System.out.println("push(u),入栈");
            System.out.println("pop(o),出栈");
            System.out.println("请输入你的选择");
            key = scanner.next();
            switch (key) {
                case "s":
                    stack.list();
                    break;
                case "e":
                    loop = false;
                    break;
                case "u":
                    System.out.println("请输入一个数");
                    int value = scanner.nextInt();
                    stack.push(value);
                    break;
                case "o":
                    try{
                        System.out.println(stack.pop());
                    }catch (Exception e){
                        e.printStackTrace();
                    }
                    break;
                default:
                    System.out.println("输入有误,请重新输入");
                    break;
            }
        }
        System.out.println("已结束");
    }
}
测试结果
show(s),遍历栈
exit(e),退出
push(u),入栈
pop(o),出栈
请输入你的选择
u
请输入一个数
1
show(s),遍历栈
exit(e),退出
push(u),入栈
pop(o),出栈
请输入你的选择
s
1
show(s),遍历栈
exit(e),退出
push(u),入栈
pop(o),出栈
请输入你的选择
o
1
show(s),遍历栈
exit(e),退出
push(u),入栈
pop(o),出栈
请输入你的选择
e
已结束

Tags:

很赞哦! ()

文章评论

    共有条评论来说两句吧...

    用户名:

    验证码:

本站推荐

站点信息

  • 网站名称:JavaStudy
  • 建站时间:2019-1-14
  • 网站程序:帝国CMS7.5
  • 文章统计242篇文章
  • 标签管理标签云
  • 统计数据百度统计
  • 微信公众号:扫描二维码,关注我们