核心思想:
队列与栈不同的是:栈是“先进后出,后进先出”,而队列是“先进先出”;可以讲队列看作是一个水管,一头进,另外一头出....
同样这个很简单,话不多说直接上代码案例,一看你就懂了
非循环队列:
public class Queue {
// 数组
private long[] arr;
// 最大空间
private int maxSize;
// 有效元素大小
private int elems;
// 队头
private int font;
// 队尾
private int end;
public Queue(int maxSize) {
this.maxSize = maxSize;
arr = new long[maxSize];
elems = 0;
font = 0;
end = -1;
}
// 插入数据
public void insert(long value) {
arr[++end] = value;
elems++;
}
// 移除数据
public long remove() {
elems--;
return arr[font++];
}
// 是否为空
public boolean isEmpty() {
return (elems == 0);
}
// 是否满了
public boolean isFull() {
return (end == maxSize - 1);
}
// 返回有效元素大小
public int size() {
return elems;
}
}
public class TestQueue {
public static void main(String[] args) {
Queue queue = new Queue(5);
System.out.println(queue.isEmpty());
queue.insert(50);
queue.insert(20);
queue.insert(10);
queue.insert(2);
queue.insert(1);
System.out.println(queue.isEmpty());
System.out.println(queue.isFull());
while(!queue.isEmpty()) {
System.out.println(queue.remove());
}
queue.insert(10);
}
}
下面是介绍循环队列的:
<span style="font-size:18px;">public class MyQueue {
// 数组
private long[] arr;
// 最大空间
private int maxSize;
// 有效元素大小
private int elems;
// 队头
private int font;
// 队尾
private int end;
public MyQueue(int maxSize) {
this.maxSize = maxSize;
arr = new long[maxSize];
elems = 0;
font = 0;
end = -1;
}
// 插入数据
public void insert(long value) {
if(end == maxSize - 1) {
end = -1;
}
arr[++end] = value;
elems++;
}
// 移除数据
public long remove() {
long tmp = arr[font++];
if(font == maxSize) {
font = 0;
}
elems--;
return tmp;
}
// 是否为空
public boolean isEmpty() {
return (elems == 0);
}
// 是否满了
public boolean isFull() {
return (elems == maxSize);
}
// 返回有效元素大小
public int size() {
return elems;
}
}
</span>
测试:
<span style="font-size:18px;">public class TestMyQueue {
public static void main(String[] args) {
MyQueue mq = new MyQueue(5);
System.out.println(mq.isEmpty());
mq.insert(30);
mq.insert(20);
mq.insert(10);
mq.insert(2);
mq.insert(1);
mq.insert(20);
while(!mq.isEmpty()) {
long tmp = mq.remove();
System.out.println(tmp + " ");
}
}
}
</span>