做网站是学什么编程语言,企业信用信息查询公示系统年审,seo优化费用,上海网页制作培训机构一#xff1a;题目 二#xff1a;思路
1#xff1a;先看两个概念#xff1a; 更清晰的对比#xff1a; 理解这两张图的不同对题目的一个函数#xff08; 返回栈顶元素#xff09; 会更好做
由图可知 #xff1a;
返回栈顶函数即返回队列队尾即可
2#xff1a;题…一题目 二思路
1先看两个概念 更清晰的对比 理解这两张图的不同对题目的一个函数 返回栈顶元素 会更好做
由图可知
返回栈顶函数即返回队列队尾即可
2题目的理解
用两个队列来实现栈表面
用队列的函数来实现栈深层
用先进先出的队列函数 来实现后进先出的栈函数 本质
3思路讲解
第一步 实现栈后进先出的出栈那我们要把队列1的5出掉但是我们队列先进先出只能出1这个时候空队列队列2就派上用场了。
第二步 因为队列1只能按照1 2 3 4 5 的顺序来出队列那我们就先把1 2 3 4放进队列2中。
本质是对队列1使用出队列函数将出队列1的元素再用入队列函数入到2中
第三步 然后再用队列函数出掉5就行就达到了对原队列 1 2 3 4 5 的出5 的效果了栈的后进先出 。
全程使用的都是队列的函数最后实现了栈的效果
4思路要点
a:
不为空队列用来正常的存储数据将前n-1个元素给空队列后自己出掉最后的一个元素
为空队列在实现出栈出最后一个元素的时候空队列接收非空队列的前n-1个元素
所以我们要保证一个队列是空一个队列不为空才能够反复的进行出栈
所以两个队列会交替使用交替的成为空队列
注意
写代码之前我们得先把队列的实现 放在答题代码的前面
关于队列的实现函数博主已经在前文队列的实现一篇包懂-CSDN博客中讲解了并且已经在此题中应用且通过此题啦所以放心使用吧
三代码展示及其解释
一myStackCreate(创建栈) 和MyStack 结构体的实现 解释
1
因为要求用两个队列来实现栈所以我们创建两个队列q1q2
二myStackPush函数入栈 解释
1
push也就是入栈根据我们前面的思路我们是存储到非空队列上的 所以我们用队列实现中的判断队列是否为空函数QueueEmpty来找出非空的队列找到后就将数据存储到非空队列中。
三myStackPop函数出栈 解释
1根据前文思路要区分开空队列和非空队列QueueEmpty然后将非空队列的前n-1除了最后一个移到空队列中再将非空队列中的最后一个进行出队列就达到了出栈的效果后进先出
2也就是将非空队列中的前n-1个用出队列函数QueueFront拿出来再用入队列函数QueuePush入到空队列最后再用出队列函数(QueueFront)拿掉非空队列的最后一个 。
3达到用队列实现栈的效果。
四myStackTop函数返回栈顶元素 解释 1此函数目的是返回栈顶元素根据前文两张图的对比我们可知返回栈顶元素即返回队尾元素直接用我们队列实现中的返回队尾函数QueueBack来实现。
五myStackEmpty函数判断栈是否空 解释
1
两个队列都空了就代表栈空。
六myStackFree函数销毁栈 解释
1先销毁两个队列里的节点再销毁obj 对于队列实现的双结构体的解释
q1 q2它本质是Que而在队列实现中Que是一个结构体里面是头指针head尾指针tail和size只是随着节点增加这两个指针指向队列里的节点才能去控制队列这就不用使用哨兵位了所以并且q1,q2并不是一个队列。
为什么博主在代码中注释说的是队列呢
因为不是所有人都是用的博主队列的实现一篇包懂-CSDN博客中的实现方法所以博主注释写的模板化一点才能尽力让不同的实现队列的方法的人也能够理解。
所以具体的代码需要根据自己的实现来进行微调即可~~ 本文思维导图