/*编写程序,从键盘上输入一个整数序列a1,a2,……,an,若ai>0,则ai进队列;若ai<0,则
对头元素出队列;当ai=0时算法结束。利用循环队列完成*/
#include<stdio.h>
#define MAXSIZE 5
typedef struct
{
  int *base;
  int front;
  int rear;
}cqueue;

/*函数声明*/
void fun(void);
int enqueue();
int outqueue();
void initqueue();
void list();

/*算法*/
void fun(void)
{
  cqueue cq;
  int x;
  int i;
  scanf("%d",&x);
  while(x!=0)
  {
    if(x>0)
    {
      if(!enqueue(&cq,x))
      { printf("The cycle queue is full!\n"); break;}
    }
    else if(!outqueue(&cq,&x))
    { printf("The cycle queue is empty!\n"); break;}
    scanf("%d",&x);
  }
  list(cq);
}

/*初始化队列*/
void initqueue(cqueue *cq)
{
  cq->base=(int *)malloc(MAXSIZE*sizeof(int));
  cq->front=cq->rear=0;
}

/*入队操作*/
int enqueue(cqueue *cq,int e)
{
  if((cq->rear+1)%MAXSIZE==cq->front) return 0;
  cq->base[cq->rear]=e;
  cq->rear=(cq->rear+1)%MAXSIZE;
  return 1;
}

/*出对操作*/
int outqueue(cqueue *cq,int *e)
{
  if(cq->front==cq->rear) return 0;
  *e=cq->base[cq->front];
  cq->front=(cq->front+1)%MAXSIZE;
  return 1;
}

/*输出操作*/
void list(cqueue *cq)
{
  int i;
  i=cq->front;
  while(i!=cq->rear)
  {
    printf("%4d",cq->base[i]);
    i=(i+1)%MAXSIZE;
  }
  printf("\n");
}

main()
{
  fun();
  getch();
}


我输入0的时候它就不停的打印一大堆不知道什么东西的了。