数组模拟栈-java

我们主要通过数组来模拟栈,并实现了基本的入栈、出栈、是否栈满和查看栈顶指针的基本功能。


前言

我们主要i通过数组来模拟栈,并实现了基本的入栈、出栈、是否栈满和查看栈顶指针的基本功能。


提示:以下是本篇文章正文内容,下面案例可供参考

一、模拟栈

实现一个栈,栈初始为空,支持四种操作:

  1. push x – 向栈顶插入一个数 x;
  2. pop – 从栈顶弹出一个数;
  3. empty – 判断栈是否为空;
  4. query – 查询栈顶元素。

现在要对栈进行 M个操作,其中的每个操作 3和操作 4 都要输出相应的结果。

输入格式

第一行包含整数 M,表示操作次数。

接下来 M 行,每行包含一个操作命令,操作命令为 push xpopemptyquery 中的一种。

输出格式

对于每个 empty 和 query 操作都要输出一个查询结果,每个结果占一行。

其中,empty 操作的查询结果为 YES 或 NOquery 操作的查询结果为一个整数,表示栈顶元素的值。

数据范围

1≤M≤100000
1≤x≤109
所有操作保证合法。

二、算法思路

栈这种数据结构最主要的特点就是先进后出,我们可以想象成一个罐子,我们往里面放东西,最先拿出来的一定是最上面的即最后放入的东西。

1.变量解释

 图1.1样例图

我们引入一维整型数组stack用来存储栈里面的值,然后引入一个整型变量top来表示栈顶指针即数组中栈顶元素的下标。

2.判断是否空栈

我们默认下标为0不存储值,即栈顶指针top的初始值为0,当我们的栈顶指针为0的时候就是栈内没存储任何值即空栈。

     //栈空
    public static boolean isEmpty(){
        if(top > 0){
            return false;
        }
        return true;
    }

3.向栈顶插入一个x

 图3.1模拟入栈图

我们将x的入栈,就是先让栈顶指针右移,然后再让x存入栈中即可,即stack[++top] = x。

注: ++top的意思是先让top的值加1,然后在用top的值;top++是先用top的值,然后再让top加1。要注意这两个的区别。

    //入栈
    public static void push(int x){
        stack[++top] = x;
    }

4.从栈顶弹出一个数

 图4.1出栈

出栈操作我们只需要让栈顶指针左移即可,这样就可以实现出栈操作。即top--

    //出栈
    public static void pop(){
        top--;
    }

5.插看栈顶元素

我们栈顶指针top就是栈顶元素在数组中的下标,故我们查看栈顶元素就是stack[top]。

    //查看栈顶元素
    public static int query(){
        return stack[top];
    }

三、代码如下

1.代码如下(示例):


import java.io.*;
import java.util.*;
public class 模拟栈 {
    static PrintWriter pw = new PrintWriter(new OutputStreamWriter(System.out));
    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    static int N = 100010;
    //栈
    static int[] stack = new int[N];
    //栈顶下标
    static int top;
    public static void main(String[] args) {
        Scanner sc = new Scanner(br);
        int m = Integer.parseInt(sc.nextLine());
        while (m-- > 0){
            String[] str = sc.nextLine().split(" ");
            int x;
            String cmd = str[0];
            //入栈
            if(cmd.equals("push")){
                x = Integer.parseInt(str[1]);
                push(x);
            }
            //出栈
            else if (cmd.equals("pop")){
                pop();
            }
            //是否空栈
            else if (cmd.equals("empty")) {
                pw.println(isEmpty() == true ? "YES" : "NO");
            } else if (cmd.equals("query")) {
                pw.println(query());
            }
        }
        pw.flush();
    }

    //栈空
    public static boolean isEmpty(){
        if(top > 0){
            return false;
        }
        return true;
    }
    //入栈
    public static void push(int x){
        stack[++top] = x;
    }
    //出栈
    public static void pop(){
        top--;
    }
    //查看栈顶元素
    public static int query(){
        return stack[top];
    }
}

2.读入数据

10
push 5
query
push 6
pop
query
pop
empty
push 4
query
empty

3.代码运行结果

5
5
YES
4
NO

最后栈中元素为: 4。其中5和6依次入栈,又被弹出。


总结

通过数组来模拟栈,然后实现了基本的入栈、出栈、是否栈满和查看栈顶指针的基本功能。

  • 14
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值