数据结构与算法单排日记-2020/3/7-栈

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.栈的应用场景

  1. 子程序的调用:在跳往子程序前,会先将下个指令的地址存到堆栈中,直到子程序执行完后再将地址取出,以回到原来的程序中。
  2. 处理递归调用:和子程序的调用类似,只是除了储存下一个指令的地址外,也将参数、区域变量等数据存入堆栈中。
  3. 表达式的转换[中缀表达式转后缀表达式]与求值(实际解决)。
  4. 二叉树的遍历。
  5. 图形的深度优先(depth一first)搜索法。

2.数组模拟栈的思路分析

  1. 使用数组来模拟栈
  2. 定义一个top来表示栈顶,初始化为-1
  3. 入栈的操作,当有数据加入到栈时,top++; stack[top]=data;
    4.出栈的操作,int value=stack[top];top--,return valuel;

2.数组模拟栈的代码实现

package Stack;

public class ArrayStack {
    private int[] stack;
    private int top = -1;
    private int maxsize;

    public ArrayStack(int maxsize) {
        this.maxsize = maxsize;
        //数组初始化
        stack = new int[this.maxsize];
    }

    //判断栈满
    public boolean isFull() {
        return top == maxsize - 1;
    }

    //判断栈空
    public boolean isEmpty() {
        return top == -1;
    }

    //入栈
    public void push(int n) {
        if (isFull()) {
            System.out.println("栈满");
            return;
        } else {
            top++;
            stack[top] = n;
        }
    }

    //出栈
    public int pop() {
        if (isEmpty()){
            throw new RuntimeException("栈空");
        }else {
        int value = stack[top];
        top--;
        return value;
        }
    }

    //显示栈内数据
    public void show(){
        if (isEmpty()){
            System.out.println("栈空");
        }else {
            for (int i = top; i >=0 ; i--) {
                System.out.println(stack[i]);
            }
        }
    }
}
  • 测试:
package Stack;

import java.util.Scanner;

public class DemoStack {
    public static void main(String[] args) {
        System.out.println("请输入栈的容量");
        Scanner scanner = new Scanner(System.in);
        ArrayStack arrayStack = new ArrayStack(scanner.nextInt());
        boolean loop = true;
        char key = ' ';
        while (loop) {
            System.out.println("s,显示栈内数据");
            System.out.println("o,出栈");
            System.out.println("h,入栈");
            System.out.println("e,退出");
            key = scanner.next().charAt(0);
            switch (key) {
                case 's':
                    arrayStack.show();
                    break;
                case 'o':
                    try{
                        arrayStack.pop();
                    }catch (Exception e){
                        System.out.println(e.getMessage());
                    }finally {
                        break;
                    }
                case 'h':
                    System.out.println("输入数字为:");
                    arrayStack.push(scanner.nextInt());
                    break;
                case 'e':
                    loop=false;
                    break;
            }
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值