#include<stdio.h>
#include<stdlib.h>
//所有调用函数所给予的值都是队列a的指针,即&a
typedef struct node{
  //struct node *front;
  struct node *next;
  int date;
}Link;

typedef struct _node{
  struct node *rear;
  struct node *front;
}Line;

int main()
{
  void InitQueue(Line *queue);
  void DestroyQueue(Line *queue);
  void ClearQueue(Line *stack);
  bool QueueEmpty(Line *queue);
  int QueueLength(Line *queue);
  int GetHead(Line *queue);
  void EnQueue(Line *queue,int number);
  int DeQueue(Line *queue);
  Line a;
  InitQueue(&a);
  //EnQueue(&a,6);
  //DeQueue(&a);
  //printf("%d",QueueLength(&a));
  return 0;
}

void InitQueue(Line *queue)
{
  Link *head=NULL;
  Link *tail=head;
  int number;
  do{
    scanf("%d",&number);
    if(number==-1){
      break;
    }
    Link *p=(Link *)malloc(sizeof(Link));
    p->date=number;
    p->next=NULL;
    if(!tail){
      head=p;
      tail=head;
    }
    else {
      while(tail->next)
      {
        tail=tail->next;
      }
      tail->next=p;
    }
  }while(number!=-1);
  queue->rear=tail->next;
  queue->front=head;
}
void DestroyQueue(Line *queue)
{
  Link *p=queue->front;
  Link *pt=queue->front->next;
  while(pt->next)
  {
    free(p);
    p=pt;
    pt=pt->next;
  }
  free(p);
  free(pt);
}
void ClearQueue(Line *queue)
{
  Link *p=queue->front->next;
  Link *pt=queue->front->next->next;
  while(pt->next)
  {
    free(p);
    p=pt;
    pt=pt->next;
  }
  free(p);
  free(pt);
  queue->rear=queue->front;
  queue->rear->date=-1;
}
bool QueueEmpty(Line *queue)
{
  if(queue->front)return true;
  else return false;
}
int QueueLength(Line *queue)
{
  int ans=0;
  Link *p=queue->front;
  while(p!=queue->rear)
  {
    ans++;
    p=p->next;
  }
  return ans+1;
}
int GetHead(Line *queue)
{
  int number;
  number=queue->front->date;
  //queue->front=queue->front->next;
  return number;
}
void EnQueue(Line *queue,int number)
{
  Link *p=(Link *)malloc(sizeof(Link));
  p->date=number;
  p->next=NULL;
  queue->rear->next=p;
  queue->rear=p;
}
int DeQueue(Line *queue)
{
  int number;
  number=queue->front->date;
  queue->front=queue->front->next;
  return number;
}