数据结构之循环队列
程序员文章站
2022-06-06 20:52:28
...
package MyQueue;
/**
*
* @author zz384dian
* @time 2018-2-22
* @content 循环队列实现
*/
public class MyQueue<E>{
private Object objs[];
private int front;
private int back;
private int size;
public MyQueue(){
size = 0;
objs = new Object[10];
front = 0;
back = 0;
}
public E add(Object o){
//扩容
if(size == objs.length){
Object temp[] = objs;
objs = new Object[10+temp.length];
int index = 0;
for(int i=front;i<temp.length;i++)
objs[index++] = temp[i];//从对头到数组的最大容量遍历存入新数组
for(int i=0;i<back;i++)
objs[index++] = temp[i];//再从位置0到队尾遍历存入新数组
back = size;
front = 0;
}
objs[size++] = o;
if(back == objs.length){
back = 0;//队尾循环到头需重新循环
}else{
back++;//否则加一
}
return (E)o;
}
public E peek(){
if(empty()){
return null;
}else{
return (E)objs[front];
}
}
public E poll(){
E e;
if(empty()){
return null;
}else{
e = (E)objs[front];
front++;//头出来后,向前移位
if(front == objs.length){
front = 0;//移位后如果正好等于队列大小,就置0,重新循环
}
}
size--;
return e;
}
public int size(){
return size;
}
public boolean empty(){
return size == 0?true:false;
}
}
p.s.关于add方法中扩容的图解
上一篇: 数据结构之环形队列实现 (C++/数组)
下一篇: 数据结构之循环队列