隊列 先入先出 FIFO
如果 rear 等於front 說明當前隊列是空的
如果 Q->rear + 1 整除隊列大小 == Q->front 代表隊列是滿了 沒法繼續插入了
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MaxQsize 1000
#define ERROR -1
struct Queue{
int customer[MaxQsize]; #一個一般的數組
int rear; #一個表示後的int
int front; #一個表示前的int
};
typedef struct Queue Queue; #改名字
Queue * initialQ(){
Queue *q = NULL;
q = (Queue *)malloc(sizeof(Queue));
q->rear = q->front = 0; #初始化
return q;
}
bool is_emptyq(Queue *Q){ #是否爲空
if(Q->front == Q->rear){
return true;
}else{
return false;
}
}
bool is_fullq(Queue *Q){ #是否爲滿
if((Q->rear + 1) % MaxQsize == Q->front){
return true;
}else{
return false;
}
}
void addQ(Queue *Q,int num){
if(is_fullq(Q)){
printf("滿了,無法添加\n");
return ;
}else{
Q->customer[Q->rear] = num;
Q->rear = (Q->rear+1) % MaxQsize; #加一
printf("添加了%d\n",num);
}
}
int deleteQ(Queue *Q){
int item;
if(is_emptyq(Q)){
printf("空的\n");
return ERROR;
}else{
item = Q->customer[Q->front];
Q->customer[Q->front] = 0; #刪除後 爲0
Q->front = (Q->front+1) % MaxQsize; #front加一
printf("拿出了%d\n",item);
return item;
}
}
void print_list(Queue *Q){
int i=0;
printf("[");
for(i=0;i<MaxQsize;i++){
printf("%d,",Q->customer[i]);
}
printf("]\n");
}
int main(){
int N,i,cur,flag;
Queue *q1 = initialQ();
addQ(q1,1);
addQ(q1,2);
addQ(q1,3);
addQ(q1,4);
print_list(q1);
deleteQ(q1);
print_list(q1);
addQ(q1,5);
print_list(q1);
deleteQ(q1);
print_list(q1);
addQ(q1,6);
print_list(q1);
deleteQ(q1);
print_list(q1);
deleteQ(q1);
print_list(q1);
deleteQ(q1);
deleteQ(q1);
deleteQ(q1);
return 0;
}