数据结构---栈和队列

news2024/11/26 2:43:31

栈和队列

    • 入栈
    • 出栈
    • 栈的JAVA实现
  • 队列
    • 入队
    • 出队
    • 循环队列

栈和队列。这两者都属于逻辑结构,它们的物理实现既可以利用数组,也可以利用链表来完成。

栈(stack)是一种线性数据结构,它就像一个上图所示的放入乒乓球的圆筒容器,栈中的元素只能先入后出(First In Last Out,简称FILO)。
最早进入的元素存放的位置叫作栈底(bottom),最后进入的元素存放的位置叫作栈顶
(top)。

在这里插入图片描述
在这里插入图片描述
栈的数组实现
在这里插入图片描述
栈的链表实现
在这里插入图片描述

入栈

入栈操作(push)就是把新元素放入栈中,只允许从栈顶一侧放入元素,新元素的位置将会成为新的栈顶。

出栈

出栈操作(pop)就是把元素从栈中弹出,只有栈顶元素才允许出栈,出栈元素的前一个元素将会成为新的栈顶。

栈的JAVA实现

package dataStructure.myStack;

import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.EmptyStackException;

public class myStack <E>{
    private Object[]arr;
    //数组默认长度
    private int stackLength=4;
    private int size;
    //指针
    private int index = -1;
    //判断栈是否为空
    public boolean empty(){
        return this.size==0;
    }
    //获取栈顶元素
    public E pop(){
        if(this.index==-1){
            throw new IndexOutOfBoundsException("空栈,无法取元素");
        }
        this.size--;

        return (E) this.arr[index--];
    }

    /**
     * 数组初始化或者以 1.5 倍容量对数组扩容
     */
    private void capacity(){
        if(this.arr==null){
            this.arr = new Object[this.stackLength];
        }
        if(this.size-(this.stackLength-1)>=0){
            this.stackLength = this.stackLength+this.stackLength/2;
            this.arr = Arrays.copyOf(this.arr,this.stackLength);

        }
    }

    //向栈容器添加元素
    public E push(E item){
        this.capacity();
        this.arr[++index]=item;
        this.size++;
        return item;
    }

    public static void main(String[] args) {
        myStack<String> myStack = new myStack<>();
        myStack.push("a");
        myStack.push("b");
        myStack.push("c");
        System.out.println(myStack.pop());
        System.out.println(myStack.empty());
        System.out.println(myStack.pop());
        System.out.println(myStack.pop());
        System.out.println(myStack.empty());
        System.out.println(myStack.pop());

    }

}

队列

队列(queue)是一种线性数据结构,它的特征和行驶车辆的单行隧道很相似。不同于栈的先入后出,队列中的元素只能先入先出(First In First Out,简称(FIFO)。队列的出口端叫作队头(front),队列的入口端叫作队尾(rear)。

队列这种数据结构既可以用数组来实现,也可以用链表来实现。

队列数组实现
在这里插入图片描述

队列链表实现
在这里插入图片描述

入队

入队(enqueue)就是把新元素放入队列中,只允许在队尾的位置放入元素,新元素的下一个位置将会成为新的队尾。
在这里插入图片描述

出队

出队操作(dequeue)就是把元素移出队列,只允许在队头一侧移出元素,出队元素的后一个元素将会成为新的队头。
在这里插入图片描述

循环队列

数组实现的队列可以采用循环队列的方式来维持队列容量的恒定。
以利用已出队元素留下的空间,让队尾指针重新指回数组的首位。
在物理存储上,队尾的位置也可以在队头之前。当再有元素入队时,将其放入数组的首位,队尾指针继续后移即可。
队列满的条件:(队尾下标+1)%数组长度 = 队头下标
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

实施 GitOps 的三个关键步骤

GitOps 是一种自动化和管理基础架构和应用程序的模型&#xff0c;通过许多团队已经使用的相同 DevOps 最佳实践来形成的模型&#xff0c;例如版本控制、代码审查和 CI/CD 流水线。在实施 DevOps 时&#xff0c;我们找到了自动化软件开发生命周期的方法&#xff0c;但在基础设施…

[附源码]Python计算机毕业设计高铁乘坐舒适性在线调查及评价系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

3399的-mipi适应多个lcd屏显示-后续2-linux内核中的修改

一、前提&#xff1a; 1. rk3399核心板 2.linux4.4.19 源码 3. 多个MIPI显示屏的启动序列以及显示时序&#xff08;重要&#xff09; 4.rk3399MIPI通道0 5.接上一个uboot中的修改配置 二、内核驱动的修改 0. dts就不再给出了&#xff0c;请参考uboot的修改 1. 主要涉及的…

基于C#开发的(WinForm)图书管理系统【100010037】

图书管理系统项目开发说明书 项目简介 项目背景&#xff08;选择这个项目的原因、前景&#xff0c;面向的用户&#xff0c;优势&#xff09;&#xff1b; * 根据学院需要希望能够充分利用现代科技来提高图书管理的效率&#xff0c;在原有的办公系统基础上进行扩展&#xff0c…

ArkUI框架,更懂程序员的UI信息语法

ArkUI框架&#xff0c;更懂程序员的信息语法ArkUI框架简化代码的“秘密” 在传统的开发过程中&#xff0c;总有个问题在困扰我&#xff1a;如何实现前端view与后端数据的同步更改&#xff1f;例如&#xff1a;在某个视频类app的页面&#xff0c;如果我想要实现视频的点击播放功…

移动端touch拖动事件和click事件冲突问题解决

通过本课程你会学到什么 1.系统掌握 Web 全栈技能树 2.网络、前后端、持久化等核心技术解析 3.全栈开发的技术比较和选型 4.拓宽技术视野&#xff0c;培养全栈思维 今天我们要接触一个和 MVC 密切相关的&#xff0c;能带来思维模式改变的编程范型——面向切面编程&#xff08;…

OpenCV StudyNote

Open CV学习 图像读取与显示 灰度图像 - 单通道 彩色图像 - 三通道 (B, G, R) 一般步骤 import cv2 as cv # 导入OpenCV支持(cv2是包的名称不是版本号) import numpy as np # 所有图像数据都是以 numpy 数组方式存储 imread(filename[,flags]) # imread 函数&am…

自助服务:怎么提高客服人员效率?

越来越多的企业意识到了客服效率的重要性&#xff0c;大家通过布局全渠道系统、智能客服机器人、人员岗前培训等方式来提升客服效率&#xff0c;为客户提供更迅速、专业、优质的服务。人员效率的提升不仅能提高客户体验&#xff0c;还有助于企业的长期发展&#xff0c;带来更多…

【Vue2+Element ui通用后台】头部

文章目录headerheader 在 components 中新建 CommonHeader.vue 组件来完成头部组件的编写 <template><div class"header-container"><div class"l-content"><el-button icon"el-icon-menu" size"mini"><…

【MySQL】索引基础介绍

一、常见的存储引擎有哪些&#xff1f;区别是什么&#xff1f; Mysql 默认的存储引擎是&#xff1a;InnoDB&#xff0c;具有支持事务、行级锁、高并发访问性能。MyIsAM&#xff1a;访问速度快&#xff0c;实际运用如果是以读和插入操作为主&#xff0c;并对事物完整性和并发性…

面向对象程序设计期末项目总结

面向对象程序设计期末项目总结 开发前准备 MysqlNavicatTomCatIDEA 一&#xff0c;配置项目环境 右键项目名&#xff0c;添加新模块 命名后右键新建的模块 选中Web模块 到此项目创建完毕&#xff0c;接下来是配置环境。 打开IDEA–>File找到Project Structure 添加所…

Pikachu(皮卡丘)靶场中SQL注入

Pikachu靶场中SQL注入1.Pikachu(皮卡丘)靶场中SQL注入1.1.数字型注入1.2.字符型注入1.3.搜索型注入1.4.xx型注入1.5.insert/update注入1.6.delete注入1.7.http头注入1.8.盲注(base on boolian)1.9.盲注(base on time)1.10.宽字节注入1.Pikachu(皮卡丘)靶场中SQL注入 若遇到不链…

基于java+springboot+mybatis+vue+mysql的冬奥会科普平台

项目介绍 基于SpringBoot框架的冬奥会科普平台利用网络沟通、计算机信息存储管理&#xff0c;有着与传统的方式所无法替代的优点&#xff0c;系统采用java语言开发&#xff0c;前端采用vue技术&#xff0c;数据库采用mysql进行数据存储。比如计算检索速度特别快、可靠性特别高…

大数据如何在制造业中进行应用?数据宝董事长汤寒林现身数字化年会讲了这个事

12月8日1670923102263472480日&#xff0c;2022中国数字化年会成功在线上举办&#xff01;本届年会以“向变而生”为主题&#xff0c;历时三天&#xff0c;特别打造了主论坛、高峰论坛与行业数智化论坛三大板块&#xff0c;60余位专家学者与来自各领域各行业数字化领军人物 通过…

前端基础(五)_CSS文本文字属性

CSS文本文字属性 1、文字属性 1.1、字号 font-size&#xff1a;38px; 浏览器默认16px; 1.2、字体 font-family: 如果字体名称包含空格&#xff0c;字体名称上加引号&#xff1b; 中文字体名称加引号&#xff1b; 多个字体名称作为一个回退系统来保存&#xff0c;如果第一个不…

什么才是写博客初心如何坚持

为何写机器人课程博客并一直坚持&#xff1f;&#xff08;2021&#xff09; 创新源自真心&#xff0c;“乱”创新的课程徒有其表&#xff0c;“不”创新的课程逐渐凋零。 个人觉得&#xff0c;课程教学创新宏观上的目标是让学生更好的认识自己并适应社会发展和变化&#xff1b…

停车场管理系统

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; 主要用jsp,数据库用MySQL 分为前台用户和后台管理员 前台用户 主界面是一个区域内的两到三个停车场&#xff0c;然后 可…

virtualenv系列 (2) · 系统环境与虚拟环境

文章目录1. 怎样算是一套Python环境&#xff1f;2. 系统环境 VS 虚拟环境3. 虚拟环境最佳实践1. 怎样算是一套Python环境&#xff1f; 首先&#xff0c;我们得先弄清楚&#xff1a;怎样算是一个Python环境&#xff1f;然后再去区分系统环境和虚拟环境。简单地说&#xff0c;在…

[附源码]Python计算机毕业设计SSM基于web的家教管理系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

阿里5位高级架构师耗时两年共同研发《Redis入门手册》

在我们日常的开发中&#xff0c;无不都是使用数据库来进行数据的存储&#xff0c;由于一般的系统任务中通常不会存在高并发的情况&#xff0c;所以这样看起来并没有什么问题&#xff0c;可是一旦涉及大数据量的需求&#xff0c;比如一些商品抢购的情景&#xff0c;或者是主页访…