數據結構----隊列

隊列 先入先出 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;

}