# include <stdio.h>
# include <stdlib.h>
typedef struct Node
{
int val;
struct Node * pNext;
}NODE, * PNODE;
typedef struct Queue
{
PNODE front;
PNODE rear;
}QUEUE,* PQUEUE;
void init(PQUEUE);
void in(PQUEUE,int);
bool out(PQUEUE,int *);
bool empty(PQUEUE);
void traverse(PQUEUE);
int main()
{
QUEUE q;
int val;
init(&q);
in(&q,1);
in(&q,2);
in(&q,3);
in(&q,4);
in(&q,5);
in(&q,6);
in(&q,7);
in(&q,8);
in(&q,9);
traverse(&q);
if (out(&q,&val))
{
printf("出队的数据为:%d\n",val);
}
if (out(&q,&val))
{
printf("出队的数据为:%d\n",val);
}
if (out(&q,&val))
{
printf("出队的数据为:%d\n",val);
}
if (out(&q,&val))
{
printf("出队的数据为:%d\n",val);
}
if (out(&q,&val))
{
printf("出队的数据为:%d\n",val);
}
traverse(&q);
return 0;
}
void init(PQUEUE pQ)
{
pQ->front=(PNODE)malloc(sizeof(NODE));
pQ->front->pNext=NULL;
pQ->rear=pQ->front;
}
void in(PQUEUE pQ,int val)
{
PNODE pNew=(PNODE)malloc(sizeof(NODE));
pNew->pNext=pQ->rear;
pQ->rear->val=val;
pQ->rear=pNew;
}
void traverse(PQUEUE pQ)
{
PNODE p=pQ->rear->pNext;
while(NULL!=p)
{
printf("%d ",p->val);
p=p->pNext;
}
printf("\n");
}
bool empty(PQUEUE pQ)
{
if (pQ->rear==pQ->front)
return true;
return false;
}
bool out(PQUEUE pQ,int * pVal)
{
PNODE p=pQ->rear;
if (empty(pQ))
return false;
else
{
while(p!=pQ->front)
{
if (p->pNext==pQ->front) //找到指向最后那个结点的地址,也就是从前面(front)数第二个元素
break;
p=p->pNext;
}
*pVal=p->pNext->val;
p->pNext=NULL;
pQ->front=p;
free(p->pNext);
return true;
}
}