当前位置: 首页 > news >正文

桂林网站制作找志合网络公司小程序商城排名

桂林网站制作找志合网络公司,小程序商城排名,百度seo刷排名网址,wordpress酷播目录 1.实现方法 过程详解 1.执行push 1->push 2->push 3->push 4 2.执行第一个pop 3.执行第二个pop 4.执行push 5->push 6 ​编辑 5.执行pop->pop->pop 代码实现 队列创建函数myQueueCreate 入队函数myQueuePush 出队函数myQueuePop 返回队列开头…

目录

1.实现方法

过程详解

1.执行push 1->push 2->push 3->push 4

2.执行第一个pop

 3.执行第二个pop

4.执行push 5->push 6

​编辑

 5.执行pop->pop->pop

代码实现

队列创建函数myQueueCreate

入队函数myQueuePush

出队函数myQueuePop

返回队列开头元素的函数myQueuePeek

判断队列是否为空的函数myQueueEmpty

队列销毁函数myQueueFree

2.提交结果


解决L19.【LeetCode笔记】用栈实现队列(方法1)遗留未讲的方法2

1.实现方法

过程详解

实现方法和方法1有较大的不同,一个栈用于入(push)数据,另一个栈(pop)用于出数据

对于"push 1->push 2->push 3->push 4->pop->pop->push 5->push 6->->pop->pop->pop"过程画图分析

初始化时两个栈都为空,随便选一个压入数据

1.执行push 1->push 2->push 3->push 4

2.执行第一个pop

按队列的性质,需要pop 1,则需要将2,3,4拿出放到另一个栈中

 3.执行第二个pop

按队列的性质,需要pop 2,此时直接对右侧栈pop

4.执行push 5->push 6

此时不能将5和6压入第二个栈,会改变队列的顺序,因此需要压入左侧的栈

 5.执行pop->pop->pop

前两个pop将3和4出队

最后一次pop需要将5和6压入右侧的栈才能以正确的顺序出队

通过分析,可以得出方法2的核心在:一个栈用于入数据,另一个栈用于出数据

代码实现

由过程详解可知,可以专门定义一个栈用于入数据,另一个栈用于出数据

typedef struct 
{ST pushst;ST popst;
} MyQueue;

队列创建函数myQueueCreate

MyQueue* myQueueCreate()
{MyQueue* obj=(MyQueue*)malloc(sizeof(MyQueue));if (obj==NULL){perror("malloc");return NULL;}STInit(&obj->pushst);STInit(&obj->popst);return obj;
}

入队函数myQueuePush

void myQueuePush(MyQueue* obj, int x) 
{STPush(&obj->pushst,x);
}

出队函数myQueuePop

这里要分类讨论,由"过程详解"可知,要判断栈popst是否为空,如果为空,需要将pushst的数据(前提是有数据,因此还要再做一次判断,即嵌套判断)全部拿过来,记录栈顶元素后再pop

int myQueuePop(MyQueue* obj) 
{if (STEmpty(&obj->popst)){while(!STEmpty(&obj->pushst)){STPush(&obj->popst,STTop(&obj->pushst));STPop(&obj->pushst);}}int front=STTop(&obj->popst);STPop(&obj->popst);return front;
}

返回队列开头元素的函数myQueuePeek

和myQueuePop类似,返回popst的栈顶元素,如果popst为空,则将需要将pushst的数据拿过来

int myQueuePeek(MyQueue* obj) 
{if (STEmpty(&obj->popst)){while(!STEmpty(&obj->pushst)){STPush(&obj->popst,STTop(&obj->pushst));STPop(&obj->pushst);}}return =STTop(&obj->popst);
}

这里myQueuePop的第二种写法,让代码更简洁

int myQueuePop(MyQueue* obj)
{int front=myQueuePeek(obj);STPop(&obj->popst);return front;
}

注意:使用myQueuePeek前要声明否则报错!!!

判断队列是否为空的函数myQueueEmpty

当两个栈都为空时,队列才为空

bool myQueueEmpty(MyQueue* obj) 
{return STEmpty(&obj->pushst) && STEmpty(&obj->popst);
}

队列销毁函数myQueueFree

malloc是怎么开辟的,那队列就是怎么销毁的

结构图

void myQueueFree(MyQueue* obj) 
{STDestory(&obj->pushst);STDestory(&obj->popst);free(obj);
}

2.提交结果

http://www.yayakq.cn/news/442408/

相关文章:

  • 微信做单子的网站源码杭州 网站建站
  • 镇江网站制作哪家便宜什么网站可以做效果图
  • 酒店招聘做的好的网站移动互联网开发工程师
  • 个人网站前置审批项哪些企业网站做的不错
  • 延边网站建设公司像美团这种网站怎么做的
  • 昆明营销网站建设图们市建设局网站
  • 平面设计资料网站企业网站建设内容 程序开发
  • 国际化网站设计作品
  • 新乡网站建设怎么用模板做网站
  • 《电子商务网站开发与管理》书籍网站的推广和宣传方式
  • 中国住房和城乡建设部网站建造师天津卓荣建设集团网站
  • 上海网站建设找摩彼如何用易语言做网站
  • 自建网站 微信网页版正规网站建设模板
  • 做代理需要自己的网站吗DANI主题wordpress
  • 网站首页设计尺寸深圳网站建设熊掌号
  • 做挂件像网站镇江唐唐网络科技有限公司
  • vs 2010 网站建设郑州一建集团公司官网
  • 承包建筑工程信息网站网页游戏在线玩链接
  • 吉林省建设监理协会网站百度网盟推广是什么
  • 网站漂浮广告效果阳江市房产信息网官网
  • 高端网站搭建公司专业动漫如何制作
  • 可以做动效的网站公司内网站建设
  • 建设部网站 挂证wordpress 主题详解
  • 个人做网站需要备案吗网站开发就业培训班
  • 石家庄网站建设就找企行家虚拟主机建网站
  • 唐山网站制作公司商城网站开发需求分析
  • 宝安自适应网站建设互联网网站建设问卷调查
  • 福州 网站建设如何查看一个网站是否备案
  • 门户网站信息流广告怎么做开发企业网站费用
  • 济南网站开发xywlcn网站建设网