首先说一下队列的特性,和栈正好相反
是先进先出,也就是说谁先进来先出去的就是谁
这次要实现的是一个简单的队列,有add和 delete 以及打印数据的方法
其中add()方法采用尾插法,其中会考虑到空间重复利用的问题
package array;
//用数组模拟实现队列 和栈相反 栈是头插法、尾删除 队列是尾插法、头删除
public class Queue {
private int[] value = new int[20];
int head = -1; //头指针 一直跟着头部元素
int end = -1; //尾指针 一直跟着尾部元素
int max = 20; //最大元素数量
//添加元素 尾插法 当end到底 需要将底部值回推到顶部 重置head 如果此时还是满的 那就满了
public void add(int param) {
if (end >= 19) {
head = -1;
int [] temp = new int[max];
int index = 0;
for (int i : value) {
if (i != 0) {
temp[index] = i;
index++;
}
}
end = index - 1;
value = temp;
if(index >= 20) {
System.out.println("满了");
}
}else {
value[end + 1] = param;
end++;
}
}
//删除元素
public void delete() {
head++;
value[head] = 0;
}
//打印
public void print() {
for (int i : value) {
System.out.print(i + ",");
}
}
static class Demo {
public static void main(String[] args) {
Queue q = new Queue();
for (int i = 0; i < 40 ;i++) {
q.add(i);
}
for (int i = 0; i < 5 ;i++) {
q.delete();
}
for (int i = 41; i < 50 ;i++) {
q.add(i);
}
q.print();
}
}
}
我这里实现是有一些问题得,头尾指针可能可以加一 更好理解一些,还有最大元素数量,这里可以通过一个构造方法去动态控制,不过我只是为了理解思想,这些不重要了。
欢迎讨论~