队列是一种基于先进先出的数据结构,是一种只能在一端进行插入,在另一端进行删除操作的特殊线性表,它按照先进先出的原则存储数据,先进入的数据,在读取数据时被先读出来
队列的API设计:
代码:
package com.yyy;
import java.util.Iterator;
public class Queue<T> implements Iterable<T>{
//记录首结点
private Node head;
//当前栈的元素的个数
private int N;
//记录最后一个结点
private Node last;
//内部类---结点类
private class Node{
public T item;
public Node next;
public Node(T item,Node next){
this.item=item;
this.next=next;
}
}
//队列的初始化
public Queue(){
this.head=new Node(null,null);
this.N=0;
this.last=null;
}
//判断队列是否为空,是返回true ,否返回false
public boolean isEmpty(){
return N==0;
}
//获取队列中元素的个数
public int size(){
return N;
}
//从队列中拿出一个元素
public T dequeue(){
if(isEmpty()){
return null;
}
Node oldFirst=head.next;
head.next=oldFirst.next;
N--;
//因为出队列其实是在删除元素,因此如果队列中的元素被删除完了,需要重置Last=null
if(isEmpty()){
last=null;
}
return oldFirst.item;
}
//往队列里面插入一个元素
public void enqueue(T t){
if(last==null){//说明是第一次插入
last=new Node(t,null);
head.next=last;
}else{//说明不是第一次插入
Node oldLast=last;
last=new Node(t,null);
oldLast.next=last;
}
N++;
}
@Override
//给队列提供外部的遍历方式,实现Iterable接口
public Iterator<T> iterator() {
return new QIterator();
}
private class QIterator implements Iterator{
private Node n;
public QIterator(){
this.n=head;
}
@Override
public boolean hasNext() {
return n.next!=null;
}
@Override
public Object next() {
n=n.next;
return n.item;
}
}
}
测试代码:
package test;
import com.yyy.Queue;
import java.util.Iterator;
public class QueueTest {
public static void main(String[] args) {
Queue <String> queue = new Queue <String>();
queue.enqueue("王二");
queue.enqueue("张三");
queue.enqueue("李四");
for (String item:
queue) {
System.out.println(item);
}
System.out.println("=================");
queue.dequeue();
for (String item:
queue ) {
System.out.println(item);
}
}
}