首先說一下隊列的特性,和棧正好相反
是先進先出,也就是說誰先進來先出去的就是誰
這次要實現的是一個簡單的隊列,有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();
}
}
}
我這裏實現是有一些問題得,頭尾指針可能可以加一 更好理解一些,還有最大元素數量,這裏可以通過一個構造方法去動態控制,不過我只是爲了理解思想,這些不重要了。
歡迎討論~