两个栈实现一个队列
- 栈 : 先进后出
- 队列:先进先出
实现方法:一个栈实现队列的进,一个栈实现队列的出
typedef struct stack
{
int *data;
int top;
}stack;
void InitStack(stack *st)
{
if(st==NULL) exit(0);
st->data=(int *)malloc(sizeof(int)*INITSIZE);
st->top=0;
}
int FullStack(stack *st)
{
if(st==NULL) exit(0);
if(st->top==INITSIZE)
{
return 1;
}
return 0;
}
int EmptyStack(stack *st)
{
if(st==NULL) exit(0);
if(st->top==0)
{
return 1;
}
return 0;
}
int PushStack(stack *st,int value)
{
if(st==NULL) exit(0);
if(!FullStack(st))
{
st->data[st->top++]=value;
return 1;
}
return 0;
}
int PopStack(stack *st)
{
if(st==NULL) exit(0);
if(!EmptyStack(st))
{
st->top--;
return 1;
}
return 0;
}
int TopStack(stack *st,int *val)
{
if(st==NULL) exit(0);
{
*val=st->data[st->top-1];
return 1;
}
return 0;
}
int Destroy(stack *st)
{
if (st==NULL) exit(0);
free(st->data);
st->data=NULL;
st->top=0;
return 1;
}
typedef struct queue
{
stack stin;
stack stout;
}queue;
void InitQueue(queue *que)
{
if(que==NULL) exit(0);
InitStack(&que->stin);
InitStack(&que->stout);
}
int PushQueue(queue *stq,int q)
{
if(stq==NULL) exit(0);
if(FullStack(&stq->stin)&&!EmptyStack(&stq->stout))
{
return 0;
}
int tmp=0;
while(!EmptyStack(&stq->stin))
{
TopStack(&stq->stin,&tmp);
PushStack(&stq->stout,tmp);
PopStack(&stq->stin);
}
PushStack(&stq->stout,q);
return 1;
}
int PopQueue(queue *stq)
{
if(stq==NULL) exit(0);
if(EmptyStack(&stq->stin)&&EmptyStack(&stq->stout))
{
return 0;
}
int tmp=0;
while(!EmptyStack(&stq->stin))
{
TopStack(&stq->stin,&tmp);
PushStack(&stq->stout,tmp);
PopStack(&stq->stin);
}
PopStack(&stq->stout);
return 1;
}