[数据结构】栈和队列

news2025/1/11 6:55:07

目录

1.栈

1.1概念

1.2 栈的使用

1.3.栈的模拟实现

2.队列

2.1概念

2.2队列的使用

2.3队列的模拟实现

2.4 循环队列

2.5双端队列


1.栈

1.1概念

  栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。
压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。
出栈:栈的删除操作叫做出栈。出数据在栈顶
有点类似于步枪压子弹一样,先压进去的最后在发射,最后压进去的先发射。先进后出。

1.2 栈的使用

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

1.3.栈的模拟实现

从上图中可以看到,Stack继承了Vector,Vector和ArrayList类似,都是动态的顺序表,不同的是Vector是线程安全的。

我们使用数组来模拟实现一个栈
 

public class MyStack<E> {
    int[] array;
    int size;
    public  MyStack(){
        array=new int[3];
    }
    //压栈
    public int push(int val){
        array[size] = val;
        size++;
        return val;
    }
    //弹出栈顶元素
    public int pop(){
       int temp= peek();
       size--;
       return temp;

    }
    //查看栈顶元素
    public int peek(){
        if(empty()){
            return -1;
        }
        return array[size-1];

    }
    public boolean  empty(){
        return size==0;
    }
    //遍历
    public void display(){
        for (int i = 0; i < size; i++) {
            System.out.print(array[i]+ " ");
        }
    }
    //获取栈中元素个数
    public int size(){
        return size;
    }

}

2.队列

2.1概念

队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾(Tail/Rear) 出队列:进行删除操作的一端称为队头 (Head/Front)。

2.2队列的使用

在Java中,Queue是个接口,底层是通过链表实现的。

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

注意:Queue是个接口,在实例化时必须实例化LinkedList的对象,因为LinkedList实现了Queue接口。


2.3队列的模拟实现

  我们使用单向链表来模拟实现一个队列

  首先我们思考一个问题,插入的操作很容易,但是当我们想弹出队尾元素的时候,因为是基于链表的,所以我们得知道它的前一个节点,这样才好把它给获取并删掉,如果我们采取尾插法,自然是做不到的,所以我们采取头插法。

public class MyQueue {
    class Node{
        private int val;
        private Node next;
        public Node(int val){
            this.val=val;
        }
    }
    private Node head;
    private Node last;
    private int size;
    public void offer(int data){
        Node node = new Node(data);
        if(head==null){
            head = node;
            last = node;
            size++;
        }else {
            last.next=node;
            last=node;
        }
    }
    public  int poll(){
        if(!isEmpty()){
            int tmp=head.val;
            head=head.next;
            return tmp;
        }
        return -1;
    }
    public boolean isEmpty(){
        return last==null;
    }
    public int peek(){
        if(!isEmpty()){
            return head.val;
        }
        return -1;
    }
}

2.4 循环队列

  实际中我们有时还会使用一种队列叫循环队列。如操作系统课程讲解生产者消费者模型时可以就会使用循环队列。环形队列通常使用数组实现。

2.5双端队列

 双端队列(deque)是指允许两端都可以进行入队和出队操作的队列,deque 是 “double ended queue” 的简称。
那就说明元素可以从队头出队和入队,也可以从队尾出队和入队

Deque是一个Deque是一个接口,使用时必须创建LinkedList的对象

在实际工程中,使用Deque接口是比较多的,栈和队列均可以使用该接口:


Deque<Integer> stack = new ArrayDeque<>();//双端队列的线性实现
Deque<Integer> queue = new LinkedList<>();//双端队列的链式实现

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

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

相关文章

PPT系统化学习 - 第1天

文章目录 更改PPT主题更改最大撤回次数自动保存禁止PPT压缩图片字体嵌入PPTPPT导出为PDFPPT导出为图片PPT导出为图片型幻灯片PPT导出成视频添加参考线设置默认字体设置默认形状建立模板、保存模板、使用模板建立模板保存模板使用模板 更改PPT主题 更改PPT的主题&#xff1a; 夜…

如何进行销售漏斗管理?

本文将为大家讲解&#xff1a;如何进行销售漏斗管理&#xff1f; 销售漏斗管理是现代销售管理的核心概念之一。它将销售过程分解为一系列阶段&#xff0c;从而帮助销售团队更有效地跟踪和管理潜在客户。本文将深入探讨销售漏斗管理的方法&#xff0c;并结合简道云CRM的实际应用…

【深度学习推荐系统 工程篇】三、浅析FastTransFormer看 GPU推理优化 思路

前言 在搜索/推荐场景中&#xff08;一般是CTR/CVR预估&#xff09;Serving的模型一般是稀疏参数占比比较大&#xff0c;工程落地方面会遇到两方面的困难&#xff1a; 稀疏参数的存储/IO网络结构的优化 对于稀疏参数的存储/IO&#xff0c;在上一篇【深度学习推荐系统 工程篇…

MySQL查询(基础到高级)

目录 一、单表查询&#xff1a; 1.基本查询&#xff1a; 1.1 查询多个字段&#xff1a; 1.2 去除重复记录&#xff1a; 2. 条件查询&#xff1a; 2.1 语法 2.2 条件分类&#xff1a; 比较运算符&#xff1a; between..and..使用示例&#xff1a; ​编辑 in(..) 使用示例&…

InfiniTAM v3中localVBA的使用原理

注意&#xff1a;以下是我对InfiniTAM v3代码的理解 初始化&#xff1a;假设预先设定的block数量长度为10&#xff0c;localVBA初始化后如下图 voxelBlocks的内存已经分配&#xff0c;但都是空的allocationList被初始化为allocationList[i]i&#xff0c;表示任意访问allocatio…

【数据开发】数据全栈知识架构,数据(平台、开发、管理、分析)

文章目录 一、数据全栈知识架构1、数据方法&#xff08;思维&#xff0c;统计学&#xff0c;实践&#xff0c;北极星&#xff09;2、数据工具&#xff1a;数据仓库3、数据规范 二、数据分析工具1、大数据平台2、数据开发&#xff1a;入库计算&#xff08;重点&#xff09;3、数…

WP篇 某网杯WEBAWD踩坑

某网杯 事件回顾赛题环境 坑木马访问JSP显示空白Ubuntu与Mysql问题框架选择idea 事件回顾 虽然没有参与本次AWD&#xff0c;但是看到另外一只队伍down下来的文件&#xff0c;我还是忍不住心动了&#xff0c;于是决定复现一番&#xff0c;因为某些原因&#xff0c;详细的wp和复…

c#:System.Text.Json 的使用三(从Newtonsoft迁移)

环境&#xff1a; .net 6.0vs2022 系列篇&#xff1a; 《c#&#xff1a;System.Text.Json 的使用一》 《c#&#xff1a;System.Text.Json 的使用二》 《c#&#xff1a;System.Text.Json 的使用三&#xff08;从Newtonsoft迁移&#xff09;》 参考&#xff1a; 《MSDN: 从 Newt…

【vue2第二十章】vuex使用 (state,mutations,actions,getters)

vuex是什么&#xff1f; Vuex是一个用于Vue.js应用程序的状态管理模式。它允许您在应用程序中管理共享状态&#xff0c;并以可预测的方式进行状态更新。Vuex集成了Vue的响应式系统&#xff0c;使得状态的变化能够自动地更新视图。使用Vuex&#xff0c;您可以将应用程序的状态集…

华为云云耀云服务器L实例评测 |云服务器性能评测

通过上一篇文章华为云云耀云服务器 L 实例评测 &#xff5c;云服务器选购&#xff0c;我已经购买了一台 Centos 系统的云耀云服务器 L 实例。 在获得云耀云服务器 L 实例后&#xff0c;首要任务是熟悉云耀云服务器 L 实例的性能&#xff0c;对云耀云服务器 L 实例的性能进行测…

如何在 SOLIDWORKS中创建零件模板 硕迪科技

作为一款多功能且可大量定制的 3D CAD 软件&#xff0c;SOLIDWORKS模板可以通过自定义属性包含大量数据。可以通过为SOLIDWORKS零件、装配体和工程图创建模板来利用这些模板。 与其他一些CAD软件不同&#xff0c;SOLIDWORKS不限制您可以创建的模板数量 - 您可以根据需要创建任…

3、SpringBoot_配置文件

四、配置文件 1.前言 曾经使用SpringMVC的时候是手动修改tomcat配置的端口信息&#xff0c;那现在Springboot如何修改&#xff1f;springboot有一个默认的配置文件 application.properties 2.配置文件分类 常用配置信息官方文档地址 https://docs.spring.io/spring-boot/doc…

web:[极客大挑战 2019]Knife

题目 点开页面显示为&#xff0c;还有一句话木马 查看源代码&#xff0c;没有什么特别的 回归题目&#xff0c;页面显示使用菜刀和一句话木马&#xff0c;使用蚁剑连接 在根目录找到了flag文件

记账APP:小哈记账5——记账首页页面的制作(2)

项目介绍&#xff1a; 小哈记账是一款用于记账APP&#xff0c;基于Android Studio开发工具&#xff0c;采用Java语言进行开发&#xff0c;同时使用litepal和阿里云数据库进行数据的增删查改&#xff0c;以图标的形式在App的界面上显示。App可以清晰显示收支情况&#xff0c;并以…

EfficientNet笔记

前言 论文 EfficientNet 是一系列卷积神经网络架构&#xff0c;它旨在在计算资源受限的情况下实现更好的性能。EfficientNet 的设计思想是在网络的深度、宽度和分辨率方面进行均衡的调整&#xff0c;以获得高效且高性能的模型。 以下是 EfficientNet 的主要特点和设计原则&a…

VS2022创建控制台应用程序后没有Main了,如何显示Main?

文章目录 问题描述原因解决方案简单的顶级语句试用计算器 其他文章 问题描述 用VS2022创建一个控制台应用后&#xff0c;没有名称空间和Main函数了&#xff0c;只有一个WriteLine&#xff0c;如下所示。 // See https://aka.ms/new-console-template for more information Co…

今日学习 Mybatis 的关联映射

关联映射的三种关系&#xff1a; 我们首先绘制一个简化的 E-R 图来表示三种关联关系。 上图表示的三种关系&#xff1a; 一对一&#xff1a;一个班主任只属于一个班级&#xff0c;一个班级也只能有一个班主任一对多&#xff1a;一个班级有多个学生&#xff0c;一个学生只属于…

全网最细讲解如何实现导出Excel压缩包文件

写在前面的话 接下来我会使用传统的RESTful风格的方式结合MVC的开发模式给大家介绍一下如何去实现标题的效果。 基本思路讲解 先从数据库中查询出一组人员信息记录&#xff0c;保存在List list中。遍历这个列表&#xff0c;对于每一个人员信息&#xff0c;将其填充到一个Excel…

小白学Python:提取Word中的所有图片,只需要1行代码

#python# 大家好&#xff0c;这里是程序员晚枫&#xff0c;全网同名。 最近在小破站账号&#xff1a;Python自动化办公社区更新一套课程&#xff1a;给小白的《50讲Python自动化办公》 在课程群里&#xff0c;看到学员自己开发了一个功能&#xff1a;从word里提取图片。这个…

pytorch安装教程

写在前面&#xff1a;配置pytorch着实有很多坑&#xff0c;不过最终结果算好的&#xff0c;话不多说&#xff0c;直接上干货。其中想要知道如何解决torch.cuda.is_available(&#xff09;返回false的&#xff0c;直接跳到步骤5pytorch安装。python版本至少是3.6及以上。 1、前…