【数据结构】受限制的线性表——队列

avatar
作者
猴君
阅读量:0

在这里插入图片描述
🧧🧧🧧🧧🧧个人主页🎈🎈🎈🎈🎈
🧧🧧🧧🧧🧧数据结构专栏🎈🎈🎈🎈🎈
🧧🧧🧧🧧🧧上一篇文章:特殊的线性表——栈🎈🎈🎈🎈🎈

文章目录

前言

上一章我们讲了一种特殊的线性表只能在表尾进行插入和删除操作,接下来我们讲一个和栈很相似的数据结构,它也是一种特殊且所限制的线性表,它是只能在表头删除操作在表尾进行插入操作。

1.队列(Queue)

1.1队列的概念

队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾(Tail/Rear) 出队列:进行删除操作的一端称为队头

2.2 队列的使用

在Java中,Queue是个接口,底层是通过链表实现的。
在这里插入图片描述
在这里插入图片描述
注意:Queue是个接口,在实例化时必须实例化LinkedList的对象,因为LinkedList实现了Queue接口。

2.3 队列模拟实现

我们这里通过链表来实现队列:
1.我们先将链表的框架搭建一下,代码如下:

public class MyQueue {         static class ListNode {             public int val;         public ListNode prev;         public ListNode next;         public ListNode(int val) {                 this.val = val;         }     }     public ListNode head;     public ListNode last; }  

2.方法的实现:

2.1入队(offer)

//offer 入队     public void offer(int val) {             ListNode node = new ListNode(val);         //1.空节点         if(head == null) {                 head = node;             last = node;         } else {                 //2.不为空节点,尾插法。             last.next = node;             node.prev = last;             last = node;         }     } 

2.2 出队(poll)

   //poll 出队     public int poll() {             //1.判断队是否为空         if(isEmpty()) {                 //1.1队为空,抛出队为空的异常            throw new QueueEmptyException("队空异常!!!!");         } else {                 //2.队中是否只有一个元素             int val = head.val;             if(head.next == null) {                     //2.1只有一个元素                 head = null;                 last = null;                 return val;             } else {                     //2.2队中不只一个元素,删头节点                 head = head.next;                 head.prev = null;                 return val;             }         }     }     public boolean isEmpty() {             return head == 

    广告一刻

    为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!