什么是队列(Queue)
队列是一种特殊的线性表,限定只能在表的一端进行插入(队尾),而在另外一端进行删除操作(队头),特点是“先进先出”(FIFO)。
队列的基本操作:
1.insert:在队尾插入数据。
2.remove:从对头移走数据
3.peek:查看对头的数据。
循环队列 :为了避免队列不满,却不能插入新数据项的问题,可以让队头队尾的指针绕回到数组开始的位置,这就是循环对列,也称为缓冲环。
代码实现:
package datastrucates.arrays.queue;
import datastrucates.arrays.stack.MyStack;
/**
* 自定义队列
*
* @author wuxin
*
*/
public class MyQueue {
/**
* 存放数据
*/
private int queues[];
/**
* 存放元素数量
*/
private int nitem = 0;
/**
* 结束索引
*/
private int endIndex = -1;
/**
* 开始索引
*/
private int firstIndex = 0;
public MyQueue(int length) {
queues = new int[length];
}
private void insert(int data) {
if (endIndex == queues.length - 1) { // 为了循环使用
endIndex = -1;
}
endIndex++;
queues[endIndex] = data;
nitem++;
if (nitem > queues.length) {
nitem = queues.length;
}
}
private int remove() {
if (nitem == 0) {
return 0;
}
int temp = queues[firstIndex];
queues[firstIndex] = 0;
if (firstIndex == queues.length - 1) {
firstIndex = 0;
}
firstIndex++;
nitem--;
return temp;
}
private int peek() {
return queues[firstIndex];
}
private boolean isEmpty() {
return nitem==0;
}
private boolean isFull() {
return nitem==queues.length;
}
private void printData() {
System.out.println("======================");
for(int i=0;i<queues.length;i++){
System.out.println(queues[i]);
}
}
public static void main(String[] args) {
MyQueue queue=new MyQueue(5);
queue.insert(1);
queue.insert(3);
queue.insert(6);
queue.insert(5);
queue.insert(8);
queue.printData();
System.out.println("ret--->"+queue.peek());
queue.remove();
queue.printData();
}
}
运行结果
先进先出。