ZhangYiy

导航

循环队列

/*循环队列的初始化,入列,出列,显示*/
#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;
}

posted on 2009-05-08 12:58  ZhangYiy  阅读(409)  评论(0编辑  收藏  举报