问题描述]
有一批整数,将它们进入以空队列(链队列)
#include <stdio.h>
#include <stdlib.h>
typedef struct Qnode
{ int data;
struct Qnode *next;
} QueueNode;
typedef struct
{QueueNode *front,*rear;
}LinkQueue;
typedef struct Snode
{ int data;
struct Snode*next;
} StackNode;
typedef StackNode *LinkStack;
LinkQueue InitQueue()
{LinkQueue q;
QueueNode *p;
p=(QueueNode*)malloc(sizeof(QueueNode));
p->next=NULL;
q.front=q.rear=p;
return(q);}
int QueueEmpty(LinkQueue q)
{ return(q.front==q.rear);
}
void AddQueue(LinkQueue *q,int e)
{ QueueNode *p;
p=(QueueNode*)malloc(sizeof(QueueNode));
p->data=e;
p->next=NULL;
q->rear->next=p;
q->rear=p;}
int DeleteQueue(LinkQueue *q)
{ int e;
QueueNode *p;
if (QueueEmpty(*q))
return(0);
else
{
p=q->front->next;
q->front->next=p->next;
e=p->data;
if(q->rear==p) q->rear=q->front;
free(p);
return(e);
} }
LinkStack StackInit()
{ LinkStack s;
s=(LinkStack)malloc(sizeof(StackNode));
s->next=0;
return s;}
int StackEmpty(LinkStack s)
{ if(s->next )
return(0);
else
return(1);}
void Push(LinkStack s, int e)
{StackNode*p;
p=(StackNode*)malloc(sizeof(StackNode));
p->data=e;
p->next=s->next;
s->next=p;}
int Pop(LinkStack s)
{ int e;
StackNode *p;
if(StackEmpty(s))
return(0);
else
{p=s->next;
s->next=p->next;
e=p->data;
free(p);
return(e);
}
}
main()
{ int x;
LinkQueue *q;
LinkStack s;
q=(LinkQueue*)malloc(sizeof(LinkQueue));
*q=InitQueue();
s=StackInit();
printf(" enter the values:");
scanf("%d",&x);
printf("enter the values:");
while(x!=0)
{Push(s,x);
AddQueue(q,x);
scanf("%d",&x);
}
printf ("the values out of the queue:/n");
while(!QueueEmpty(*q))
printf("%d ",DeleteQueue(q));
printf("/n The value out of the stack:/n");
while(!StackEmpty(s))
printf("%d ", Pop(s) );
}