#include#include #define Data_Type int #define Queue_Len 5 //判斷隊滿有兩種方式,一種是加以個標記,比如說size。 //另一種是浪費一塊空間,當占到N-1時,就算滿。 typedef struct Queue{ Data_Type data[Queue_Len]; int front;//隊頭元素的前一個元素 int rear;// 隊尾元素 //int size; 記錄隊列的大小 }QUEUE,* QQUEUE; void create(QQUEUE); bool isFull(QQUEUE); bool isEmpty(QQUEUE); bool add(QQUEUE,Data_Type); Data_Type out(QQUEUE); void traverse(QQUEUE); int main(void){ QUEUE queue ; create(&queue); add(&queue,1); add(&queue,2); add(&queue,3); add(&queue,4); out(&queue); add(&queue,5); out(&queue); add(&queue,6); out(&queue); add(&queue,7); traverse(&queue); } bool isFull(QQUEUE qQuere){ if((qQuere->rear+1)%Queue_Len==qQuere->front){ return true; } else{ return false; } } bool isEmpty(QQUEUE qQueue){ if(qQueue->front==qQueue->rear){ return true; }else{ return false; } } void create(QQUEUE qQueue){ qQueue->front=qQueue->rear=0; return; } void traverse(QQUEUE qQueue){ int i=qQueue->front; while(i!=qQueue->rear){ //這裡比較繞,為什麼輸出時要取余? //首先front表示的是隊首元素的前一個元素,肯定是不能輸出的。 // 如果給他+1,則可以正常輸出隊首。 //但隊尾會出問題,如果下標是隊尾下標,+1則會超出數組長度 //所以再取余, 則輸出正常 printf(%d ,qQueue->data[(i+1)%Queue_Len]); i++; i=i%Queue_Len; //換一種好理解的 //先找到下一個合法元素,找到再輸出 //所以直接輸出i 就可以了,因為i已經是要找的下一個元素。 //i++; //i=i%Queue_Len; //printf(%d ,qQueue->data[i]); } } bool add(QQUEUE qQueue,Data_Type val){ if(isFull(qQueue)){ return false; }else{ qQueue->rear = (qQueue->rear+1)%Queue_Len; qQueue->data[qQueue->rear]=val; return true; } } Data_Type out(QQUEUE qQueue){ if(isEmpty(qQueue)){ exit(-1); }else{ Data_Type val = qQueue->data[qQueue->front+1]; qQueue->front = (qQueue->front+1)%Queue_Len; return val; } }