用数组实现队列/栈

简介: 使用数组实现栈时,可将动态数组尾部作为栈顶,利用其O(1)增删特性。也可用环形数组实现头部为栈顶。结合环形数组还可高效实现队列,支持O(1)的入队和出队操作,结构简洁、性能优越。(239字)

用数组实现栈
先用数组实现栈,这个不难,你把动态数组的尾部作为栈顶,然后调用动态数组的 API 就行了。因为数组尾部增删元素的时间复杂度都是 O(1),符合栈的要求。
注意我这里用的是 Java 标准库的 ArrayList,如果你想用之前我们实现的 MyArrayList,也是一样的:
// 用数组作为底层数据结构实现栈
public class MyArrayStack {
private ArrayList list = new ArrayList<>();

// 向栈顶加入元素,时间复杂度 O(1)
public void push(E e) {
    list.add(e);
}

// 从栈顶弹出元素,时间复杂度 O(1)
public E pop() {
    return list.remove(list.size() - 1);
}

// 查看栈顶元素,时间复杂度 O(1)
public E peek() {
    return list.get(list.size() - 1);
}

// 返回栈中的元素个数,时间复杂度 O(1)
public int size() {
    return list.size();
}

}
能否让数组的头部作为栈顶?
按照我们之前实现 MyArrayList 的逻辑,是不行的。因为数组头部增删元素的时间复杂度都是 O(n),不符合要求。但是我们可以改用前文 环形数组技巧 中实现的 CycleArray 类,这个数据结构在头部增删元素的时间复杂度是 O(1),符合栈的要求。
你直接调用 CycleArray 的 addFirst 和 removeFirst 方法实现栈的 API 就行,我这里就不写了。
用数组实现队列
有了前文 环形数组 中实现的 CycleArray 类,用数组作为底层数据结构实现队列就不难了吧。直接复用我们实现的 CycleArray,就可以实现标准队列了。当然,一些编程语言也有内置的环形数组实现,你也可以自行搜索使用:
public class MyArrayQueue {
private CycleArray arr;

public MyArrayQueue() {
    arr = new CycleArray<>();
}

public void push(E t) {
    arr.addLast(t);
}

public E pop() {
    return arr.removeFirst();
}

public E peek() {
    return arr.getFirst();
}

public int size() {
    return arr.size();
}

}

相关文章
|
17小时前
|
存储 算法 索引
二叉树基础及常见类型
二叉树是数据结构的核心,不仅是红黑树、堆、图等复杂结构的基础,更蕴含递归思维,贯穿回溯、动态规划等算法。掌握二叉树,等于掌握算法之魂。本站将带你深入理解各类二叉树及其应用。
|
18小时前
|
存储 Java API
数组(顺序存储)基本原理
本章讲解数组的底层原理,区分静态数组与动态数组。静态数组是连续内存空间,支持O(1)随机访问,但增删效率低;动态数组基于静态数组封装,提供自动扩容与常用API,使用更便捷。通过手写动态数组,理解其增删查改实现及时间复杂度,为后续数据结构打基础。
|
18小时前
|
Java 索引 容器
环形数组技巧
环形数组通过模运算在逻辑上形成闭环,利用start和end双指针实现头尾O(1)增删。虽物理结构仍为线性数组,但通过取余操作使指针循环跳转,结合左闭右开区间设计,高效支持动态扩容缩容,适用于队列、双端队列等场景。
|
17小时前
|
存储 API 索引
队列/栈基本原理
本文介绍栈和队列的基本原理。二者均为操作受限的数据结构:队列只允许在队尾入、队头出,符合“先进先出”(FIFO);栈则仅在栈顶进行插入和删除,遵循“先进后出”(FILO)。底层多用数组或链表实现,核心API包括push、pop、peek和size,时间复杂度均为O(1)。
|
17小时前
|
存储 人工智能 前端开发
基于若依框架+AI的养老项目
中州养老系统是专为养老院打造的一体化管理软件,覆盖来访、入住、服务、财务等全流程。分管理后台与家属端,实现机构高效运营与家属便捷互动。技术上采用Vue3+Element Plus前端,若依+SpringBoot后端,MySQL+Redis存储,集成阿里云IOT、OSS及AI工具,助力智慧养老。
|
开发者
2024 乘风者计划全新启航!快来加入吧!
 2021年,阿里云开发者社区焕新升级,重磅推出“乘风者计划”!诚邀四海技术博主入驻社区,泼墨云间,书写天地。入驻社区,即可享丰厚权益! 新的一年,乘风者计划重磅升级!
251676 81
|
1天前
|
数据采集 人工智能 安全
|
10天前
|
云安全 监控 安全
|
2天前
|
自然语言处理 API
万相 Wan2.6 全新升级发布!人人都能当导演的时代来了
通义万相2.6全新升级,支持文生图、图生视频、文生视频,打造电影级创作体验。智能分镜、角色扮演、音画同步,让创意一键成片,大众也能轻松制作高质量短视频。
930 150