題目
在回圈佇列中設定一個回圈佇列flag,當flag=rear且flag=0時為隊空,當flag=1,flag=rear時隊滿,請撰寫相應的入隊和出隊演算法,(假設隊頭元素指向隊頭位置的前一個元素),
static int QueueSize = 100;
static class CirQueue{
int[] data = new int[QueueSize];
int front,rear; //隊頭隊尾指標
int flag;
public void Enqueue(int x);
public int DeQueue();
}
分析
- 佇列的性質:先進先出,后進后出,
- 封裝陣列進行佇列實作
- 回圈佇列
Java實作
static int QueueSize = 100;
static class CirQueue{
int[] data = new int[QueueSize];
int front,rear; //隊頭隊尾指標
int flag;
public void Enqueue(int x){
if (flag != 1){
data[rear] = x;
if (rear+1 == QueueSize) rear = 0;
else rear++;
if (front == rear) flag = 1;
else flag = -1;
}
if (flag == 1){
System.out.println("佇列以滿");
}
}
public int DeQueue(){
if (flag != 0){
int num = data[front];
data[front] = 0;
if (front+1 == QueueSize) front = 0;
else front++;
if (front == rear) flag = 0;
else flag = -1;
return num;
}
if (flag == 0) {
System.out.println("佇列以空");
}
return 0;
}
};
測驗
public static void main(String[] args){
CirQueue queue = new CirQueue();
//入隊測驗
int k = 0;
while (queue.flag != 1) {
queue.Enqueue(k++);
System.out.println("頭節點:"+queue.front);
System.out.println("尾節點:"+queue.rear);
}
//滿佇列測驗
for (int i = 101; i < 110; i++) {
queue.Enqueue(i);
}
//出隊測驗
for (int i = 0; i < 10; i++) {
System.out.println("出隊元素:"+queue.DeQueue());
System.out.println("頭節點:"+queue.front);
System.out.println("尾節點:"+queue.rear);
}
//空隊測驗
for (int i = 0; i < 100 ; i++) {
System.out.println("出隊元素:"+queue.DeQueue());
System.out.println("頭節點:"+queue.front);
System.out.println("尾節點:"+queue.rear);
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/218608.html
標籤:其他
下一篇:記一次簡單域滲透(part 1)
