Java的栈与队列以及代码实现

Java中的栈与队列

栈的基本概念(Stack)

栈是一种基本的线性数据结构,遵循后进先出(LIFO)的原则。这意味着最后加入的元素将是第一个被移除的。栈的应用非常广泛,包括内存分配、表达式求值、临时数据存储以及方法调用等。以子弹夹为例,最先装填的子弹位于底部(栈底),而最后装填的子弹位于顶部(栈顶)。只有当顶部的子弹被射出后,底部的子弹才有机会发射。

栈的可视化

栈的实现方式

栈可以通过数组来实现,我们可以将其想象为一个连续的数组,元素的添加和移除都发生在数组的一端。以下是模拟栈操作的基本方法:push(向栈中添加元素),pop(从栈中移除顶部元素),peek(查看栈顶元素),size(获取栈中元素的数量),empty(检查栈是否为空),full(检查栈是否已满)。

栈的数组实现

栈的代码实现

import java.util.Arrays;

public class MyStack {
    private int[] elem;
    private int top; // 栈顶索引
    private static final int DEFAULT_CAPACITY = 10; // 初始容量

    public MyStack() {
        elem = new int[DEFAULT_CAPACITY];
        top = -1; // 索引从0开始
    }

    public void push(int item) {
        if (full()) {
            // 栈满时扩容
            elem = Arrays.copyOf(elem, 2 * elem.length);
        }
        elem[++top] = item;
    }

    public int pop() {
        if (empty()) {
            throw new RuntimeException("栈为空");
        }
        return elem[top--];
    }

    public int peek() {
        if (empty()) {
            throw new RuntimeException("栈为空");
        }
        return elem[top];
    }

    public int size() {
        return top + 1;
    }

    public boolean empty() {
        return top == -1;
    }

    public boolean full() {
        return top == elem.length - 1;
    }
}

队列(Queue)

队列是另一种线性数据结构,遵循先进先出(FIFO)的原则。元素的添加操作在队列的尾部进行,而元素的移除操作在队列的头部进行。

队列的可视化

队列的模拟实现(双链表)

```java
public class MyQueue {
static class QueueNode {
public int elem;
public QueueNode next;
public QueueNode prev;
public QueueNode(int elem) {
this.elem = elem;
}
}

public QueueNode head;
public QueueNode last;
public int size = 0;

public void offer(int val) {
    QueueNode queue = new QueueNode(val);
    if (head == null) {
        head = queue;
        last = queue;
        ++size;
        return;
    }
    last.next = queue;
    queue.prev = head;
    last = queue;
    ++size;
}

public int poll() {
    if (head == null) {
        throw new RuntimeException("队列为空");
    }
    QueueNode cur = head;
    if (head.next == null) {
        head = null;
        last = null;
    } else {
        head = head.next;
        head.prev = null;
    }
    --size;
    return cur.elem;
}

public int peek() {
    if (head != null) {
        return head.elem;
    }
    return 0;
}

public int size() {
    return size;

文章整理自互联网,只做测试使用。发布者:Lomu,转转请注明出处:https://www.it1024doc.com/4490.html

(0)
LomuLomu
上一篇 2024 年 12 月 27 日 下午3:08
下一篇 2024 年 12 月 27 日 下午4:09

相关推荐

  • Java List 集合详解:基础用法、常见实现类与高频面试题解析

    正文 在 Java 集合框架中,List 是一个非常重要的接口,广泛用于存储有序的元素集合。本文将带你深入了解 List 接口的基本用法、常见实现类及其扩展,同时通过实际代码示例帮助你快速掌握这些知识。 👉点击获取2024Java学习资料 1. 什么是 List? List 是 Java 集合框架中的一个接口,它继承了 Collection 接口,用于存储一…

    未分类 2025 年 1 月 1 日
    47600
  • 新版 Cursor 把其他 AI 编程工具按在地上摩擦了!

    大家好,我是汤师爷~ AI编程助手Cursor背后的Anysphere公司刚刚完成了1亿美元的B轮融资,估值直接飙升至26亿美元。 四个月前,这家公司刚拿下6000万美元,估值还只有4亿美元。如今,增长6.5倍,这速度,简直让人怀疑开挂了。 Anysphere不仅融资拿到手软,收入增长更是逆天。 公司从4月的年收入400万美元,短短六个月后,10月的月收入竟…

    2025 年 1 月 15 日
    65100
  • 深入解析 Spring AI 系列:以OpenAI与Moonshot案例为例寻找共同点

    今天,我们将重点探讨对接的业务逻辑。为了帮助大家更直观地掌握其中的规律性,我将通过对比OpenAI与《月之暗面》中的Moonshot两个案例来阐述这一点。通过这样的对比,大家可以更清晰地看到,这些对接业务的整体框架其实非常相似。换句话说,我们要做的工作只是其中的一小部分,但它同样是关键的一环。 好了,接下来我们就开始深入了解这个话题。 模型对接 我们首先需要…

    2025 年 1 月 11 日
    77200
  • PostgreSQL 的系统要求

    title: PostgreSQL 的系统要求date: 2024/12/25updated: 2024/12/25author: cmdragon excerpt:PostgreSQL 是一款功能强大的开源关系型数据库,广泛应用于企业应用、数据分析和互联网服务中。为了在不同的硬件和软件环境中顺利运行,PostgreSQL 对系统的要求也各有不同。了解 Po…

    2024 年 12 月 30 日
    49800
  • 如何用串口调试助手ComTone调试串口?附安装包

    前言 大家好,我是小徐啊。我们在调试应用的时候,有时候是需要进行串口通信的。但并不是每次都有实时的串口数据供我们去测试,这个时候就需要一个模拟生成串口数据的工具来帮助我们了。今天,小徐就来介绍下串口调试助手ComTone的用法。文末附获取方式。 如何使用串口调试助手ComTone 首先,需要选择对应的端口号,这个必须是能联通的串口号,然后点击打开串口按钮,如…

    2025 年 1 月 10 日
    58600

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信