#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct node
{
int data;
struct node *next;
}linklist_t;
typedef struct __queue__
{
struct node *front;
struct node *rear;
}linkqueue_t;
//**************************************************************
linkqueue_t * creat_linkqueue(void)
{
linkqueue_t * q = (linkqueue_t *)malloc(sizeof(linkqueue_t));
linklist_t * l = (linklist_t * )malloc(sizeof(linklist_t));
l->data = 0;
l->next = NULL;
q->front = q->rear =l;
return q;
}
//**************************************************************
int queue_is_empty(linkqueue_t *q)
{
return (q->front == q->rear)?1:0;
}
//**************************************************************
void en_queue(linkqueue_t *q,int val)
{
linklist_t *l = (linklist_t *)malloc(sizeof(linklist_t));
l->data = val;
l->next = q->rear->next;
q->rear->next = l;
q->rear = l;
}
//**************************************************************
void de_queue(linkqueue_t *q,int *val)
{
if (queue_is_empty(q))
{
printf("queue_is_empty\n");
}
else
{
linklist_t *t = q->front->next;
*val = t->data;
q->front->next = t->next;
if (t->next == NULL)
q->rear = q->front ;
free(t);
}
}
//**************************************************************
void push_linkstack(linkqueue_t *q,int val)
{
en_queue(q,val);
}
//**************************************************************
void pop_linkstack(linkqueue_t *q1,linkqueue_t *q2,int *val)
{
int size=0,k,tmp;
while(1)
{
if (q1->front->next->next != NULL)
{
de_queue(q1,&tmp);
en_queue(q2,tmp);
size++;
}
else
{
de_queue(q1,val);
break;
}
}
for(k=1;k<=size;k++)
{
de_queue(q2,&tmp);
en_queue(q1,tmp);
}
}
int main()
{
linkqueue_t *Q1 = creat_linkqueue();
linkqueue_t *Q2 = creat_linkqueue();
int val,i,n=10;
for(i=1;i<=n;i++)
{
push_linkstack(Q1,i);
printf("%-3d",i);
}
printf("\n");
for(i=0;i<n;i++)
{
pop_linkstack(Q1,Q2,&val);
printf("%-3d",val);
}
printf("\n");
return 0;
}