
代號:
頁次:
-
二、佇列(Queue)是重要的資料結構,可使用陣列(Array)或鏈結串列(Link
List)實作。
請填寫下表,從空間使用、增刪速度上說明,以陣列(Array)或鏈結
串列(Link List)實作佇列的優缺點。(6分)
以陣列實作 鏈結串列實作
使用空間數量已知
使用空間數量未知
增加刪除元素
佇列一般從後端(back)加入(enqueue)一個新元素,從前端(front)
刪除(dequeue)一個元素。請完成下面使用陣列實作環狀佇列(Circular
Queue)程式碼(I~V)空格,使輸出為:(15 分)
enqueue data=0, enqueue data=1, Queue Full, Queue Full, Queue Full,
dequeue data=0, dequeue data=1, Queue Empty, Queue Empty, Queue Empty,
#include
#define SIZE 3
typedef enum{FALSE, TRUE} bool;
bool isEmpty(int front, int back) {
return (front== (I) );
}
bool isFull(int front, int back) {
return (( (II) )==front);
}
bool enqueue(int data[], int index[], int key) {
//front = index[0]; back = index[1];
if (isFull(index[0], index[1]))
return FALSE;
index[1] = (III) ;
data[index[1]] = key;
return (IV) ;
}
int dequeue(int data[], int index[]) {
// front = index[0]; back = index[1];
// dequeue data = index[2]
if (isEmpty(index[0], index[1]))
return FALSE;
index[0] = (V) ;
index[2] = data[index[0]];
return TRUE;
}
int main() {
int k=0;
//front=index[0]; back = index[1];
//dequeue data = index[2]
int index[3]={0, 0, 0};
int data[SIZE];
bool result;
for (int i=0; i<5; i++) {
result=enqueue(data, index, k++);
if (!result) printf("Queue Full, ");
else printf("enqueue data=%d, ", k-1);
}
printf("n");
for (int i=0; i<5; i++) {
result = dequeue(data, index);
if (!result) printf("Queue Empty, ");
else
printf("dequeue data=%d, ",index[2]);
}
return 0;
}
請說明最大優先權佇列(Max-Priority Queue)有那些基本操作,以及
如何應用於作業系統排程。(4分)