一、思路
一个栈的入栈操作当做入队操作,另外一个栈的出栈操作当做出队操作。
因为入栈的顺序与出栈的顺序刚好相反,所以我们需要将当做入队的那个栈中所有的元素全部出栈到另外一个栈,并且在向另一个栈入栈的时候需要先判断其是不是空栈,否则会引起顺序混乱。
二、伪代码实现
Push(S,x); //元素x入栈
Pop(S,x); //S出栈并将出栈的值赋给x
StackEmpty(S); //判断栈是否为空
StackOverflow(S); //判断栈是否为满
Enqueue; //将元素x入队
Dequeue; //出队,并将出队元素存储在x中
QueueEmpty; //判断队列是否为空
入队算法
int EnQueue(Stack &S1, Stack &S2, ElemType e)
{
if (!StackOverflow(S1))
{
Push(S1, e);
return 1;
}
if (StackOverflow(S1) && !StackEmpty(S2))
{
printf("full");
return 0;
}
if (StackOverflow(S1) && StackEmpty(S2))
{
while (!StackEmpty(S1))
{
Pop(S1, x);
Push(S2, x);
}
}
Push(S1, e);
return 1;
}
出队算法
void DeQueue(Stack &S1, Stack &S2, ElemType &x)
{
if (!StackEmpty(S2))
{
Pop(S2,x);
}
else if(StackEmpty(S1))
{
printf("empty");
}
else{
while(!StackEmpty(S1)){
Pop(S1,x);
Push(S2,x);
}
Pop(S2,x);
}
}
判空算法
int QueueEmpty(Stack &S1, Stack &S2)
{
if(StackEmpty(S1)&&StackEmpty(S2))
{
return 1;
}
else
{
return 0;
}
}