【C語言】佇列演示(佇列的幾個函式)
阿新 • • 發佈:2019-01-01
/*
* 佇列演示(佇列的幾個函式)
* */
typedef struct {
int arr[SIZE];
int head; //記錄最前面數字所在的下標
int tail; //記錄最後一個有效數字的下一個座標
//如果佇列裡一個數都沒有的話head=tail
} queue;
//佇列的初始化函式
void queue_init(queue *p_queue) {
p_queue->head = 0;
p_queue->tail = 0;
}
//佇列清理函式
void queue_deinit(queue *p_queue) {
p_queue->head = 0 ;
p_queue->head = 0;
}
//計算數字個數
int queue_size(const queue *p_queue) {
return (p_queue->tail - p_queue->head);
}
//判斷佇列是否為空
int queue_empty(const queue *p_queue) {
return !(p_queue->tail - p_queue->head);
}
//判斷佇列是否滿的
int queue_full(const queue *p_queue) {
return p_queue->tail >= SIZE;//tail當吧最後一個SIZE-1使用後變為SIZE,為保險要大於
}
//向佇列里加入數字
int queue_push(queue *p_queue, int val) {
if(queue_full(p_queue)) {
return 0;
}
else {
p_queue->arr[p_queue->tail] = val;
p_queue->tail++;
return 1;//表示將數字加進去了
}
}
//從佇列裡獲得數字的(會把數字從佇列裡刪除)
int queue_pop(queue *p_queue, int *p_num) {
if (queue_empty(p_queue)) {
return 0;
}
else {
*p_num = p_queue->arr[p_queue->head];//因為要刪除,所以先給
p_queue->head++;//將取過的數跳過去
return 1;
}
}
//從佇列裡獲得數字(不會把數字從佇列刪除)
int queue_front(const queue *p_queue, int *p_num) {
if(queue_enpty(p_queue)) {
return 0;
}
else {
*p_num = p_queue->arr[p_queue->head];//多次呼叫是同一個數
return 1;
}
}