数据结构第07节:队列

在计算机科学中,队列是一种抽象数据类型,它遵循先进先出(FIFO)原则,即最先加入队列的元素将是最先被移除的。队列可以用来管理一系列等待处理的任务,例如打印任务队列、任务调度等。在学生成绩管理系统中,队列可以用于管理等待处理的成绩更新请求,或者用于存储等待查询成绩的学生ID列表。

下面,我将以一个简单的学生成绩管理系统中的队列应用为例,用表格形式来详细讲解队列的操作和状态变化。

操作描述队列状态
初始化创建一个空队列[]
入队 (enqueue)将学生ID添加到队列尾部,例如学生ID: 1001[1001]
入队 (enqueue)将学生ID添加到队列尾部,例如学生ID: 1002[1001, 1002]
入队 (enqueue)将学生ID添加到队列尾部,例如学生ID: 1003[1001, 1002, 1003]
出队 (dequeue)移除并返回队列头部的学生ID1001
队列状态移除后队列的状态[1002, 1003]
出队 (dequeue)移除并返回队列头部的学生ID1002
队列状态移除后队列的状态[1003]
入队 (enqueue)将学生ID添加到队列尾部,例如学生ID: 1004[1003, 1004]
出队 (dequeue)移除并返回队列头部的学生ID1003
队列状态移除后队列的状态[1004]

通过上述操作,我们可以看到队列是如何按照先进先出的原则进行操作的。当学生ID入队时,它们被添加到队列的末尾;而出队时,总是从队列的头部移除元素,确保最先加入的ID最先被处理。这种机制对于需要按顺序处理多个请求或任务的场景非常有用。

下面是一个使用Java实现的简单队列(基于数组)。这个队列将用于管理学生的ID,模拟学生成绩管理系统中可能用到的队列操作。

public class StudentQueue {
    private int maxSize; // 队列最大容量
    private int front; // 队头
    private int rear; // 队尾
    private int[] queueArray; // 存储队列元素的数组
    private int nItems; // 当前队列中的元素数量

    public StudentQueue(int size) {
        maxSize = size;
        front = 0;
        rear = -1;
        queueArray = new int[maxSize];
        nItems = 0;
    }

    // 入队操作
    public void enqueue(int studentId) {
        if (rear == maxSize - 1) { // 检查队列是否已满
            System.out.println("Queue is full.");
            return;
        }
        rear++; // 移动队尾指针
        queueArray[rear] = studentId; // 在队尾添加元素
        nItems++;
    }

    // 出队操作
    public int dequeue() {
        if (isEmpty()) { // 检查队列是否为空
            System.out.println("Queue is empty.");
            return -1;
        }
        int temp = queueArray[front]; // 保存队头元素
        front++; // 移动队头指针
        nItems--;
        return temp;
    }

    // 检查队列是否为空
    public boolean isEmpty() {
        return (nItems == 0);
    }

    // 打印当前队列状态
    public void printQueue() {
        for (int i = front; i <= rear; i++) {
            System.out.print(queueArray[i] + " ");
        }
        System.out.println();
    }

    public static void main(String[] args) {
        StudentQueue studentQueue = new StudentQueue(5); // 创建一个最大容量为5的队列

        studentQueue.enqueue(1001); // 添加学生ID 1001
        studentQueue.enqueue(1002); // 添加学生ID 1002
        studentQueue.enqueue(1003); // 添加学生ID 1003

        studentQueue.printQueue(); // 打印队列状态

        studentQueue.dequeue(); // 移除并返回队头学生ID

        studentQueue.printQueue(); // 再次打印队列状态

        studentQueue.enqueue(1004); // 添加学生ID 1004

        studentQueue.printQueue(); // 最后打印队列状态
    }
}

在这个示例中,StudentQueue 类实现了基本的队列功能,包括 enqueue (入队),dequeue (出队),isEmpty (检查队列是否为空),以及 printQueue (打印队列状态) 方法。main 方法演示了如何使用这个队列类进行一系列操作。请注意,这个实现假设所有学生ID都是整数,并且队列的大小是固定的。在实际应用中,你可能需要使用更灵活的数据结构,如 Java 的 ArrayList 或者 LinkedList 来实现动态调整大小的队列。
``

让我们继续通过一个更具体的例子来展示Java编程语言的使用。这次我们将创建一个简单的图书管理系统,该系统可以用来添加新书、删除书籍和显示所有书籍的信息。我们将使用面向对象的方法来设计这个系统。

首先,我们定义一个 Book 类,它包含书籍的基本信息,例如书名、作者和ISBN号。然后,我们创建一个 Library 类来管理这些书籍,包括添加、删除和显示书籍列表的功能。

下面是完整的代码实现:

import java.util.ArrayList;
import java.util.List;

// 定义 Book 类
class Book {
    String title;
    String author;
    String isbn;

    public Book(String title, String author, String isbn) {
        this.title = title;
        this.author = author;
        this.isbn = isbn;
    }

    @Override
    public String toString() {
        return "Title: " + title + ", Author: " + author + ", ISBN: " + isbn;
    }
}

// 定义 Library 类
class Library {
    List<Book> books;

    public Library() {
        books = new ArrayList<>();
    }

    // 添加书籍
    public void addBook(Book book) {
        books.add(book);
    }

    // 删除书籍
    public void removeBook(String isbn) {
        books.removeIf(book -> book.isbn.equals(isbn));
    }

    // 显示所有书籍
    public void displayBooks() {
        for (Book book : books) {
            System.out.println(book);
        }
    }
}

public class Main {
    public static void main(String[] args) {
        Library library = new Library();

        // 添加几本书籍
        library.addBook(new Book("The Great Gatsby", "F. Scott Fitzgerald", "978-0743273565"));
        library.addBook(new Book("To Kill a Mockingbird", "Harper Lee", "978-0061120084"));
        library.addBook(new Book("1984", "George Orwell", "978-0451524935"));

        // 显示所有书籍
        System.out.println("All Books:");
        library.displayBooks();

        // 删除一本书籍
        library.removeBook("978-0061120084");

        // 再次显示所有书籍
        System.out.println("\nBooks after removal:");
        library.displayBooks();
    }
}

在上述代码中:

  • Book 类包含书名、作者和ISBN三个属性,并重写了 toString() 方法以便于输出书籍信息。
  • Library 类包含一个 books 列表,用于存储 Book 对象。它提供了 addBook() 方法来添加书籍,removeBook() 方法来删除书籍(通过ISBN),以及 displayBooks() 方法来显示所有书籍。
  • Main 类是程序的入口点,它创建了一个 Library 对象,添加了几本书,显示了所有书籍,然后删除了一本书并再次显示书籍列表。

这个简单的图书管理系统展示了如何使用类、对象、集合和面向对象的编程概念来构建一个小型的应用程序。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

抗震支吊架安装

抗震支吊架系统安装指导 设计要求&#xff1a; 本工程采用抗震支吊架系统&#xff0c;请根据深化设计提供的图纸及安装材料表等进行安装。 材料要求&#xff1a; 符合 CJ/T476-2015《建筑机电设备抗震支吊架通用技术条件》及 CECS 420:2015《抗震支吊架安装及验收规程》 槽…

Go语言--延迟调用defer、获取命令行参数、局部变量以及全局变量

延迟调用defer 关键字 defer 用于延迟一个函数或者方法(或者当前所创建的匿名函数)的执行。注意&#xff0c;defer语句只能出现在函数或方法的内部。 defer 语句经常被用于处理成对的操作&#xff0c;如打开、关闭、连接、断开连接、加锁、释放锁。通过defer 机制&#xff0…

生态共建 | 华宇TAS应用中间件与新华三服务器完成兼容互认证

近日&#xff0c;华宇TAS应用中间件完成与新华三技术有限公司的R4930系列和R4970 G7服务器的兼容适配&#xff0c;认证测试报告显示&#xff0c;双方产品兼容性良好&#xff0c;运行稳定、安全&#xff0c;可以满足用户对双方功能的要求。 新华三技术有限公司 新华三技术有限公…

Pandas数据清洗实战:精准捕捉并优雅过滤异常值,让数据分析更可靠!

1.describe()&#xff1a;查看每一列的描述性统计量 # 导包 import numpy as np import pandas as pddf pd.DataFrame(datanp.random.randint(0,10,size(5,3)),indexlist("ABCDE"),columns["Python","NumPy","Pandas"]) dfdf.descri…

SQL MINUS 运算符:查找数据集之间的差异

在 SQL 中&#xff0c;MINUS 运算符在查询中起着至关重要的作用&#xff0c;它允许开发人员识别和检索存在于一个数据集中但不存在于另一个数据集中的记录。本文探讨了 SQL 中 MINUS 运算符的功能、用法和实际应用&#xff0c;强调了它在数据分析和操作任务中的重要性。 理解 …

adobe pdf设置默认打开是滚动而不是单页视图

上班公司用adobe pdf&#xff0c;自己还不能安装其它软件。 每次打开pdf&#xff0c;总是默认单页视图&#xff0c;修改滚动后&#xff0c;下次打开又 一样&#xff0c;有时候比较烦。 后面打开编辑->首选项&#xff0c; 如下修改&#xff0c;下次打开就是默认滚动了

开源六轴协作机械臂myCobot280实现交互式乘法!让学习充满乐趣

本文经作者Fumitaka Kimizuka 授权我们翻译和转载。 原文链接&#xff1a;myCobotに「頷き」「首振り」「首傾げ」をしてもらう &#x1f916; - みかづきブログ・カスタム 引言 Fumitaka Kimizuka 创造了一个乘法表系统&#xff0c;帮助他的女儿享受学习乘法表的乐趣。她可以…

FPGA问题

fpga 问题 ep2c5t144 开发板 第一道坎&#xff0c;安装软件&#xff1b;没有注册&#xff0c;无法产生sop文件&#xff0c;无法下载 没有相应的库的quartus ii版本&#xff0c;需要另下载 第二道坎&#xff0c;模拟器的下载&#xff0c;安装&#xff1b; 第三道&#xff0c;v…

Camera Raw:红眼

Camera Raw 的红眼 Red Eye面板可高效地修正照片中的红眼现象。 红眼现象通常是由于闪光灯直接照射到眼睛内的视网膜所引起的&#xff0c;在摄影中常见于低光环境下的拍摄&#xff0c;尤其是在人物和宠物照片中。 在一些老照片中可能存在红眼现象&#xff0c;现代摄影技术基本上…

图像的反转

图像颜色的反转一般分为两种&#xff1a;一种是灰度图片的颜色反转&#xff0c;另一种是彩色图像的颜色反转。 本节使用的原图如下&#xff1a; 1.1 灰度图像颜色反转 灰度图像每个像素点只有一个像素值来表示&#xff0c;色彩范围在0-255之间&#xff0c;反转方法255-当前像…

Anaconda+Pycharm两个软件从头到尾下载流程

前言&#xff1a; 1、使用教程前&#xff0c;请将电脑上的所有的Python卸载掉。再下载Anaconda&#xff0c;Anaconda这个软件里面就含有python。 彻底删除python方法&#xff1a; 1、计算机——属性——高级系统设置——环境变量 2、查看电脑用户自己设计的环境变量&#x…

探索如何赋予对象迭代魔法,轻松实现非传统解构赋值的艺术

前言 今天下午在网上冲浪过程中看到这样一个问题 面试题&#xff1a;如何让 var [a, b] {a: 1, b: 2} 解构赋值成功&#xff1f; 据说是某大厂面试题&#xff0c;于是我学习了一下这个问题&#xff0c;写下这篇文章记录一下。 学习过程 要想解决这个问题首先要知道什么是解…

运维锅总详解计算机缓存

本文从OSI模型中的每一层缓存介绍、常见开源中间件缓存举例、TCP/IP协议栈中的缓存机制、操作系统中的缓存、访问缓存数据的时间范围统计等方面对计算机中的缓存进行详细介绍。希望对您有所帮助&#xff01; 一、OSI模型中的每一层缓存 1. 物理层&#xff08;Physical Layer&…

人工智能系列-numpy(一)

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” Numpy是python语言的一个拓展程序库&#xff0c;支持大量的维度数组与矩阵计算&#xff0c;此外也针对数组运算提供大量的数学函数库 NumPy支持的数据类型比Python内置的类型要…

SwiftUI中List的liststyle样式及使用详解添加、移动、删除、自定义滑动

SwiftUI中的List可是个好东西&#xff0c;它用于显示可滚动列表的视图容器&#xff0c;类似于UITableView。在List中可以显示静态或动态的数据&#xff0c;并支持垂直滚动。List是一个数据驱动的视图&#xff0c;当数据发生变化时&#xff0c;列表会自动更新。针对List&#xf…

PyMuPDF 操作手册 - 09 API - Page属性方法和简短说明

文章目录 一、Page属性方法和简短说明一、Page属性方法和简短说明 https://pymupdf.readthedocs.io/en/latest/page.html Method/Attribute属性方法Short Description简短说明Page.add_caret_annot()仅限 PDF:添加插入符号注释Page.add_circle_annot()仅限 PDF:添加圆圈…

前端面试题7(单点登录)

如何实现单点登录 单点登录&#xff08;Single Sign-On&#xff0c;简称SSO&#xff09;是一种允许用户在多个应用系统中只需登录一次&#xff0c;就可以访问所有相互信任的应用系统的认证技术。实现前端单点登录主要依赖于后端的支持和一些特定的协议&#xff0c;如OAuth、Ope…

Postman使用教程

传统接口风格 RESTful风格 使用Postman完成测试用例目标&#xff1a; Postman教程 &#xff08;1&#xff09;准备工作&#xff0c;下载Postman新建 &#xff08;2&#xff09;登录接口调试-获取验证码 &#xff08;3&#xff09;登录接口调试-登录 &#xff08;4&#xff09;…

python库(2):Passlib库

1 Passlib简介 Passlib库就是一个强大的工具&#xff0c;专门用于密码的安全存储和验证。本文将介绍Passlib库的基本概念、功能和使用方法&#xff0c;帮助更好地理解和应用密码安全技术。 Passlib是一个用于密码加密、哈希和验证的Python库&#xff0c;它提供了多种密码哈希…

STM32 HAL库实现硬件IIC通信

文章目录 一. 前言二. 关于IIC通信三. IIC通信过程四. STM32实现硬件IIC通信五. 关于硬件IIC的Bug 一. 前言 最近正在DIY一款智能电池&#xff0c;需要使用STM32F030F4P6和TI的电池管理芯片BQ40Z50进行SMBUS通信。SMBUS本质上就是IIC通信&#xff0c;项目用到STM32CubeMXHAL库…