#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;
}