2.2 栈与队列

2.2 栈与队列

在我们日常生活中,一些排列和存储物品的方式可以很好地帮助我们理解栈和队列这两种数据结构。

栈(Stack)

栈是一种后进先出(Last In First Out,简称LIFO)的数据结构,就像我们堆盘子一样,最后放的盘子在最上面,需要取时也是先取最上面的盘子。我们可以通过Java中的Stack类来实现栈的功能:

import java.util.Stack;public class StackExample {public static void main(String[] args) {Stack<Integer> stack = new Stack<>();stack.push(1);stack.push(2);stack.push(3);System.out.println(stack.peek());  // 输出:3stack.pop();System.out.println(stack.peek());  // 输出:2}
}

在这个示例中,我们使用了Stack类的push方法来添加元素,peek方法来获取栈顶元素,以及pop方法来删除栈顶元素。可以看到,最后入栈的元素总是最先出栈。

自己实现一个简单的栈:

public class SimpleStack<T> {private ArrayList<T> stack = new ArrayList<>();public int getSize() {return stack.size();}public boolean isEmpty() {return stack.isEmpty();}public void push(T item) {stack.add(item);}public T pop() {if (!isEmpty()) {return stack.remove(stack.size() - 1);} else {return null; // Or throw exception}}public T peek() {if (!isEmpty()) {return stack.get(stack.size() - 1);} else {return null; // Or throw exception}}
}

上面的实现中,我们使用ArrayList作为底层的数据结构。在push操作中,我们直接在ArrayList的末尾添加元素,pop操作则是删除并返回ArrayList的最后一个元素。

队列(Queue)

与栈相反,队列是一种先进先出(First In First Out,简称FIFO)的数据结构,就像我们在银行排队一样,最早来的人会最先得到服务。我们可以通过Java的Queue接口和LinkedList类来实现队列的功能:

import java.util.LinkedList;
import java.util.Queue;public class QueueExample {public static void main(String[] args) {Queue<Integer> queue = new LinkedList<>();queue.offer(1);queue.offer(2);queue.offer(3);System.out.println(queue.peek());  // 输出:1queue.poll();System.out.println(queue.peek());  // 输出:2}
}

在这个示例中,我们使用了Queue接口的offer方法来添加元素,peek方法来获取队列头部的元素,以及poll方法来删除队列头部的元素。可以看到,最早入队的元素总是最先出队。

自己实现一个简单的队列:

import java.util.LinkedList;public class SimpleQueue<T> {private LinkedList<T> queue = new LinkedList<>();public int getSize() {return queue.size();}public boolean isEmpty() {return queue.isEmpty();}public void offer(T item) {queue.addLast(item);}public T poll() {if (!isEmpty()) {return queue.removeFirst();} else {return null; // Or throw exception}}public T peek() {if (!isEmpty()) {return queue.getFirst();} else {return null; // Or throw exception}}
}

在这个队列的实现中,我们使用LinkedList作为底层的数据结构。offer操作在LinkedList的末尾添加元素,poll操作则是删除并返回LinkedList的第一个元素。

理解了栈和队列的基本概念和操作后,你就可以开始使用它们来解决各种复杂的问题了,比如括号匹配、逆波兰表达式求值等。你会发现,有了这两种神奇的工具,很多看似困难的问题其实可以轻松解决。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/58931.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ip addr show

本文内容来自智谱清言 ip addr show 是 Linux 系统中用于显示网络接口配置的命令。这个命令属于 iproute2 软件包&#xff0c;该软件包在大多数 Linux 发行版中都是预安装的。ip addr show 命令可以用来查看所有网络接口的当前配置&#xff0c;或者指定某个特定接口的配置。 …

【编程语言】理解C/C++当中的指针

指针是C/C语言中一个非常强大且重要的概念&#xff0c;也是编写高效程序的基础之一。对于没有编程背景的初学者来说&#xff0c;理解指针可能有些难度&#xff0c;但通过本篇文章的介绍&#xff0c;相信你会对指针有一个清晰的认识。本文将从指针的基本概念、作用、代码示例、注…

hive切换表底层文件类型以及分隔符

1、改底层文件存储类型&#xff0c;但是一般只会在数据文件与期望类型一致的时候使用&#xff0c;比如load等方式时发现建表时没指定对这样的&#xff0c;因为这个语句不会更改具体的底层文件内容&#xff0c;只改元数据 ALTER TABLE 表名 SET FILEFORMAT 希望类型;2、更改数据…

【ESP32】ESP-IDF开发 | 低功耗管理+RTC唤醒和按键唤醒例程

1. 简介 ESP32支持5种低功耗模式&#xff0c;低功耗管理单元包括调压器、功耗控制器、电源开关单元、电源域隔离单元 (Isolation Cell) 等部分。 1.1 RTC单元 RTC单元是ESP32低功耗管理的核心&#xff0c;可用于管理低功耗模式的进入和退出&#xff0c;控制时钟源、PLL、电源开…

vue链接跳转

在 Vue 3 的组合式 API 中&#xff0c;你可以使用 ref 和 setup 函数来实现外部链接跳转功能。 方法 1&#xff1a;使用 click 和 window.open&#xff08;新标签页跳转&#xff09; 这种方式在点击时会打开一个新标签页并跳转到外部链接。 <menu-item value"item2&…

重学 Android 自定义 View 系列(三):自定义步数进度条

前言 本篇文章主要是实现仿QQ步数View&#xff0c;很老的一个View了&#xff0c;但技术永不落后&#xff0c;开搂&#xff01; 最终效果如下&#xff1a; 1. 结构分析 QQStepView 主要由三个元素组成&#xff1a; 显示一个圆环进度条&#xff0c;通过外环和内环的角度变化来…

非关系型数据库NoSQL的类型与优缺点对比

NoSQL数据库根据数据模型和应用场景主要分为四种类型&#xff1a;键值型、列族型、文档型和图形型。以下是对每种类型的详细描述&#xff0c;包括其应用场景、优缺点的比较&#xff1a; 1. 键值型数据库 (Key-Value Store) 典型代表 RedisMemcachedAmazon DynamoDB 应用场景…

Spring中的过滤器和拦截器

Spring中的过滤器和拦截器 一、引言 在Spring框架中&#xff0c;过滤器&#xff08;Filter&#xff09;和拦截器&#xff08;Interceptor&#xff09;是实现请求处理的两种重要机制。它们都基于AOP&#xff08;面向切面编程&#xff09;思想&#xff0c;用于在请求的生命周期…

查缺补漏----用户上网过程(HTTP,DNS与ARP)

&#xff08;1&#xff09;HTTP 来自湖科大计算机网络微课堂&#xff1a; ① HTTP/1.0采用非持续连接方式。在该方式下&#xff0c;每次浏览器要请求一个文件都要与服务器建立TCP连接当收到响应后就立即关闭连接。 每请求一个文档就要有两倍的RTT的开销。若一个网页上有很多引…

core-js 解决浏览器兼容性问题的工具之一

core-js 是一个非常流行的JavaScript库&#xff0c;它提供了大量的 polyfills&#xff0c;使得开发者可以在旧版浏览器中使用新的JavaScript特性。core-js 实现了ECMAScript标准中的许多新特性&#xff0c;还包括一些Web APIs。这使得开发者可以编写现代JavaScript代码&#xf…

C++之vector类的模拟实现

片头 嗨~小伙伴们&#xff0c;今天我们来一起学习关于C的vector类的模拟实现&#xff0c;准备好了吗&#xff1f;咱们开始咯~ 一、基本框架 namespace bit {template<class T>class vector {public:typedef T* iterator;typedef const T* const_iterator;// 针对const修…

C# 中 LibraryImport 和 DllImport有什么不同

libraryimport 和 dllimport 是两个与动态链接库&#xff08;DLL&#xff09;相关的术语&#xff0c;它们在不同的编程语言和上下文中有不同的含义和用途。 在 C# 中&#xff0c;DllImportAttribute 是一个特性&#xff0c;用于指示一个方法声明是作为对非托管 DLL 中函数的 P…

流体力学ansys Fluent二次开发scheme_eval模块剖析

在ANSYS Fluent的二次开发中&#xff0c;scheme_eval 是 Scheme 编程语言中一个非常重要的模块&#xff0c;它允许用户执行动态的 Scheme 表达式和函数&#xff0c;从而扩展 Fluent 的功能。scheme_eval 模块通常与 Fluent 的计算和自定义脚本操作紧密结合。下面我们会对这个模…

前端入门一之DOM、获取元素、DOM核心、事件高级、操作元素、事件基础、节点操作

前言 JS是前端三件套之一&#xff0c;也是核心&#xff0c;本人将会更新JS基础、JS对象、DOM、BOM、ES6等知识点&#xff0c;这篇是DOM;这篇文章是本人大一学习前端的笔记&#xff1b;欢迎点赞 收藏 关注&#xff0c;本人将会持续更新。 文章目录 DOMDOM简介1.1、什么是DOM1…

ubuntu 22.04 server 安装 和 初始化 LTS

ubuntu 22.04 server 安装 和 初始化 下载地址 https://releases.ubuntu.com/jammy/ 使用的镜像是 ubuntu-22.04.5-live-server-amd64.iso usb 启动盘制作工具 https://rufus.ie/zh/ rufus-4.6p.exe 需要主板 支持 UEFI 启动 Ubuntu22.04.4-server安装 流程 https://b…

【elkb】kibana后台删除索引

打开kibana后台 点击 Management ---> Index Management 找到要删除的所以点击 点击delete index 删除成功

【计网】实现reactor反应堆模型 --- 多线程方案优化 ,OTOL方案

没有一颗星&#xff0c; 会因为追求梦想而受伤&#xff0c; 当你真心渴望某样东西时&#xff0c; 整个宇宙都会来帮忙。 --- 保罗・戈埃罗 《牧羊少年奇幻之旅》--- 实现Reactor反应堆模型 1 重新认识Reactor2 普通线程池3 OTOL方案3.1 多进程版3.2 多线程版 1 重新认识Re…

langgraph_plan_and_execute

整体入门demo 教程概览 欢迎来到LangGraph教程&#xff01; 这些笔记本通过构建各种语言代理和应用程序&#xff0c;介绍了如何使用LangGraph。 快速入门&#xff08;Quick Start&#xff09; 快速入门部分通过一个全面的入门教程&#xff0c;帮助您从零开始构建一个代理&a…

【网络安全 | 甲方安全建设】分布式系统、Redis分布式锁及Redisson看门狗机制

未经许可,不得转载。 文章目录 分布式系统分布式系统的核心特性分布式系统的典型架构分布式锁概念Redis 分布式锁原理互斥性锁释放锁的唯一性具体实现Redisson分布式锁分布式系统 分布式系统是一种由多台计算机(节点)组成的系统,这些节点通过网络相互连接并协同工作,共同…

UnixBench和Geekbench进行服务器跑分

1 概述 服务器的基准测试&#xff0c;常见的测试工具有UnixBench、Geekbench、sysbench等。本文主要介绍UnixBench和Geekbench。 1.1 UnixBench UnixBench是一款开源的测试UNIX系统基本性能的工具&#xff08;https://github.com/kdlucas/byte-unixbench&#xff09;&#x…