JSMS18-两个栈实现队列剑指offer07

150 阅读1分钟

利用两个栈实现队列

分析:也就是用两个后进先出,模拟先进先出。这道题其实很简单,就是先进栈A,然后把栈A的数据都出栈到B,要出栈就从B哪里pop(),A负责进,B负责出。

#include <Stdio.h>

#define MAX 1000

void Push(int *stackA,int &topA,int data)
{
	stackA[++topA]=data;
}

int Pop(int *stackA,int &topA,int *stackB,int &topB)
{
	int ret=-1;
	if(topA==topB&&topA==-1)
	{
		printf("the stack is empty!");
		return NULL;
	}
	if(topB>=0)
	{
		ret=stackB[topB--];
	}else if(topB<0)
	{
		for(;topA!=-1;)
		{
			stackB[++topB]=stackA[topA--];			
		}
		ret=stackB[topB--];
	}
	return ret;
}

void TwoStack()
{
	int stackA[MAX];
	int stackB[MAX];
	int topA,topB;
	topA=topB=-1;
	Push(stackA,topA,500);
	Push(stackA,topA,100);
	int ret1=Pop(stackA,topA,stackB,topB);
	printf("%d\n",ret1);
	int ret2=Pop(stackA,topA,stackB,topB);
	printf("%d\n",ret2);
}

int main()
{
	TwoStack();
}