队列(Queue):只允许再一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表。
队列是先进先出
入队列:进行插入操作的一端为队尾(Tail)
出队列:进行删除操作的一段称为队头(Head)
底层用链表来实现
代码实现
public class MyQueue {
private static class ListNode {
//链表实现
int value;
ListNode prev;
ListNode next;
public ListNode(int value) {
this.value = value;
}
}
private ListNode head;
private ListNode tail;
private int size = 0;
public void offer(int val) {
ListNode node=new ListNode(val);
if(head==null){
head=tail=node;
}else{
tail.next=node;
node.prev=tail;
tail=node;
}
size++;
}
public int poll() {
if(isEmpty()){
throw new RuntimeException("队列为空");
}
int val=head.value;
head=head.next;
if(head==null){
tail=null;
}else{
head.prev.next=null;
head.prev=null;
}
size--;
return val;
}
public int peak() {
if(isEmpty()){
throw new RuntimeException("队列为空");
}
return head.value;
}
public int size() {
return size;
}
public boolean isEmpty() {
return size == 0;
}
public void display() {
StringBuilder sb = new StringBuilder();
sb.append("[");
ListNode current = head;
while (current != null) {
sb.append(current.value);
if (current.next != null) {
sb.append(",");
}
current=current.next;
}
sb.append("]");
System.out.println(sb);
}
}