//
///************************************佇列的順序儲存實現********************************************/
/** * 1、佇列:一端進,另一端出;佇列由兩個引數決定,front(頭),rear(尾);
頭指標指向頭乙個元素,尾指標指向指向最後乙個元素的下一儲存單元;若陣列長度為n,當元素個數為n-1時就認為佇列已滿。r指向最後乙個空的元素空間。
出隊:頭指標往上移動,
入隊:尾指標向上移動,故:靜態佇列只能是迴圈佇列,不然出隊的元素占用的空間
永遠無法重複利用。
1):佇列的初始化:front,rear的值都是零、
2):佇列非空:front代表的是佇列的第乙個元素,rear代表的是佇列的最後乙個元素的下個儲存單元
3) :佇列空:front和rear的值相等,但不一定是零
4):動態佇列:鍊錶實現
靜態佇列:陣列實現
2、迴圈佇列:
出隊:f = (f+1) % 陣列長度
入隊:r = (r+1) % 陣列長度
+++++++++++++++++++++
+ +
+ +<----r
+ +
+++++++++++++++++++++
+ +
+ c +
+ +
+++++++++++++++++++++
+ +
+ b +
+ +
+++++++++++++++++++++
+ +
f ---> + a +
+ +
+++++++++++++++++++++
如何判斷迴圈佇列是否為空: 如果f == r 就一定為空
如何判斷佇列已滿:
1)增加乙個標誌n記錄佇列元素的個數,當n = 陣列長度-1時,就滿了。
2)if((r+1)%arr.length == f)
通常使用第二種
* **/
#include #include /**
* 迴圈佇列
*/typedef struct array_queuearrayqueue;
/** * 建立佇列
* @param limit
* @return
*/static arrayqueue * createarrayqueue(int limit)
/** * 佇列是否滿了
* @param queue
* @return
*/static int isfull(arrayqueue * queue)
return 0;
}/**
* 是否空
* @param queue
* @return
*/static int isempty(arrayqueue * queue)
return 0;
}/**
* 入隊
* @param queue
* @param data
*/static void enqueue(arrayqueue *queue, int data)
queue->data[queue->tail] = data;
queue->tail = (queue->tail+1) % (queue->limit+1);
queue->size++;
}/**
* 出隊
* @param queue
* @return
*/static int dequeue(arrayqueue * queue)
int data = queue->head;
queue->head = (queue->head+1) % (queue->limit+1);
return data;
}void freequeue(arrayqueue * queue)
int main()
for(int i = 0; i < 12; i++)
freequeue(queue);
return 0;
}
佇列 順序儲存結構,迴圈佇列
為什麼小甲魚上節課說佇列的實現上我們更願意用鏈式儲存結構來儲存?我們先按照應有的思路來考慮下如何構造佇列的順序儲存結構,然後發掘都遇到了什麼麻煩。我們假設乙個佇列有n個元素,則順序儲存的佇列需建立乙個大於n的儲存單元,並把佇列的所有元素儲存在陣列的前n個單元,陣列下標為0的一端則是隊頭。no pic...
迴圈佇列(順序佇列)的實現
迴圈佇列 順序佇列 的實現 include include include include define n 6 定義資料型別 typedef int datatype t 定義結構體 typedef structsequeue t sequeue t sq 建立乙個空的佇列 sequeue t s...
順序儲存的迴圈佇列(c 實現)
includeusing namespace std 順序儲存的迴圈佇列 const int maxsize 5 class cir queue cir queue cir queue const int temp,int num1 rear p 1 void cir queue show cout...