基本原理
只允许在一端插入数据操作,在另一端进行删除数据操作的特殊线性表;进行插入操作的一端称为队尾(入队列),进行删除操作的一端称为队头(出队列);队列具有先进先出(FIFO)的特性。
物理数据--链表,数组
自定义迭代器
如果不知道的请看基础数据结构————栈_weixin_43740982的博客-CSDN博客
外部操作 添加? 删除 获取队头数据
public boolean addNode(T t) {//添加数据
if(last==null)
{
last=new Node(t,null);
haed.next=last;
}else{
Node oldN =last;
last=new Node(t,null);
oldN.next=last;
}
n++;
return true;
}
public Object removeNode() {//删除数据
if(isEmpty())
{return null;}
Node oldFrist=haed.next;
haed.next=oldFrist.next;
n--;
if(isEmpty())
{last=null;}
return oldFrist .item;
}
public Object GetNode() {//获取对头数据
return haed.item;
}
全源码
public class Queue<T> implements Iterable {
private class Node{
public T item;
public Node next;
public Node(T item,Node next){
this.item=item;
this.next=next;
}
}
private Node haed;
private Node last;
private int n;
public Queue()
{
this.haed=new Node(null,null);
this.last=null;
this.n=0;
}
public boolean isEmpty()
{
return n==0;
}
public boolean addNode(T t) {
if(last==null)
{
last=new Node(t,null);
haed.next=last;
}else{
Node oldN =last;
last=new Node(t,null);
oldN.next=last;
}
n++;
return true;
}
public Object removeNode() {
if(isEmpty())
{return null;}
Node oldFrist=haed.next;
haed.next=oldFrist.next;
n--;
if(isEmpty())
{last=null;}
return oldFrist .item;
}
public int size() {
return n;
}
public Iterator iterator() {
return new Iteator();
}
public Object GetNode() {
return haed.item;
}
private class Iteator implements Iterator {
private Node n;
public Iteator(){
this.n=haed;
}
public boolean hasNext() {
return n.next!=null;
}
public Object next() {
n=n.next;
return n.item;
}
}
}
|