Java定义栈结构,并实现入栈、出栈操作完整示例

下面是完整的Java定义栈结构,并实现入栈、出栈操作攻略。

什么是栈

栈是一种“后进先出”(Last In First Out,LIFO)的数据结构,典型的例子是一个子弹夹或一个餐盘堆叠。栈结构在计算机科学中有广泛的应用,例如在函数调用栈、表达式求值、语法分析等领域都有着重要的作用。

Java定义栈结构

在Java中,可以使用数组或链表来实现栈结构。下面是使用数组实现栈结构的示例代码:

public class ArrayStack {

    private int top; // 栈顶指针
    private int[] stack; // 栈数组
    private int capacity; // 栈容量

    // 构造方法,创建指定容量的栈
    public ArrayStack(int capacity) {
        this.capacity = capacity;
        this.stack = new int[capacity];
        this.top = -1; // 栈顶指向-1,表示栈为空
    }

    // 入栈操作
    public void push(int value) {
        if (top == capacity - 1) { // 判断栈是否已满
            throw new RuntimeException("Stack is full");
        }
        stack[++top] = value; // 将元素压入栈中,并将栈顶指针加1
    }

    // 出栈操作
    public int pop() {
        if (top == -1) { // 判断栈是否为空
            throw new RuntimeException("Stack is empty");
        }
        return stack[top--]; // 返回栈顶元素,并将栈顶指针减1
    }

    // 获取栈顶元素
    public int peek() {
        if (top == -1) { // 判断栈是否为空
            throw new RuntimeException("Stack is empty");
        }
        return stack[top]; // 返回栈顶元素
    }

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

    // 获取栈的大小
    public int size() {
        return top + 1;
    }

    // 打印栈内元素
    public void printStack() {
        System.out.print("[");
        for (int i = 0; i <= top; i++) {
            System.out.print(stack[i]);
            if (i != top) System.out.print(", ");
        }
        System.out.println("]");
    }

}

在上述代码中,使用一个数组来存储栈中的元素,同时维护一个栈顶指针top,表示当前栈顶元素的位置。在实现入栈操作时,若栈已满则抛出异常;否则将元素压入栈中,并将栈顶指针加1。在实现出栈操作时,若栈为空则抛出异常;否则返回栈顶元素,并将栈顶指针减1。

示例说明

下面,利用刚刚定义的栈结构,给出入栈、出栈操作的两个示例。

示例一:栈内数据类型为字符串类型

public class TestStack {

    public static void main(String[] args) {

        // 创建一个容量为5的字符串类型的栈
        ArrayStack stack = new ArrayStack(5);

        // 向栈中压入3个字符串元素
        stack.push("Hello");
        stack.push("World");
        stack.push("!");

        // 打印栈内元素和栈大小
        stack.printStack();
        System.out.println("Stack size: " + stack.size());

        // 弹出栈顶元素
        String str = (String) stack.pop();
        System.out.println("Popped element: " + str);

        // 打印栈内元素和栈大小
        stack.printStack();
        System.out.println("Stack size: " + stack.size());

    }

}

在示例一中,我们创建了一个容量为5的字符串类型的栈。向栈内压入三个字符串元素,然后弹出栈顶元素,并打印栈内元素和栈大小。

示例二:栈内数据类型为整型

public class TestStack {

    public static void main(String[] args) {

        // 创建一个容量为10的整型栈
        ArrayStack stack = new ArrayStack(10);

        // 向栈中压入10个整型元素
        for (int i = 1; i <= 10; i++) {
            stack.push(i);
        }

        // 打印栈内元素和栈大小
        stack.printStack();
        System.out.println("Stack size: " + stack.size());

        // 弹出5个元素,并打印它们
        System.out.print("Popped elements: ");
        for (int i = 1; i <= 5; i++) {
            int val = stack.pop();
            System.out.print(val + " ");
        }
        System.out.println();

        // 打印栈内元素和栈大小
        stack.printStack();
        System.out.println("Stack size: " + stack.size());

    }

}

在示例二中,我们创建了一个容量为10的整型栈。向栈内压入10个整型元素,然后弹出栈顶的5个元素,并打印弹出的元素和栈内元素和栈大小。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java定义栈结构,并实现入栈、出栈操作完整示例 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • JavaWeb中的路径问题解读

    JavaWeb中的路径问题解读 在JavaWeb开发中,路径问题一直是困扰初学者的难点之一,本文将深入剖析JavaWeb中的路径问题,让读者对JavaWeb中的路径有更全面的理解。 1. 路径的种类 在JavaWeb中,常见的路径种类包括:绝对路径、相对路径、虚拟路径和物理路径。接下来分别进行讲解。 1.1 绝对路径 绝对路径是指从硬盘根目录开始的完整路径,…

    Java 2023年6月16日
    00
  • Java中线程状态+线程安全问题+synchronized的用法详解

    下面是Java中线程状态、线程安全问题以及synchronized的用法详解,包含示例说明: Java中线程状态 Java中的线程状态主要有以下五种: 新建状态(New):线程对象被创建后,但还没有调用start()方法时,线程处于新建状态。 运行状态(Runnable):当线程对象调用start()方法后,线程就处于运行状态。在运行状态下,线程会不断地执行…

    Java 2023年5月19日
    00
  • 实战讲解Maven安装及基本使用详解

    实战讲解Maven安装及基本使用详解 什么是Maven Maven是一款管理Java项目构建、依赖管理、自动化构建、发布管理的工具,同时也是一个强大的项目管理工具。通过Maven,我们可以明确项目的开发流程,控制项目的质量和构建过程。使用Maven可以大大提高Java项目的开发效率,并且可以帮助我们更好地管理项目所依赖的库。 Maven的安装步骤 下载Mav…

    Java 2023年5月20日
    00
  • SpringBoot批处理的实现示例

    下面是“SpringBoot批处理的实现示例”的完整攻略。 什么是SpringBoot批处理 Spring Batch是Spring框架中的一个模块,用于大批量数据的处理,可以非常方便地实现数据的读取、处理和输出。SpringBoot批处理是使用Spring Batch模块实现的批处理应用。 如何使用SpringBoot批处理 步骤1:引入Spring Ba…

    Java 2023年5月19日
    00
  • Win7系统无法安装Java怎么办 Win7系统无法安装Java的故障分析及解决方法

    Win7系统无法安装Java怎么办 如果你在安装Java时遇到了问题,出现无法安装的情况,下面是一些可能的原因和解决方法。 故障分析 操作系统不兼容:Java需要较新的操作系统才能正常运行,Win7系统需要安装最新的更新才能兼容Java。 安装程序有缺陷:安装文件可能损坏或不完整,或者本地安全软件拦截了安装文件。 系统环境变量问题:安装过程中可能操作错误,导…

    Java 2023年5月24日
    00
  • Java如何实现支付宝电脑支付基于servlet版本

    Java 如何实现支付宝电脑支付基于 Servlet 版本,具体的实现步骤如下: 1. 注册支付宝商家账号 首先需要注册一个支付宝商家账号。 2. 下载支付宝开发者工具包 下载支付宝提供的开发者工具包,官方推荐使用 Java 版本的 SDK。 3. 创建订单 在进行支付前需要创建一个订单,在创建订单时需要填写订单的一些基本信息,例如订单金额、商品名称、订单号…

    Java 2023年5月26日
    00
  • Java如何判断字符串中是否包含某个字符

    如果需要在Java中判断一个字符串是否包含某个字符,可以使用String类的contains()方法或indexOf()方法。 方法1:contains()方法 contains()方法用于判断一个字符串中是否包含另一个字符串。它返回一个布尔值,表示待判断的字符串是否包含指定的字符或字符串。 下面是一个例子: String str = "hello…

    Java 2023年5月27日
    00
  • 从零开始搭建springboot+springcloud+mybatis本地项目全过程(图解)

    下面我将详细讲解“从零开始搭建springboot+springcloud+mybatis本地项目全过程(图解)”的完整攻略。 1. 准备工作 首先,我们需要准备一个Java开发环境,可以通过官网下载JDK安装包并进行安装。同时,我们需要下载并安装IDE,例如Eclipse、IntelliJ IDEA等。接着,我们需要下载并安装Maven,用于管理项目依赖。…

    Java 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部