数据结构第07节:队列

打印 上一主题 下一主题

主题 1650|帖子 1650|积分 4950

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
在计算机科学中,队列是一种抽象数据类型,它遵循先进先出(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,模拟学天生绩管理系统中大概用到的队列操纵。
  1. public class StudentQueue {
  2.     private int maxSize; // 队列最大容量
  3.     private int front; // 队头
  4.     private int rear; // 队尾
  5.     private int[] queueArray; // 存储队列元素的数组
  6.     private int nItems; // 当前队列中的元素数量
  7.     public StudentQueue(int size) {
  8.         maxSize = size;
  9.         front = 0;
  10.         rear = -1;
  11.         queueArray = new int[maxSize];
  12.         nItems = 0;
  13.     }
  14.     // 入队操作
  15.     public void enqueue(int studentId) {
  16.         if (rear == maxSize - 1) { // 检查队列是否已满
  17.             System.out.println("Queue is full.");
  18.             return;
  19.         }
  20.         rear++; // 移动队尾指针
  21.         queueArray[rear] = studentId; // 在队尾添加元素
  22.         nItems++;
  23.     }
  24.     // 出队操作
  25.     public int dequeue() {
  26.         if (isEmpty()) { // 检查队列是否为空
  27.             System.out.println("Queue is empty.");
  28.             return -1;
  29.         }
  30.         int temp = queueArray[front]; // 保存队头元素
  31.         front++; // 移动队头指针
  32.         nItems--;
  33.         return temp;
  34.     }
  35.     // 检查队列是否为空
  36.     public boolean isEmpty() {
  37.         return (nItems == 0);
  38.     }
  39.     // 打印当前队列状态
  40.     public void printQueue() {
  41.         for (int i = front; i <= rear; i++) {
  42.             System.out.print(queueArray[i] + " ");
  43.         }
  44.         System.out.println();
  45.     }
  46.     public static void main(String[] args) {
  47.         StudentQueue studentQueue = new StudentQueue(5); // 创建一个最大容量为5的队列
  48.         studentQueue.enqueue(1001); // 添加学生ID 1001
  49.         studentQueue.enqueue(1002); // 添加学生ID 1002
  50.         studentQueue.enqueue(1003); // 添加学生ID 1003
  51.         studentQueue.printQueue(); // 打印队列状态
  52.         studentQueue.dequeue(); // 移除并返回队头学生ID
  53.         studentQueue.printQueue(); // 再次打印队列状态
  54.         studentQueue.enqueue(1004); // 添加学生ID 1004
  55.         studentQueue.printQueue(); // 最后打印队列状态
  56.     }
  57. }
复制代码
在这个示例中,StudentQueue 类实现了基本的队列功能,包罗 enqueue (入队),dequeue (出队),isEmpty (检查队列是否为空),以及 printQueue (打印队列状态) 方法。main 方法演示了怎样使用这个队列类进行一系列操纵。请注意,这个实现假设所有学生ID都是整数,而且队列的大小是固定的。在实际应用中,你大概需要使用更机动的数据结构,如 Java 的 ArrayList 大概 LinkedList 来实现动态调解大小的队列。
``
让我们继承通过一个更具体的例子来展示Java编程语言的使用。这次我们将创建一个简单的图书管理系统,该系统可以用来添加新书、删除书籍和表现所有书籍的信息。我们将使用面向对象的方法来设计这个系统。
首先,我们界说一个 Book 类,它包含书籍的基本信息,比方书名、作者和ISBN号。然后,我们创建一个 Library 类来管理这些书籍,包罗添加、删除和表现书籍列表的功能。
下面是完整的代码实现:
  1. import java.util.ArrayList;
  2. import java.util.List;
  3. // 定义 Book 类
  4. class Book {
  5.     String title;
  6.     String author;
  7.     String isbn;
  8.     public Book(String title, String author, String isbn) {
  9.         this.title = title;
  10.         this.author = author;
  11.         this.isbn = isbn;
  12.     }
  13.     @Override
  14.     public String toString() {
  15.         return "Title: " + title + ", Author: " + author + ", ISBN: " + isbn;
  16.     }
  17. }
  18. // 定义 Library 类
  19. class Library {
  20.     List<Book> books;
  21.     public Library() {
  22.         books = new ArrayList<>();
  23.     }
  24.     // 添加书籍
  25.     public void addBook(Book book) {
  26.         books.add(book);
  27.     }
  28.     // 删除书籍
  29.     public void removeBook(String isbn) {
  30.         books.removeIf(book -> book.isbn.equals(isbn));
  31.     }
  32.     // 显示所有书籍
  33.     public void displayBooks() {
  34.         for (Book book : books) {
  35.             System.out.println(book);
  36.         }
  37.     }
  38. }
  39. public class Main {
  40.     public static void main(String[] args) {
  41.         Library library = new Library();
  42.         // 添加几本书籍
  43.         library.addBook(new Book("The Great Gatsby", "F. Scott Fitzgerald", "978-0743273565"));
  44.         library.addBook(new Book("To Kill a Mockingbird", "Harper Lee", "978-0061120084"));
  45.         library.addBook(new Book("1984", "George Orwell", "978-0451524935"));
  46.         // 显示所有书籍
  47.         System.out.println("All Books:");
  48.         library.displayBooks();
  49.         // 删除一本书籍
  50.         library.removeBook("978-0061120084");
  51.         // 再次显示所有书籍
  52.         System.out.println("\nBooks after removal:");
  53.         library.displayBooks();
  54.     }
  55. }
复制代码
在上述代码中:


  • Book 类包含书名、作者和ISBN三个属性,并重写了 toString() 方法以便于输出书籍信息。
  • Library 类包含一个 books 列表,用于存储 Book 对象。它提供了 addBook() 方法来添加书籍,removeBook() 方法来删除书籍(通过ISBN),以及 displayBooks() 方法来表现所有书籍。
  • Main 类是步调的入口点,它创建了一个 Library 对象,添加了几本书,表现了所有书籍,然后删除了一本书并再次表现书籍列表。
这个简单的图书管理系统展示了怎样使用类、对象、集合和面向对象的编程概念来构建一个小型的应用步调。
[code][/code]
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

耶耶耶耶耶

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表