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日

相关文章

  • 【深度思考】聊聊JDK动态代理原理

    1. 示例 首先,定义一个接口: public interface Staff { void work(); } 然后,新增一个类并实现上面的接口: public class Coder implements Staff { @Override public void work() { System.out.println(“认真写bug……”); } } …

    Java 2023年4月17日
    00
  • Spring MVC 与 CORS跨域的详细介绍

    Spring MVC 与 CORS跨域的详细介绍 在Web开发中,跨域请求是一种常见的需求。CORS(Cross-Origin Resource Sharing)是一种机制,它允许Web应用程序从不同的域访问其资源。本文将详细介绍Spring MVC与CORS跨域的相关知识,并提供两个示例说明。 CORS跨域的实现原理 CORS跨域的实现原理是通过在HTTP…

    Java 2023年5月17日
    00
  • Maven提示jdk版本不正确的问题

    下面是Maven提示jdk版本不正确的问题的解决攻略: 1. 查看Maven是否正确识别jdk 首先需要确认Maven是否正确识别了你的jdk版本,使用以下命令查看: mvn -version 在输出的信息中,需要查看“Java home”一行,确认路径是否为你安装的JDK路径。如果不是,可以通过以下两种方式解决: (1) 使用环境变量 在你的环境变量中添加…

    Java 2023年5月19日
    00
  • Java陷阱之慎用入参做返回值详解

    在Java编程中,我们经常需要将方法的参数作为返回值返回。然而,这种做法可能会导致一些陷阱,特别是在多线程环境下。在本文中,我们将详细讲解“Java陷阱之慎用入参做返回值”的完整攻略,并提供两个示例来说明这个过程。 问题描述 在Java编程中,我们经常需要将方法的参数作为返回值返回。例如,我们可能会编写以下代码: public int increment(i…

    Java 2023年5月18日
    00
  • Spring Boot 静态资源处理方式

    下面是Spring Boot静态资源处理方式的完整攻略: 一、什么是Spring Boot静态资源处理方式 Spring Boot是一个快速开发框架,它提供了非常方便的静态资源处理方式,可以让我们轻松地管理Web应用程序的静态资源,包括CSS、JavaScript、图片等。静态资源可以是Web应用程序的可执行程序之外的文件。静态资源可以存储在文件系统中,也可…

    Java 2023年6月15日
    00
  • Mybatis多表关联查询的实现(DEMO)

    Mybatis多表关联查询的实现(DEMO) 1. 前言 在现实开发中,通常需要查询两个或更多个表的联合结果。这可以通过SQL join操作实现。Mybatis框架也提供了多表关联查询的实现,本文将以实例为根据,详细讲解Mybatis多表关联查询的实现过程。 2. 环境准备 为了实现多表查询,需要先建好需要查询的两个或多个表。此外,还需要安装好Mybatis…

    Java 2023年5月20日
    00
  • 数据库中经常用到的操作和管理数据库的语句总结

    下面是数据库中经常用到的操作和管理数据库的语句总结的攻略。 数据库的操作 创建数据库 创建数据库的语句如下: CREATE DATABASE db_name; 其中,db_name 为数据库的名称。在执行此命令时,数据库的名称必须是唯一的。 删除数据库 删除数据库的语句如下: DROP DATABASE db_name; 其中,db_name 为要删除的数据…

    Java 2023年6月15日
    00
  • Java 语言中Object 类和System 类详解

    让我们来详细讲解“Java 语言中 Object 类和 System 类详解”的攻略。本文将分为以下几个部分: Object 类 1.1 概述 1.2 常用方法 System 类 2.1 概述 2.2 常用方法 示例说明 3.1 示例一:Object 类 3.2 示例二:System 类 1. Object 类 1.1 概述 Object 类是 Java 中…

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