这道题让我们用两个队列来实现栈我们知道队列是先入先出的栈是先入后出的。入栈1 2 3 4 出栈4 3 2 1思路及分析过程我们先按顺序入队1 2 3 4到随便一个队列里面然后出栈出栈要删除的元素是4所以我们要把1 2 3全都挪到另一个队列queue2里面再把queue1里面的4删除掉。取栈顶元素就把队尾取出来就好了取的是非空队列的队尾。此时再入栈5,5会变成栈顶如果我们把5入队到queue1这个空队列的话显然不行因为后续如果还要挪元素的话入队queue1中元素的顺序就会变成5 1 2 3显然不符合栈中元素存放的顺序所以入栈时我们选择入队到非空队列queue2中。然后执行出栈操作把5取出来就是把非空队列queue2中的前size-1个元素移到空队列queue1中然后再把5取出来。综上分析我们入栈时将元素入到非空队列里面出栈时将非空队列里面的前size-1个元素移到空队列里面再出队取栈顶元素就是取非空队列的队尾元素。清楚思路后就可以开始实现了。代码实现定义结构体我们把之前实现队列的代码直接拿过来主要来实现该题目的要求。我们要先定义一个MyStack结构体直接定义两个栈就好了。初始化然后是初始化函数MyStack* myStackCreate()我们申请一个结构体大小的空间然后调用队列的初始化函数来初始化这两个队列注意传的是队列的地址再把该结构体返回来就好了。入栈然后是入栈函数void myStackPush(MyStack* obj, int x)我们入队到非空队列就好了queue1为空则直接入到queue2中不需要区分是不是第一次入队。出栈接下来是出栈函数int myStackPop(MyStack* obj)我们可以采用假设法先设queue1为空队列emptyqueuequeue2为非空队列Noemptyqueue如果假设错误就反一下就好了将非空队列的前size-1个元素挪到空队列中然后用top接收非空队列中剩下的一个元素作为返回值再出队这个元素。挪前size-1个元素内部逻辑是这样的将非空队列的队头元素入队到空队列中然后非空队列再执行出队操作。一直到挪完非空队列前size-1个元素。其余函数然后就是取栈顶元素判断是否为空释放空间等函数大部分只需要调用队列的函数很简单就不说了直接给出来。