循环队列

#include<stdio.h>
#include<stdlib.h>
#define MAX_SIZE 100
typedef struct{
        int data[MAX_SIZE];
 int front;
 int rear;
}SeqQueue;

void InitQueue(SeqQueue *Q){//初始化队列
 if(!Q){printf("内存分配错误 "); return;}
 Q->front=0;
 Q->rear=0;
 printf("初始化完毕 ");
}

void InQueue(SeqQueue *Q,int e){//进队列
    int pos=(Q->rear+1)%MAX_SIZE;
 if(!Q){printf("内存分配错误 "); return;}
    if(pos==Q->front){
 printf("内存已经满了 ");
 return;
 }
 Q->data[Q->rear]=e;
 Q->rear=pos;
 printf("%d已经入队 ",e);
}

void OutQueue(SeqQueue *Q){//出队列
   int e;
   if(!Q){printf("内存分配错误 "); return;}
   if(Q->front==Q->rear){printf("队列为空 ");return;}
   e=Q->data[Q->front];
   Q->front=(Q->front+1)%MAX_SIZE;
   printf("%d已经出队 ",e);
}

void IsEmpty(SeqQueue *Q){//是否为空
 if(!Q){printf("内存分配错误 "); return;} 
 if(Q->rear==Q->front){printf("队列为空 ");}
 printf("队列不为空 ");
 }
 

 void LengthQueue(SeqQueue *Q){//队列长度
      int length;
   length=((Q->rear-Q->front+MAX_SIZE)%MAX_SIZE);
   printf("队列的长度为:%d ",length);
 }
 void TraversalQueue(SeqQueue *Q){//遍历队列
  int i;
  int p=Q->front;
   if(!Q){printf("内存分配错误 "); return;}
   if(Q->front==Q->rear){printf("队列为空 ");return;}
   for(i=Q->front;i<Q->rear;i++){
    printf("%d ",Q->data[p]);
    p++;
   }
   printf(" ");
 }

 int main(void){
  SeqQueue* Q=(SeqQueue*)malloc(sizeof(SeqQueue));
  int n,a;
  int y=1;
  while(y){
   printf("*********************** ");
    printf("--1.初始化队列-- ");
    printf("--2.进队-- ");
    printf("--3.出队-- ");
    printf("--4.遍历队-- ");
    printf("--5.求队长-- ");
       printf("--6.队是否为空-- ");
    printf("--7.退出-- ");
    printf("请输入你要进行的操作: ");
    scanf("%d",&n);
     switch(n){
    case 1: InitQueue(Q);   break;
    case 2: printf("请输入你要进队的数: ");scanf("%d",&a);InQueue(Q,a); break;
    case 3: OutQueue(Q); break;
    case 4: TraversalQueue(Q); break;
    case 5: LengthQueue(Q); break;
    case 6: IsEmpty(Q); break;
    case 7:  y=0;break;
    
    
    
    }
 
 
 
 
  }
 
 
 
 
 
 
 
  return 0;
 }

原文地址:https://www.cnblogs.com/wantao/p/7828603.html