数据结构--栈和队列

devtools/2024/10/20 10:30:56/

目录

  • 1.栈(Stack)
    • 1.1 介绍
    • 1.2 栈的实现
      • 1.2.1 模拟实现栈
      • 1.2.2 Stack类实现
    • 1.3 栈的常用方法
    • 1.4 栈,虚拟机栈和栈帧的区别
  • 2.队列(Queue)
    • 2.1 介绍
    • 2.2 队列的实现
      • 2.2.1 模拟实现队列
      • 2.2.2 Queue接口实现
  • 2.3 队列的常用方法

1.栈(Stack)

1.1 介绍

栈是一种特殊的线性表,只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出的原则

1.2 栈的实现

栈可以通过自己写代码来模拟实现,或直接使用java.util包中的Stack类实现

1.2.1 模拟实现栈

  • 压栈(入栈):栈的插入操作,插入的数据在栈顶
  • 出栈:栈的删除操作,出数据在栈顶
java">import java.util.Arrays;public class MyStack {public int[] elem;public int usedSize;public static final int DEFAULT_CAPACITY = 10;public MyStack() {elem = new int[DEFAULT_CAPACITY];}public void push(int val) { //入栈if (isFull()) {this.elem = Arrays.copyOf(elem, elem.length * 2);}elem[usedSize++] = val;}public int pop() { //出栈if (isEmpty()) {throw new StackEmptyException("当前栈为空");}usedSize--;return elem[usedSize];}public int peak() {if (isEmpty()) {throw new StackEmptyException("当前栈为空");}return elem[usedSize - 1];}public boolean isFull() {return elem.length == usedSize;}public boolean isEmpty() {return usedSize == 0;}
}

1.2.2 Stack类实现

Stack类实现了后进先出的栈结构,使用Stack类可以直接创建一个栈

java">import java.util.Stack;
public class Main {public static void main(String[] args) {//创建一个栈,栈中元素类型为Integer(int的包装类)Stack<Integer> stack = new Stack();}
}

1.3 栈的常用方法

方法功能
Stack( )构造一个空的栈
E push(E e)将e入栈,并返回e
E pop( )将栈定元素出栈并返回
E peek( )获取栈定元素
int size( )获取栈中有效元素个数
boolean empty( )检测栈是否为空

1.4 栈,虚拟机栈和栈帧的区别

  • 栈:一种数据结构
  • 虚拟机栈:JVM中的一块内存
  • 栈帧:方法调用过程中,在虚拟机栈上开辟的一块内存

2.队列(Queue)

2.1 介绍

队列也是一种特殊的线性表,不同于栈,队列只允许在一端进行插入数据操作,在另一端进行删除数据操作。进行插入操作的一端称为队尾,进行删除操作的一端称为队头。队列中的数据元素遵守先进先出的原则

2.2 队列的实现

队列也可以通过自己写代码来模拟实现,或使用Queue接口来实现

2.2.1 模拟实现队列

java">public class MyQueue {static class ListNode {int val;ListNode prev;ListNode next;public ListNode(int val) {this.val = val;}}ListNode head;ListNode last;public void offer(int val) { //入队ListNode node = new ListNode(val);if (head == null) {head = node;last = node;} else {last.next = node;node.prev = last;last = node;}}public int poll() { //出队if (head == null) {return -1;}int val = head.val;if (head.next == null) {head = null;last = null;return val;}head = head.next;head.prev = null;return val;}public int peek() {if (head == null) {return -1;}return head.val;}public boolean isEmpty() {return head == null;}
}

2.2.2 Queue接口实现

LinkedList(双链表)实现了Queue接口(底层通过链表实现),可以使用LinkedList类来创建队列

java">import java.util.LinkedList;
import java.util.Queue;
public class Main {public static void main(String[] args) {Queue<Integer> queue = new LinkedList<>();}
}

2.3 队列的常用方法

方法功能
boolean offer(E e)入队列
E poll( )出队列
E peek( )获取队头元素
int size( )获取队列中有效元素的个数
boolean isEmpty( )检测队列是否为空

http://www.ppmy.cn/devtools/127263.html

相关文章

MAC地址漂移实验

MAC地址漂移实验的概述&#xff1a; MAC地址漂移实验的概述主要围绕网络设备中的MAC地址动态变化及其检测与防护措施。以下是对MAC地址漂移实验的具体介绍&#xff1a; MAC地址漂移的定义&#xff1a;MAC地址漂移是指在同一个VLAN内&#xff0c;一个MAC地址被交换机的两个不同…

【二刷hot-100】day 3

目录 1.最小覆盖子串 2.二叉树展开为链表 3.面试题 17.14. 最小K个数 1.最小覆盖子串 class Solution {public String minWindow(String s, String t) {char [] s1s.toCharArray();int ms1.length;int retleft-1;int retrightm;int [] cntsnew int[128];int [] cnttnew int…

web前端网页用户注册页面

源码&#xff1a; <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>用户注册</title> </head> <body><form action"#" metho…

JavaScript 入门

1. HTML、CSS、JavaScript 之间的关系 HTML&#xff1a;网页的结构&#xff08;骨&#xff09; CSS&#xff1a;网页的表现&#xff08;皮&#xff09; JavaScript&#xff1a;网页的行为&#xff08;魂&#xff09; 2. 引入方式 3种引入方式&#xff0c;语法如下&#xff…

基于深度学习的地球观测中的目标检测

基于深度学习的地球观测中的目标检测是将深度学习技术应用于遥感数据中以自动识别和定位目标物体的过程。这一技术迅速成为遥感领域的研究热点&#xff0c;主要原因在于地球观测&#xff08;Earth Observation, EO&#xff09;平台和遥感技术的进步带来了海量的高分辨率数据&am…

TF-A(Trusted Firmware-A)及其启动流程详解:以stm32MP1平台为例

0 参考资料 stm32官网 wiki https://www.trustedfirmware.org/ https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git Trusted Firmware-A documentation ARM Power State Coordination Interface SMC Calling Convention (SMCCC) Arm System Control and Management…

游戏盾真的能无视攻击吗?

在当今社会&#xff0c;网络游戏已成为人们娱乐休闲的重要组成部分。随着游戏行业的快速扩展&#xff0c;网络安全挑战也随之加剧。DDoS攻击、CC攻击等恶意手段频繁出现&#xff0c;给游戏运营商及玩家带来了重重困扰。幸运的是&#xff0c;游戏盾这一专为游戏领域设计的网络安…

Axure使用echarts详细教程

本次使用的axure版本为rp9,下面是效果图。 接下来是详细步骤 【步骤1】在axure上拖一个矩形进来&#xff0c;命名为myChart(这个根据实际情况来,和后面的代码对应就好) 【步骤2】 点击交互->选择加载时->选择打开链接->链接外部地址 点击fx这个符号 【步骤3】在弹…