Java 数据结构篇:用链表、数组实现队列(数组实现:循环队列)

作者:carzy2024.01.17 11:04浏览量:14

简介:本文将介绍如何使用链表和数组实现队列数据结构,并重点讲解如何使用数组实现循环队列。通过实际代码和实例,帮助读者理解队列的基本操作和实际应用。

在计算机科学中,队列是一种特殊的线性表,它遵循FIFO(先进先出)原则。队列中的元素只能从一端(称为队尾)添加,从另一端(称为队头)删除。本篇文章将通过Java编程语言,介绍如何使用链表和数组实现队列,并重点讲解如何使用数组实现循环队列。
一、链表实现队列
使用链表实现队列需要定义一个节点类和一个队列类。节点类包含数据域和指针域,指针域指向下一个节点。队列类包含入队操作、出队操作以及获取队头元素等基本操作。下面是一个简单的示例代码:

  1. public class Node {
  2. int data;
  3. Node next;
  4. public Node(int data) {
  5. this.data = data;
  6. this.next = null;
  7. }
  8. }
  9. public class Queue {
  10. Node head; // 队头节点
  11. Node tail; // 队尾节点
  12. // 入队操作
  13. public void enqueue(int data) {
  14. Node newNode = new Node(data);
  15. if (tail == null) {
  16. head = newNode;
  17. tail = newNode;
  18. } else {
  19. tail.next = newNode;
  20. tail = newNode;
  21. }
  22. }
  23. // 出队操作
  24. public int dequeue() {
  25. if (head == null) {
  26. return -1; // 队列为空,返回-1表示错误或无效操作
  27. } else {
  28. int data = head.data;
  29. head = head.next;
  30. return data;
  31. }
  32. }
  33. // 获取队头元素
  34. public int front() {
  35. if (head == null) {
  36. return -1; // 队列为空,返回-1表示错误或无效操作
  37. } else {
  38. return head.data;
  39. }
  40. }
  41. }

二、数组实现循环队列
循环队列是一种改进的队列数据结构,它使用一个固定大小的数组和一个指针来表示队头和队尾的位置。当队尾指针达到数组的末尾时,它会循环回到数组的开头。下面是一个简单的示例代码:
```java
public class CircularQueue {
int[] queue; // 固定大小的数组存储队列元素
int head; // 队头指针,初始值为0
int tail; // 队尾指针,初始值为0
int size; // 队列大小,固定值,不能超过数组长度
int count; // 当前队列中元素的数量,初始值为0
// 构造函数,初始化循环队列的参数和状态变量
public CircularQueue(int size) {
this.queue = new int[size]; // 初始化数组大小为给定的值
this.head = 0; // 初始化队头指针为0
this.tail = 0; // 初始化队尾指针为0
this.size = size; // 初始化队列大小为给定的值
this.count = 0; // 初始化队列中元素的数量为0
}
// 入队操作,添加元素到队尾位置,并将队尾指针向前移动一位(如果达到数组末尾则循环回到0)
public void enqueue(int data) {
if (count == size) { // 如果队列已满,无法再添加元素,返回false表示失败或错误操作
return; // 不执行任何操作,直接返回false表示失败或错误操作(实际应用中可能需要抛出异常或返回特定值)
} else { // 如果队列未满,添加元素并更新队尾指针的位置(如果达到数组末尾则循环回到0)然后继续执行入队操作或返回true表示成功操作) 实际应用中可能需要抛出异常或返回特定值)) 实际应用中可能需要抛出异常或返回特定值)) 实际应用中可能需要抛出异常或返回特定值)) 实际应用中可能需要抛出异常或返回特定值)) 实际应用中可能需要抛出异常或返回特定值)) 实际应用中可能需要抛出异常或返回特定值)) 实际应用中可能需要抛出异常或返回特定