Java中使用数组实现栈数据结构实例

yizhihongxing

下面是Java中使用数组实现栈数据结构实例的完整攻略:

步骤一:定义栈类

我们可以通过定义一个名为 Stack 的类来创建栈类,其中包含以下属性:

  • 一个整型的变量 top,用于存储当前栈顶的位置
  • 一个整型的数组 items,用于存储栈中的元素
  • 一个整型的变量 capacity,用于表示栈的容量

代码如下所示:

public class Stack {
    private int top = -1;
    private int[] items;
    private int capacity;
}

步骤二:实现 push 操作

push 操作是向栈中添加一个元素。如果栈已满,则新元素无法添加。push 操作会将元素添加到栈顶的下一个位置。

public void push(int value) {
    if (top == capacity - 1) {
        System.out.println("Stack is full!");
        return;
    }
    top++;
    items[top] = value;
}

上面的代码中,首先检查栈是否已满,如果满了就输出一条信息并结束。如果栈未满,我们将 top 加 1,并将元素添加到 items[top] 中。

步骤三:实现 pop 操作

pop 操作是从栈中移除一个元素,并返回该元素的值。如果栈为空,则返回一个特定的值,如 -1。

public int pop() {
    if (top == -1) {
        System.out.println("Stack is empty!");
        return -1;
    }
    int value = items[top];
    top--;
    return value;
}

上述代码中,首先检查栈是否为空。如果是空的,就输出一条信息并返回 -1。如果栈非空,我们首先将 items[top] 的值保存到 value 中,并将 top 减 1。最后,我们返回保存的值。

步骤四:实现 peek 操作

peek 操作是从栈中返回栈顶元素的值,但并不从栈中移除该元素。如果栈为空,则返回 -1。

public int peek() {
    if (top == -1) {
        System.out.println("Stack is empty!");
        return -1;
    }
    return items[top];
}

上述代码中,检查栈是否为空。如果是空的,就输出一条信息并返回 -1。如果栈非空,我们直接返回 items[top]。

示例说明:

示例一:

下面是一个使用栈的示例。假设有一个字符串表达式 "2+3*5-6/2",我们需要计算它的结果。我们可以使用栈来实现这个功能。

public static int evaluate(String expression) {
    Stack stack = new Stack(expression.length());

    for (int i = 0; i < expression.length(); i++) {
        char c = expression.charAt(i);

        if (Character.isDigit(c)) {
            stack.push(Integer.parseInt(String.valueOf(c)));
        } else {
            int num1 = stack.pop();
            int num2 = stack.pop();

            switch(c) {
                case '+':
                    stack.push(num2 + num1);
                    break;
                case '-':
                    stack.push(num2 - num1);
                    break;
                case '*':
                    stack.push(num2 * num1);
                    break;
                case '/':
                    stack.push(num2 / num1);
                    break;
            }
        }
    }
    return stack.pop();
}

在上述示例中,我们遍历表达式中的每个字符。如果是数字,则将其推入栈中。如果是运算符,则从栈中弹出两个数字,执行相应的运算,然后将结果推入栈中。最后,返回栈中的唯一元素,即表达式的结果。

示例二:

我们来看一个更简单的示例:使用栈来反转一个数组。

public static void reverse(int[] arr) {
    Stack stack = new Stack(arr.length);

    for (int i = 0; i < arr.length; i++) {
        stack.push(arr[i]);
    }

    for (int i = 0; i < arr.length; i++) {
        arr[i] = stack.pop();
    }
}

在上面的示例中,我们创建了一个名为 stack 的栈对象,并将 arr 中的所有元素推入栈中。然后,我们从栈中弹出元素,并将它们存储回 arr 数组中,就会得到反转后的数组。

这就是使用数组实现栈数据结构的攻略。如果您有任何疑问,请随时问我。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java中使用数组实现栈数据结构实例 - Python技术站

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

相关文章

  • JavaScript数据结构Number

    JavaScript数据结构Number 简介 JavaScript中的Number是一种表示数字的数据类型,包括整数和浮点数。Number类型的值是不可变的。 数字类型(Number)的创建 数字类型可以通过直接赋值的方式创建,如: let num = 10; // 整数 let floatNum = 3.14; // 浮点数 另外,JavaScript还…

    数据结构 2023年5月17日
    00
  • 字典树的基本知识及使用C语言的相关实现

    字典树的基本知识 字典树,英文名为Trie树,又称单词查找树或键树,是一种树形数据结构,用于表示关联数组或映射。它的优点是,可以大大减少无谓的字符串比较,查询效率比哈希表高。 字典树的核心概念是节点,每个节点包含一个字符和指向子节点的指针。根节点为空字符,每个字符串以一个独立的路径插入节点。如果一个字符串是另一个字符串的前缀,那么这个字符串的节点是另一个字符…

    数据结构 2023年5月17日
    00
  • 棋盘覆盖问题——分治法

    问题描述 有一个 x (k>0)的棋盘,恰好有一个方格与其他方格不同,称之为特殊方格。现在要用如下图所示的L形骨牌覆盖除了特殊方格以外的其他全部方格,骨牌可以任意旋转,并且任何两个骨牌不能重复。请给出一种覆盖方式。   样例: 输入: 输出:   思路——分治法: 将一个规模为n的问题分解为k个规模较小的子问题,这些子问题相互独立且与原问题相同。 递归…

    算法与数据结构 2023年4月27日
    00
  • MySQL数据库体系架构详情

    MySQL数据库体系架构是MySQL数据库自身的发展和演变过程中逐渐形成的一个庞大的体系。这个体系由多个组件构成,包括连接器、查询缓存、解析器、优化器、执行器、存储引擎等多个部分,其中存储引擎是其中最具有代表性的组件之一。在这篇攻略中,我们将详细讲解MySQL数据库体系架构的各个部分,介绍它们各自的功能和作用。 连接器 MySQL的连接器负责与客户端建立连接…

    数据结构 2023年5月17日
    00
  • JavaScript数据结构之链表的实现

    JavaScript数据结构之链表的实现 什么是链表 链表是一种线性数据结构,其中的元素在内存中不连续地存储,每个元素通常由一个存储元素本身的节点和一个指向下一个元素的引用组成。相比较于数组,链表具有如下优缺点: 优点:动态地添加或删除元素时,无需移动其它元素。(数组则需要移动其它元素) 缺点:不能随机地访问某个元素,必须从头开始顺序遍历。(而数组可以通过索…

    数据结构 2023年5月17日
    00
  • C#数据结构之队列(Quene)实例详解

    C#数据结构之队列(Quene)实例详解 什么是队列? 队列是一种线性数据结构,只允许在队列的两端进行操作。队列是一种FIFO(First in First Out)的数据结构,即先进先出,类似于排队买票的场景。 C#中的队列(Quene) C#中队列(Quene)是System.Collections命名空间中的一个类,可以通过引入System.Colle…

    数据结构 2023年5月17日
    00
  • C语言详解数据结构与算法中枚举和模拟及排序

    我们一步步来详细讲解“C语言详解数据结构与算法中枚举和模拟及排序”的完整攻略。 纲要 本文的主要内容包括: 枚举的概念及应用 模拟的概念及应用 排序的概念及分类 枚举的概念及应用 枚举是一种数据类型,可以将一组具有相关性质的常量定义为枚举常量。枚举常量默认是按照自然数递增的顺序进行编号的。枚举常量可以用于表示状态、类型、结果等概念。以下是一个枚举类型的定义:…

    数据结构 2023年5月17日
    00
  • C语言链表详解及代码分析

    C语言链表详解及代码分析 简介 链表是一种常见的数据结构,它主要用于存储线性数据结构,可以动态地进行添加和删除操作。在C语言中,链表可以通过链式存储结构来实现。本篇攻略将详细讲解C语言链表的实现,包括定义链表、节点、添加节点、删除节点等操作。 链表的定义 链表由一个个节点组成,每个节点包含两个信息:数据和指向下一个节点的指针。在C语言中,可以通过结构体实现每…

    数据结构 2023年5月17日
    00
合作推广
合作推广
分享本页
返回顶部