循环队列
/*循环队列的初始化,入列,出列,显示*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define QUEUE_INIT_SIZE 100
typedef struct queue{
int * base;
int first;
int tail;
}Queue;
int n;/*记录元素个数*/
void Init_Queue(Queue * Q)/*循环队列的初始化*/
{
n=0;
Q->base=(int *)malloc(QUEUE_INIT_SIZE * sizeof(int));
if(!Q->base)exit(0);
Q->first=Q->tail=0;
}
void Push_Queue(Queue * Q,int e)/*循环队列的入列*/
{
if(((Q->tail+1) % QUEUE_INIT_SIZE)==Q->first)exit(0);
Q->base[Q->tail]=e;
Q->tail=(Q->tail+1) % QUEUE_INIT_SIZE;
n++;
}
void Pop_Queue(Queue * Q,int * e)/*循环队列的出列*/
{
if(Q->first==Q->tail)exit(0);
*e=Q->base[Q->first];
Q->first=(Q->first+1) % QUEUE_INIT_SIZE;
n--;
}
void Print_Queue(Queue * Q)/*循环队列的显示*/
{
int i;
int q;
q=Q->first;
printf("Now queue have %d data:\n",n);
for(i=0;i<n;i++)
{
printf("%d ",Q->base[q++]);
}
printf("\n");
}
int main(int argc,char **argv)
{
int k,j;
Queue Q;
Init_Queue(&Q);
Push_Queue(&Q,12);
Push_Queue(&Q,34);
Push_Queue(&Q,56);
Print_Queue(&Q);
Pop_Queue(&Q,&k);
printf("%d is pop queue!\n",k);
Pop_Queue(&Q,&j);
printf("%d is pop queue!\n",j);
Print_Queue(&Q);
return 0;
}