当前位置:   article > 正文

数据结构——队列(Queue)详解

数据结构——队列(Queue)详解

1.队列(Queue)
1.1概念
队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out)的性质

入队列:进行插入操作的一端称为队尾(Tail/Rear)

出队列:进行删除操作的一端称为队头(Head/Front)

2 队列的使用
在Java中,Queue是个接口,底层是通过链表实现的,在实例化Queue时,必须实例化LinkedList对象,因为LinkedList实现了Queue接口

方法功能
boolean offer(E e)入队列
E poll()出队列
peek()获取队头元素
int size()获取队列中有效元素个数
boolean isEmpty()检测队列是否为空

1.3 队列模拟实现(双列表实现)

  1. public class MyQueue {
  2. static class ListNode {
  3. public int val;
  4. public ListNode prev;
  5. public ListNode next;
  6. public ListNode(int val) {
  7. this.val = val;
  8. }
  9. }
  10. public ListNode first;
  11. public ListNode last;
  12. //尾插
  13. public void offer(int val) {
  14. ListNode node = new ListNode(val);
  15. if(first == null) {
  16. first = last = node;
  17. }else {
  18. node.prev = last;
  19. last.next = node;
  20. last = last.next;
  21. }
  22. }
  23. //头删
  24. public int poll() {
  25. //队列为空
  26. if(first == null) {
  27. return -1;
  28. }
  29. int ret = first.val;
  30. //队列只有一个节点
  31. if(first.next == null) {
  32. first = last = null;
  33. }else {
  34. //队列有多个节点
  35. first = first.next;
  36. first.prev = null;
  37. }
  38. return ret;
  39. }
  40. //查看队头元素
  41. public int peek() {
  42. if(first == null) {
  43. return -1;
  44. }
  45. return first.val;
  46. }
  47. //判断队列是否为空
  48. public boolean isEmpty() {
  49. return first == null;
  50. }
  51. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/751133
推荐阅读
相关标签
  

闽ICP备14008679号