一、队列的特点
先进先出
二、用顺序表实现队列
//用顺序表实现队列 (循环队列)
//定义一个head头和一个尾tail
public class MyQueue2 {
public int[] array=new int[100];
public int size;
public int head=0;
public int tail=0;
//入队列(从顺序表尾端进行插入)
public void offer(int val){
//如果顺序表已经满了,那就不能再放进去了
if(size==array.length){
return;
}
//插入元素
array[size]=val;
tail++;
//如果tail超出数组的话
if(tail>=array.length){
tail=tail%array.length;
}
size++;
}
//出队列
public Integer poll(){
//如果队列是空的话,就不能删除元素
if(size==0){
return null;
}
int ret=array[head];
head++;
size--;
return ret;
}
//去队首元素
public Integer peek(){
if(size==0){
return null;
}
return array[head];
}
三、用链表实现队列
// 先用链表实现
class Node {
public int val;
public Node next;
public Node(int val) {
this.val = val;
}
}
public class myQueue {
public Node head=new Node(-1);
public Node tail=head;
public myQueue() {
}
//链表尾部增加元素(队尾),链表头部删除元素(对头)
public void offer(int val){
Node node=new Node(val);
//如果队列为空
if(head.next==null){
head.next=node;
tail=node;
return;
}
//如果队列不为空
tail.next=node;
tail=node;
}
//出队列(在链表头部进行元素删除)
public Integer poll(){
if(head.next==null){
return null;
}
Node del=head.next;
head=head.next;
return del.val;
}
//取队首元素(队首元素再链表头部)
public Integer peek(){
if(head.next==null){
return null;
}
return head.next.val;
}