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

yizhihongxing

下面是完整的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日

相关文章

  • Java在长字符串中查找短字符串的实现多种方法

    下面我会详细讲解Java在长字符串中查找短字符串的实现多种方法。 目录 需求背景 传统字符串查找方式 String类的indexOf方法 Pattern类的matcher方法 优化的字符串查找方式 Boyer-Moore算法 KMP算法 总结 需求背景 在Java程序中处理长字符串时,经常需要进行短字符串的查找。例如,在字符串中查找单词、检查字符串中是否包含…

    Java 2023年5月26日
    00
  • java 中复合机制的实例详解

    Java中复合机制的实例详解 Java中的复合机制是面向对象编程的核心概念之一。本文将详细讲解Java中的复合机制,介绍其实现原理以及两个示例说明。 什么是Java中的复合机制? Java中的复合机制是指对象之间的组合关系。在Java中,类可以通过实例化其他类的对象来实现对其他类对象的管理。这种关系称为“复合关系”,它是Java面向对象编程中的一种重要的机制…

    Java 2023年6月15日
    00
  • Spring Boot整合EhCache的步骤详解

    下面我将详细讲解“Spring Boot整合EhCache的步骤详解”的完整攻略。 1. 引入EhCache依赖 在Spring Boot应用的pom.xml文件中添加EhCache的依赖,示例如下: <dependency> <groupId>org.ehcache</groupId> <artifactId&gt…

    Java 2023年5月20日
    00
  • Java实现经典游戏泡泡堂的示例代码

    Java实现经典游戏泡泡堂的示例代码攻略 概述 本文将介绍如何使用Java实现经典游戏泡泡堂的示例代码。泡泡堂是一款非常受欢迎的街机游戏,同时它也是一款非常好的练习Java编程技巧的项目,包括了面向对象编程、多线程、网络编程等各种核心技术点。 准备工作 在开始编写泡泡堂代码之前,我们需要先准备一些工作: 安装Java JDK,并设置好环境变量; 选择一个合适…

    Java 2023年5月19日
    00
  • java实现KFC点餐系统

    Java实现KFC点餐系统 系统功能 KFC点餐系统是一款简单的餐饮点餐系统,具备以下功能: 浏览菜单:按照品类和价格等条件进行筛选、搜索。 点菜:选择想要的菜品和数量,加入购物车。 查看购物车:查看购物车中的点菜情况,可以修改数量和删除。 下单支付:填写订单信息,选择支付方式并完成支付。 系统架构 KFC点餐系统采用B/S架构模式,使用Java Web技术…

    Java 2023年5月23日
    00
  • Java8使用LocalDate计算日期实例代码解析

    Java8使用LocalDate计算日期实例代码解析 简介 Java8中新增了一个日期时间API–java.time包,其中一个类LocalDate可以用来处理日期。在这个攻略中,我们将通过两个示例代码详细介绍如何使用LocalDate计算日期。 示例1:计算两个日期相差的天数 import java.time.LocalDate; import java…

    Java 2023年5月20日
    00
  • SpringBoot项目实现关闭数据库配置和springSecurity

    SpringBoot是一个非常流行的Java Web开发框架,它具有易用、快速开发、健壮性好等优点。在一些场景中我们需要关闭数据库配置或者关闭Spring Security,下面就具体介绍一下如何实现: 关闭数据库配置 在一些场景中,我们并不需要使用数据库,比如开发一个展示页面的网站,这时我们就可以关闭数据库配置。 步骤一:排除数据库依赖 在pom.xml文…

    Java 2023年5月20日
    00
  • JVM之内存分配和回收机制

    下面是“JVM之内存分配和回收机制”的详细攻略。 什么是JVM Java虚拟机(Java Virtual Machine,简称JVM)是Java程序的运行环境,它可以在不同的操作系统中运行Java程序。JVM是Java的核心,它负责将Java字节码(bytecode)解释执行成机器码。并且,JVM还具有垃圾回收、内存分配等功能,这也是Java程序员生产力高的…

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