java算法: FIFO队列
FIFO队列是ADT,由两个基本操作组成。 也就是说,插入(放入)新项目,删除(得到)第一个插入的项目。
示例1:FIFO队列ADT接口
Java代码
接口intqueue {
输入队列(输入队列);
intempty (
语音推送(intq );
intget (;
}
接口int queue {
输入队列(输入队列);
int empty (;
语音推送(intq );
int get (;
}
使用数组或链表,在一定时间内实现FIFO队列ADT的get和put操作。
示例2 :实现2:FIFO队列链表
Java代码
publicclassintQueue{
私有群集节点{
国际项目
节点下一步;
节点(intitem ) {
this.item=item;
下一个=null;
}
}
隐私保护,tail;
输入队列(intmax ) {
head=空;
tail=null;
}
布尔empty () }
返回(head==null );
}
voidput(Intitem ) {
节点=tail;
tail=newnode(item );
if(empty () ) )。
head=tail;
}else{
t.next=tail;
}
}
intget ()。
intv=head.item;
Nodet=head.next;
head=t;
返回网络;
}
}
公共类int queue {
私有类节点{
int item;
节点下一步;
节点(intitem ) {
this.item=item;
下一个=null;
}
}
专用节点头,tail;
输入队列(intmax ) {
head=空;
tail=null;
}
布尔empty () }
返回(head==null );
}
voidput(intitem ) {
节点t=tail;
tail=newnode(item );
if(empty () ) )。
head=tail;
}else{
t.next=tail;
}
}
int get ()。
int v=head.item;
Node t=head.next;
head=t;
返回v;
}
}
数组必须有足够的空间用于自始至终预期的最大条目数。 链接表表示使用的空间与数据结构中的元素数成比例,但为指针分配额外的空间,并为每个操作分配和释放内存需要额外的时间。
示例3:FIFO队列的数组实现
Java代码
publicclassintQueue{
privateint[]q;
私有Intn,头部,尾部;
输入队列(intmax ) {
q=newint[maxN 1];
head=N;
tail=0
}
布尔empty () }
返回(head % n==tail );
}
voidput(Intitem ) {
q[tail ]=item;
tail=tail%N;
}
intget ()。
head=head%N;
returnq[head ];
}
}
公共类int queue {
private int[] q;
私密int n,head,tail;
输入队列(intmax ) {
q=new int[maxN 1];
head=N;
tail=0
}
布尔empty () }
返回(head % n==tail );
}
voidput(intitem ) {
q[tail ]=item;
tail=tail%N;
}
int get ()。
head=head%N;
返回q [ head ];
}
}
扩展:删除双侧队列、随机条目队列(如果第一个条目是FIFO队列,最后一个条目是堆栈)、关键字条目、自定义条目等。