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

相关推荐

  • 网站动静加速架构 dcdn+ga 全站加速和全球加速api

    # 背景 我们的公司提供的所有服务均位于香港,这意味着我们的客户,主要分布在中国内地,访问这些服务时可能会遇到速度较慢的问题。由于我们专注于NFT领域,因此选择在香港提供服务。 # 一、加速策略 ## 1.1 静态资源加速 静态资源加速是指对如HTML、JavaScript、CSS和图像文件等静态文件的快速分发。利用云服务提供商的CDN服务,我们可以有效地提…

    未分类 2024 年 12 月 24 日
    41500
  • Python深度学习(第2版)PDF免费下载

    适读人群 :想要学习深度学习的学生、职业开发者。 流行深度学习框架Keras之父执笔,涵盖Transformer架构等进展,文字生,简单方式解释复杂概念,不用一个数学公式,利用直觉自然入门深度学习。 电子版仅供预览,下载后24小时内务必删除,支持正版,喜欢的请购买正版书籍 点击原文去下载 书籍信息 作者: [美] 弗朗索瓦·肖莱出版社: 人民邮电出版社出品方…

    2024 年 12 月 30 日
    40900
  • 数据结构-8.Java. 七大排序算法(下篇)

    ![排序算法图解](https://pic.it1024doc.com/csdn/202412/e7a5ab870db2dde966e37f2c83a37ae4.jpeg) > 本文将深入探讨排序算法的核心概念,由于篇幅限制,我们将分两部分进行讨论。今日的主题是归并排序,以及快速排序的非递归实现技巧。 > 专栏:Java-**数据结构** > 如有疑问,请在…

    2024 年 12 月 27 日
    28200
  • 『玩转Streamlit』–上传下载文件

    在Web应用中,文件的上传下载 是交互中不可缺少的功能。 因为在业务功能中,一般不会只有文字的交互,资料或图片的获取和分发是很常见的需求。 比如,文件上传 可让用户向服务器提交数据,如上传图片分享生活、提交文档用于工作协作等,丰富应用功能。 而文件下载 则使用户能获取服务器端的资源,像下载软件、报告等,提升用户对应用内容的获取能力,增强用户体验和应用实用性。…

    2024 年 12 月 30 日
    38000
  • Effective Java中文版(原书第3版)PDF、EPUB免费下载

    Effective Java中文版(原书第3版)PDF、EPUB免费下载 适读人群 :本书并非面向Java初学者,而是要求读者有一定的Java编程经验。对于在Java开发方面已经积累一定经验的读者而言,本书可以帮助其更深入地理解Java编程语言,以成为更卓越、高效的Java开发人员。 Jolt获奖作品全新升级,与《Java编程思想》和《Java核心技术》齐名…

    2025 年 1 月 6 日
    48700

发表回复

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

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

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

关注微信