C语言栈与队列怎么相互实现


本篇内容介绍了“C语言栈与队列怎么相互实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!用两个队列实现栈用两个栈实现队列解题思路总结我们有两个队列:入栈数据1、 2、 3可以将数据入队列至队列一或者队列二。如何出栈?但出栈要先出1,怎么办?第一步:将队列一出队n-1个至队列二。第二步:pop队列一的最后一个元素。接下来怎么入栈呢?将元素入队至不为空的队列。怎么判断栈空?队列一和队列二都为空的情况下,栈就是空的。如何取栈顶元素?取不为空的队列尾部元素。总的来说就是,入栈时就将数据插入不为空的队列,出栈就将不为空的队列的前n-1个数据导入至另一个队列,然后pop最后一个元素。代码实现:首先我们要构造一个栈。这个栈要包含两个队列在此之前我们要准备好队列的一般接口:我这里的队列是用单链表来构建的,具体接口实现可以看我之前的文章。我们要用队列实现栈的接口:第一个接口:创建并初始化栈接口一:MyStack* myStackCreate()这样做行吗?很显然,返回局部变量的地址是不明智的,因为在函数返回时,ms开辟的空间会重新交给操作系统,再次访问就是非法操作。因此我们需要将ms开辟在堆区。参考代码:第二个接口:入栈接口二:void myStackPush(MyStack* obj, int x)入栈简单:只要将数据插入到不为空的队列即可。入栈之前我们需要判断队列满吗?不需要,因为我的队列是用单链表实现的,可以无限链接下去。如果两个队列都为空,该插入到哪个队列呢?我们可以这样做,如果队列1为空,就插入到队列2,如果不为空,就插入到队列1.参考代码:第三个接口:出栈接口三:int myStackPop(MyStack* obj) //出栈再次回顾一下我们是如何出栈的。首先我们有两个队列初始状态它们都是空的队列一:空队列二:空入栈1、2、3、4执行后队列一:空队列二:1、2、3、4出队列只能先出1,如何出4呢?把1、2、3先出给队列一执行后队列一:1、2、3队列二:4然后将4用变量记录并出队,最后返回记录4的变量。执行后队列一:1、2、3队列二:空。出队三板斧第一步:即将不为空的队列的前n-1个元素入至为空的队列。第二步:将剩下的1个元素用变量记录,然后将最后一个元素出队。第三步:返回用变量记录的元素。需要注意的是:如果栈为空,那么就返回false。参考代码:第四个接口:取栈顶元素接口四:int myStackTop(MyS免费云主机域名tack* obj) //取栈顶元素取栈顶元素之前我们需要保证栈不为空如果栈为空,返回false。取栈顶元素,即取不为空的队列的队尾元素。参考代码:第五个接口:判断栈是否为空接口五:bool myStackEmpty(MyStack* obj) //判断栈是否为空如果两个队列都是空的那么该栈就是空的。这里多提一下,栈的元素个数怎么求?栈的元素个数就是那个不为空队列的元素个数。参考代码:第六个接口:销毁栈接口六:void myStackFree(MyStack* obj) //结束栈参考代码:最后需要注意的是:调用栈为空的接口时,要先声明!!第一次入队将数据1出队操作将栈1的数据全导入栈2然后栈2进行出栈操作再次入队5、6、7直接将5、6、7入栈至栈1实际我们的对头和队尾是这样的总的来说:用两个栈实现一个队列,就得把一个栈专门入队,另一个栈用作出队。这里实现的时候我们用栈1做入队栈,栈2做出队栈。也就是说,只要将数据入队,直接放入栈1.出队就直接出栈2的数据,如果栈2为空,这将栈1的数据全部导入栈2.队列的结构体:我们需要准备的栈这里我用的是动态数组实现的栈需要提前准备栈的接口:第一个接口:创建并初始化队列同样的,需要把队列开辟在堆区,同时对栈1和栈2进行初始化。参考代码:第二个接口:入队我们把栈1做入队栈,栈2做出队栈。也就是说,只要将数据入队,直接放入栈1.出队就直接出栈2的数据,如果栈2为空,这将栈1的数据全部导入栈2.参考代码:第三个接口:出队先要判断队列是否为空,如果队列为空则返回false。其次如果栈2为空,就将栈1的数据全导入栈2.参考代码:第四个接口:取队头元素取队头元素之前,要判断队列是否为空,如果为空,则返回false队头元素即栈2的尾部元素。但如果栈2为空呢?那队列的队头元素就是栈1的头部元素。参考代码:第五个接口:判断队列是否为空队列为空,需要栈1和栈2都为空。参考代码:第六个接口:销毁队列参考代码:注意:当使用判断队列是否为空的接口时,注意是否在之前声明过了。1.用队列实现栈:我们需要用两个队列实现栈栈类是于尾插尾删队列是尾插头删第一次入栈:两个队列都为空,随便插入一个队列都可第一次出栈:出栈要出的是尾部数据,队列只能出头部数据,这是队列不能直接实现的。那么需要将不为空的队列前n-1个数据导入至为空的队列,再将最后一个元素pop掉。队列一:1、2、3、4队列二:空那么导入后队列一:4队列二:1、2、3最后pop最后一个元素队列一:空队列二:1、2、3、4再次尾插:尾插至不为空的队列即可。2.用栈实现队列我们有两个栈要求实现队列的一般接口栈一:空栈二:空第一次入队:入栈至栈一或者栈二都可,这里选择栈一。假设入队1、2、3、4栈一:1、2、3、4栈二:空出队:要先出1将栈一全部导入栈二栈一:空栈二:4、3、2、1之后入队就插入至栈一出队就pop栈二。“C语言栈与队列怎么相互实现”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注百云主机网站,小编将为大家输出更多高质量的实用文章!

相关推荐: vue子路由参数怎么传递与接收

这篇文章主要介绍“vue子路由参数怎么传递与接收”,在日常操作中,相信很多人在vue子路由参数怎么传递与接收问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue子路由参数怎么传递与接收”的疑惑有所帮助!接下来,请跟着小编一起来学…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 04/15 21:16
下一篇 04/15 21:16

相关推荐