数据结构----队列

队列 先入先出 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("满了,无法添加 ");
    return ;
  }else{
    Q->customer[Q->rear] = num;
    Q->rear = (Q->rear+1) % MaxQsize;            #加一
    printf("添加了%d ",num);
  }
}


int deleteQ(Queue *Q){
  int item;
  if(is_emptyq(Q)){
    printf("空的 ");
    return ERROR;
  }else{
    item = Q->customer[Q->front];

    Q->customer[Q->front] = 0;                    #删除后 为0
    Q->front = (Q->front+1) % MaxQsize;   #front加一 
    printf("拿出了%d ",item);
    return item;
   }
}


void print_list(Queue *Q){
  int i=0;
  printf("[");
  for(i=0;i<MaxQsize;i++){
    printf("%d,",Q->customer[i]);
  }
  printf("] ");
}

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;

}

原文地址:https://www.cnblogs.com/hywhyme/p/11571815.html