首页 > 编程知识 正文

hashmap的默认长度,用两个栈实现队列

时间:2023-05-03 06:58:41 阅读:26856 作者:1808

使用两个堆栈实现一个队列堆栈和队列的方法首先堆栈是什么队列什么两个堆栈实现队列思想代码实现堆栈的定义堆栈、外堆栈、空判断、满判断等基础代码两个堆栈实现队列

堆栈和队列首先是什么是堆栈

堆栈:先进后出,后进先出

堆栈底部:堆栈存储空间底部的位置。 通常是一张空间的起始地址。

堆栈顶部:动态变化的位置在重新申请的空间中左右滑动,以适应堆栈入和堆栈出操作。

堆栈大小:记录总共可以存储的元素数

在堆栈初始化时创建top。 如果堆栈为空,则top指向堆栈的第一个元素

# defineinitsize5typedefstructstack { int data [ initsize ]; int top; }堆叠; 每次在堆栈中插入元素top 1时,都会调用top-1。 但是,top指向最后一个元素的下一个位置,而不是最后一个元素所在的位置。

rt -top==re-size时堆栈已满

什么是队列符合先进后出的结构队列

队列实现:从一侧插入,从另一侧插入先进先出,后进后出

队列结构指向存储空间的起始地址。 首席,首席,一般采用删除尾塞的方式。 空间的大小。

例如,空间大小为6的队列http://www.Sina.com/que-head=que-rear=0head和rear都0下标初始空队时:head仍然指向0下标

*a出队**出栈是先进的出栈,所以是a出栈,同时que-head 1指向下标http://www.Sina.com /无法判断栈是空的还是满的http://www.Sina.com

saticboolfull(queue*que ) if ) ) que-rear1) % que-size==que-head )返回真; 返回假; }两个堆栈实现队列思想

左边是堆栈a右边是堆栈b

首先,模拟左堆叠1、2、3和3个元素。

此时,在想堆栈要素1的情况下,按顺序堆栈a,按堆栈顺序放入堆栈b

此时,a堆栈为空,b堆栈为3、2、1,此时可以将1从堆栈中取出

但是,如果还需要入队操作,则在对新元素进行排队之前,必须将新元素放在堆栈a中

如果堆栈a已满,堆栈b不为空,并且无法将堆栈a中的数据导出到b堆栈,则将队列视为已满

然后,当堆栈a满且堆栈b为空时,可以将堆栈a的数据放入堆栈b中,然后将新数据插入堆栈a中。

代码实现堆栈定义# include stdio.h # include string.h # include stdlib.h # defineinitsize5typedefstructstack { int data [ initsizize ] int top; }堆叠; 堆栈、堆栈、空判定、满判定等基础代码voidinitstack (堆栈* ST ) if ) ST==null ) exit(0)0); st-top=0; } int is full (堆叠* ST ) if ) ST==null ) exit(0) 0; 返回ST-top==initsize; } intpushstack (堆栈* ST,int value ) if ) ST==null ) exit(0) 0; if(isfull ) ST ) )返回0; st-data[st-top ]=value; 返回1; } int isempty (堆叠* ST ) if ) ST==null ) exit(0) 0; 返回停止==0; } intpopstack (堆栈* ST,int* reval ) if ) ST==null ) exit(0)0); if(isempty ) ST ) ) return 0; ST-top----; *reval=st-data[st-top]; 返回1; }两个堆栈实现队列typedef struct queue {堆栈stin; 堆栈启动; (}队列; //定义队列结构stin和stout两个堆栈voidinitqueue(queue*que ) ) if ) que==null ) exit(0)0); 原位堆叠(四角钉); init stack (队列-停止);//两个堆栈intpushqueue (初始化queue * que,int value ) if ) que==null ) exit(0)0); if (is full (四足鼎立)! isempty (队列-开始) ) return 0; //stin如果堆栈已满且stout为空,则认为队列已满,无法插入数据if (is full (队列) )/stin已满,则将stin中的所有数据移动到stout (//sstin ) 推送堆栈(队列,val ); }推堆(队列,值); //之后,将新数据插入到stin堆栈中的返回1; }intpopqueue(queue*que,int* reval ) if ) que==null ) exit(0)0); if (四足鼎立)四足鼎立(四足鼎立) )返回0; //stin为空且stout为空时视为队列为空且无法退出队列if (isempty (队列) que-stout ) )/stout为空且stin不为空)//stin中的数据为stout中的while ) 推送堆栈(队列,val ); } popstack (队列,反向); 从stout出来就退出队列}

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