数组模拟入栈出栈

首先对栈做一个简单的介绍,栈是一个先入后出的有序列表,可以看成特殊的队列,它限制了数据的插入和删除操作只能在线性表的同一端(栈顶)。

栈的常见操作:

  1. 插入:在栈中插入操作称为入栈,最先放入栈中的元素在栈底,最后放入的元素在栈顶。
  2. 删除:在栈中删除操作称为出栈,最先删除的元素在栈顶,最后删除的元素在栈底。

入栈和出栈示意图:

实现栈的思路:

  1. 使用数组来模拟(单链表也是可以的);
  2. 定义一个top来表示栈顶,初始化为-1;
  3. 入栈,top++,stack[top]=data;
  4. 出栈,int value = stack[top],top--,return value;

使用数组来模拟栈,定义一个top来表示栈顶,初始化为-1:

class ArrayStack{
    private int maxSize; //栈的最大容量
    private int[] stack; //数组模拟栈
    private int top = -1; //top指针

    public ArrayStack(int maxSize){
        this.maxSize = maxSize;
        stack = new int[this.maxSize];
    }
}

 入栈,top++,stack[top]=data:

// 1.入栈
public void push(int value){
    if (isFull()){
        System.out.println("栈满,无法执行入栈操作");
        return;
    }
    top++;
    stack[top] = value;
}

出栈,int value = stack[top],top--,return value:

// 2.出栈
public int pop(){
    if (isEmpty()){
        throw new RuntimeException("栈空,无法执行出栈操作");
    }
    int data = stack[top];
    top--;
    return data;
}

完整模拟代码:

package cn.cwj.stack;

import java.util.Scanner;

public class ArrayStackDemo {
    public static void main(String[] args) {
        ArrayStack arrayStack = new ArrayStack(5);
        Scanner scanner = new Scanner(System.in);
        boolean flag = true;
        while (flag){
            System.out.println("show:显示栈中元素");
            System.out.println("push:入栈");
            System.out.println("pop:出栈");
            System.out.println("exit:退出");
            System.out.println("请输入要执行的操作:");
            String key = scanner.next();
            switch (key){
                case "show":
                    arrayStack.show();
                    break;
                case "push":
                    System.out.println("请输入入栈元素");
                    int data = scanner.nextInt();
                    arrayStack.push(data);
                    break;
                case "pop":
                    arrayStack.pop();
                    break;
                case "exit":
                    flag = false;
                    break;
            }
        }
    }
}
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 isFull(){
        return top == maxSize-1;
    }
    public boolean isEmpty(){
        return top == -1;
    }

    // 1.入栈
    public void push(int value){
        if (isFull()){
            System.out.println("栈满,无法执行入栈操作");
            return;
        }
        top++;
        stack[top] = value;
    }

    // 2.出栈
    public int pop(){
        if (isEmpty()){
            throw new RuntimeException("栈空,无法执行出栈操作");
        }
        int data = stack[top];
        top--;
        return data;
    }

    // 3.显示栈中元素
    public void show(){
        if (isEmpty()){
            System.out.println("栈空,没有元素显示");
        }
        for (int i = top; i>=0 ; i--) {
            System.out.printf("Stack[%d]=%d\n",i,stack[i]);
        }
    }
}

 

在Matlab中,入栈出栈通常使用push和pop函数来实现。具体来说,入栈操作将数据压入堆栈的顶部,而出栈操作将数据从堆栈的顶部弹出。 在Matlab中,可以使用数组模拟堆栈数据结构。下面是一个简单的示例代码,展示了如何实现入栈出栈操作: ```matlab % 创建一个空的堆栈 stack = []; % 入栈操作 stack = [stack, data]; % 出栈操作 data = stack(end); stack = stack(1:end-1); ``` 其中,`data`是要入栈的数据。对于入栈操作,我们可以使用数组的拼接操作将数据添加到堆栈的顶部。而出栈操作,则是通过获取堆栈最后一个元素,并将其从堆栈中删除。 需要注意的是,这只是Matlab中一种简单的模拟堆栈数据结构的方法。实际上,Matlab提供了更多高级的数据结构和函数来处理栈操作,比如使用cell数组来存储不同类型的元素。你可以参考Matlab的文档或者帮助信息来了解更多关于栈操作的函数和用法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [MATLAB](https://blog.csdn.net/weixin_37801425/article/details/104182812)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值