首页 > 编程知识 正文

两个栈实现一个队列c语言,数据结构栈和队列总结

时间:2023-05-05 16:54:07 阅读:26850 作者:1973

初始化使用两个堆栈实现单个队列规则结构来定义队列的操作,启动入队以清空和销毁只读接口

规则

http://www.Sina.com/:继续将数据插入堆栈1 http://www.Sina.com/:1.如果堆栈2不空闲,则从堆栈2中取出;

2 .如果堆栈2为空,则将堆栈1的数据导入堆栈2中,然后从堆栈2中提取堆栈。

示例:

堆栈是先进先出,队列是先进先出。

如图所示,将数据1、2和3插入堆栈1,并将堆栈1的数据输出到堆栈2。 此时,按3、2、1插入堆栈2,从堆栈2输出数据,维持先进先出的原则。

总体来看,数据以1、2、3进入,又以1、2、3出来,

两个堆栈以这种形式实现了先进先出原则,实现了一个队列。

结构定义#include 'stack.h'//设计所需结构: two _ stack _ to _ queuetypedefstructtstqueue { stacks 1; //每次入队时从给堆栈s1进入堆栈Stack s2; //出队时,如果堆栈s2不为空,则s2输出,如果//堆栈s2为空,则将堆栈s1保存的数据导入堆栈s2,从堆栈s2向(}TSTQueue,) ptstqueue; 调用在文章的基础数据结构——堆栈中实现的头文件stack.h。

链接:

3359 blog.csdn.net/m0 _ 56257585/article/details/119914551

初始化队列操作//void my _ init _ queue (ptstqueuepq ) {assert ) pq!=nullptr; init_stack(pq-S1 ); init_stack(pq-S2; }入队并将数据插入堆栈1

//pushboolmy_push(ptstqueuepq,ElemType val ) {assert ) pq!=nullptr; 返回推送(pq-S1,val ); )出队//出队pop需要删除操作boolmy_pop(ptstqueuepq,ElemType* rtval ) assert ) pq!=nullptr; if(my_isempty(pq ) ) {返回假; }if(isempty(pq-S2 ) )/S2为nullptr ) while (! 将isempty(pq-S1 )//S1的数据全部保存到s2{int tmp; pop(pq-S1,tmp ); 推送(pq-S2、tmp ); }返回泵(pq-S2,rtval ); //S2的数据又输出(Else ) ReturnPop ) PQ-S2,rtval ); //s2不为空,直接弹出s2数据}清空销毁//清空voidmy_clear(Ptstqueuepq ) clear (pq-S1 ); clear(pq-S2; 放弃//voidmy_destroy(ptstqueuepq ) destroy (pq-S1 ); Estroy(pq-S2 ); }只读接口//top获取团队页眉元素的值,不需要删除操作boolmy_top(ptstqueuepq,ElemType* rtval ) assert ) pq!=nullptr; if(my_isempty(pq ) ) {返回假; (if ) isempty (pq-S2 ) )/S2为空) {while (! 将isempty(pq-S1 )//S1的数据全部保存到s2{int tmp; pop(pq-S1、tmp ); 推送(pq-S2、tmp ); }returntop(pq-S2,rtval ); //S2中的数据再输出(Else ) returntop (pq-S2,rtval ); 从//S2中取出数据}//其有效元素数intmy_get_length(ptstqueuepq ) int count=get _ length (pq-S1 ) get _ length (pq-pq ) //空boolmy_isempty(ptstqueuepq ) if ) isempty (pq-S1 ) isempty (pq-S2 ) ) {返回真; }返回假; }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。