Java数据结构—队列(Queue)

队列是一种先进先出(FIFO)的数据结构,类似于现实中排队等待的场景。队列有两个基本操作:入队(enqueue)和出队(dequeue)。新元素被插入到队列的尾部,并且只有队列头部的元素才能被移除。

在Java中,可以使用LinkedList或ArrayDeque来实现队列。LinkedList是一个双向链表,在队列的头部和尾部添加元素非常快。而ArrayDeque是一个循环数组,对于较大的队列效率更高。

以下是使用Java代码创建队列的示例:

import java.util.LinkedList;
import java.util.Queue;

public class QueueExample {
   public static void main(String[] args) {
      Queue<String> queue = new LinkedList<>();

      // 入队
      queue.add("Alice");
      queue.add("Bob");
      queue.add("Charlie");

      // 出队
      String firstPerson = queue.remove();
      System.out.println("The first person in the queue is " + firstPerson);

      // 查看队头元素
      String head = queue.peek();
      System.out.println("The head of the queue is " + head);
   }
}

在这个示例中,我们使用了Java内置的Queue接口和LinkedList实现队列。我们首先添加了三个元素到队列中,然后从队列中删除第一个元素并打印它,最后查看队列的头部元素并打印。输出如下:

The first person in the queue is Alice
The head of the queue is Bob

一个使用队列的示例是广度优先搜索(BFS)算法。BFS是一种用于遍历或搜索图的算法,它从图的一个起始节点开始,逐层遍历其邻居节点,直到找到目标节点为止。

以下是使用Java代码实现BFS算法的示例:

import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.List;
import java.util.Queue;

public class BFSExample {
   public static void main(String[] args) {
      // 构建无向图
      int n = 6;
      List<Integer>[] graph = new List[n];
      for (int i = 0; i < n; i++) {
         graph[i] = new ArrayList<>();
      }
      graph[0].add(1);
      graph[0].add(2);
      graph[1].add(3);
      graph[1].add(4);
      graph[2].add(4);
      graph[3].add(5);
      graph[4].add(5);

      // BFS
      boolean[] visited = new boolean[n];
      Queue<Integer> queue = new ArrayDeque<>();
      queue.add(0);
      visited[0] = true;
      while (!queue.isEmpty()) {
         int node = queue.remove();
         System.out.println("Visiting node " + node);
         for (int neighbor : graph[node]) {
            if (!visited[neighbor]) {
               queue.add(neighbor);
               visited[neighbor] = true;
            }
         }
      }
   }
}

在这个示例中,我们首先构建了一个无向图,并使用BFS算法从节点0开始遍历整个图。我们使用了Java内置的Queue接口和ArrayDeque实现队列,逐层遍历邻居节点,并将其添加到队列中。在遍历每个节点时,我们打印出正在访问的节点编号。输出如下:

Visiting node 0
Visiting node 1
Visiting node 2
Visiting node 3
Visiting node 4
Visiting node 5

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值