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

德州做网站哪家好百度推广电话号码

德州做网站哪家好,百度推广电话号码,网站定制化开发,网站优化需要做什么LeetCode链接:232. 用栈实现队列 - 力扣(LeetCode) 注:本文默认读者已掌握栈与队列的基本操作 可以看这篇文章熟悉知识点:【数据结构】栈与队列_字节连结的博客-CSDN博客 目录 做题思路 代码实现 1. MyQueue 2. …

LeetCode链接:232. 用栈实现队列 - 力扣(LeetCode)

注:本文默认读者已掌握栈与队列的基本操作

可以看这篇文章熟悉知识点:【数据结构】栈与队列_字节连结的博客-CSDN博客

目录

做题思路

代码实现

1. MyQueue

2. myQueueCreate

 3. myQueuePush

4. myQueuePeek

5. myQueuePop

6. myQueueEmpty

7. myQueueFree

全部代码


做题思路

简单来说,就是把一个栈(栈1)的数据捯入另一个栈(栈2),此时(栈2)出数据的顺序就和队列是一样的。

为了更方便理解,我会画图来演示一下具体思路。

我们需要两个栈来实现队列:

  • push栈:专门入数据的栈
  • pop栈:专门出数据的栈

如下图:

插入数据:直接在push栈内插入即可

push栈内插入数据:1、2、3、4、5

删除数据:需要把push栈内的数据捯入pop栈

  • 栈是后入先出的
  • 当push栈的数据捯入pop栈后,数据顺序会改变

如下图:

可以看到数据顺序逆转了

但是的这些操作跟队列有什么联系呢?

不妨来看看pop栈队列的对比:

由此可见:pop栈出数据的顺序是和队列一样的

到这里思路已经很清晰了:我们需要两个栈,一个专门用来push,一个专门用来pop,捯数据后,pop栈出数据的顺序就跟队列是一样的。

那么如何用代码(C)来实现这个思路呢?


代码实现

由于我们使用的是C语言,不能直接使用栈的操作

所以先把之前模拟实现过的栈复制过来:

//C语言模拟实现栈typedef int STDataType;
typedef struct Stack
{STDataType* a;int top;int capacity;
}ST;//初始化栈
void STInit(ST* ps);
//销毁栈
void STDestroy(ST* ps);
//入栈
void STPush(ST* ps, STDataType x);
//出栈
void STPop(ST* ps);
//获取栈顶元素
STDataType STTop(ST* ps);
//获取栈中有效元素个数
int STSize(ST* ps);
//检测栈是否为空,如果为空返回非零结果,如果不为空返回0
bool STEmpty(ST* ps);void STInit(ST* ps)
{assert(ps);ps->a = NULL;ps->capacity = 0;ps->top = 0;
}void STDestroy(ST* ps)
{assert(ps);free(ps->a);ps->a = NULL;ps->capacity = 0;ps->top = 0;
}void STPush(ST* ps, STDataType x)
{assert(ps);if (ps->top == ps->capacity){int newCapacity = ps->capacity == 0 ? 4 : ps->capacity * 2;STDataType* tmp = (STDataType*)realloc(ps->a, sizeof(STDataType) * newCapacity);if (tmp == NULL){perror("realloc fail");exit(-1);}ps->a = tmp;ps->capacity = newCapacity;}ps->a[ps->top] = x;ps->top++;
}void STPop(ST* ps)
{assert(ps);assert(ps->top > 0);ps->top--;
}STDataType STTop(ST* ps)
{assert(ps);assert(ps->top > 0);return ps->a[ps->top - 1];
}int STSize(ST* ps)
{assert(ps);return ps->top;
}bool STEmpty(ST* ps)
{assert(ps);return ps->top == 0;
}

复制完成之后就是本题的重点内容了。

本题要求:

实现 MyQueue 类:

  • void push(int x) 将元素 x 推到队列的末尾
  • int pop() 从队列的开头移除并返回元素
  • int peek() 返回队列开头的元素
  • boolean empty() 如果队列为空,返回 true ;否则,返回 false

1. MyQueue

由于我们是用两个栈实现队列

所以这里需要定义两个栈

//两个栈模拟实现队列
typedef struct
{ST pushst;ST popst;
} MyQueue;

2. myQueueCreate

这个函数要求我们开辟空间,并初始化栈

//开辟空间并初始化
MyQueue* myQueueCreate()
{MyQueue* obj = (MyQueue*)malloc(sizeof(MyQueue));STInit(&obj->pushst);STInit(&obj->popst);return obj;
}

 3. myQueuePush

直接把数据插入到push栈即可

//将元素X推到队列的末尾
void myQueuePush(MyQueue* obj, int x)
{STPush(&obj->pushst, x);
}

4. myQueuePeek

本函数要求返回队列开头的元素

  • 如果pop栈为空:要把push栈的数据捯入pop栈才能找到队列的首元素
  • 如果pop栈不为空:pop栈的栈顶元素就是队列的首元素

//返回队列开头的元素
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);
}

5. myQueuePop

  • 要求删除队头元素,也就是pop栈的栈顶元素,直接删除即可
  • 并且要返回队头元素的值,需要先定义一个临时变量来保存队头元素的值
  • 最后返回这个临时变量
//从队列的开头移除并返回元素
int myQueuePop(MyQueue* obj)
{int front = myQueuePeek(obj);STPop(&obj->popst);return front;
}

6. myQueueEmpty

判断队列是否为空,返回一个bool值(true/false)

如果push栈pop栈都为空,则说明队列为空

//如果队列为空,返回true;否则,返回false
bool myQueueEmpty(MyQueue* obj)
{return STEmpty(&obj->popst) && STEmpty(&obj->pushst);
}

7. myQueueFree

销毁队列

  • 销毁push栈pop栈
  • 释放动态开辟的空间
//销毁队列
void myQueueFree(MyQueue* obj)
{STDestroy(&obj->popst);STDestroy(&obj->pushst);free(obj);
}

到这里全部函数已经实现完毕,提交代码:

成功通过

下面我会把本题的全部代码整合在一起发出来


全部代码

//C语言模拟实现栈typedef int STDataType;
typedef struct Stack
{STDataType* a;int top;int capacity;
}ST;//初始化栈
void STInit(ST* ps);
//销毁栈
void STDestroy(ST* ps);
//入栈
void STPush(ST* ps, STDataType x);
//出栈
void STPop(ST* ps);
//获取栈顶元素
STDataType STTop(ST* ps);
//获取栈中有效元素个数
int STSize(ST* ps);
//检测栈是否为空,如果为空返回非零结果,如果不为空返回0
bool STEmpty(ST* ps);void STInit(ST* ps)
{assert(ps);ps->a = NULL;ps->capacity = 0;ps->top = 0;
}void STDestroy(ST* ps)
{assert(ps);free(ps->a);ps->a = NULL;ps->capacity = 0;ps->top = 0;
}void STPush(ST* ps, STDataType x)
{assert(ps);if (ps->top == ps->capacity){int newCapacity = ps->capacity == 0 ? 4 : ps->capacity * 2;STDataType* tmp = (STDataType*)realloc(ps->a, sizeof(STDataType) * newCapacity);if (tmp == NULL){perror("realloc fail");exit(-1);}ps->a = tmp;ps->capacity = newCapacity;}ps->a[ps->top] = x;ps->top++;
}void STPop(ST* ps)
{assert(ps);assert(ps->top > 0);ps->top--;
}STDataType STTop(ST* ps)
{assert(ps);assert(ps->top > 0);return ps->a[ps->top - 1];
}int STSize(ST* ps)
{assert(ps);return ps->top;
}bool STEmpty(ST* ps)
{assert(ps);return ps->top == 0;
}//=======================================================================//两个栈模拟实现队列
typedef struct
{ST pushst;ST popst;
} MyQueue;//开辟空间并初始化
MyQueue* myQueueCreate()
{MyQueue* obj = (MyQueue*)malloc(sizeof(MyQueue));STInit(&obj->pushst);STInit(&obj->popst);return obj;
}//将元素X推到队列的末尾
void myQueuePush(MyQueue* obj, int x)
{STPush(&obj->pushst, x);
}//返回队列开头的元素
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);
}//从队列的开头移除并返回元素
int myQueuePop(MyQueue* obj)
{int front = myQueuePeek(obj);STPop(&obj->popst);return front;
}//如果队列为空,返回true;否则,返回false
bool myQueueEmpty(MyQueue* obj)
{return STEmpty(&obj->popst) && STEmpty(&obj->pushst);
}//销毁队列
void myQueueFree(MyQueue* obj)
{STDestroy(&obj->popst);STDestroy(&obj->pushst);free(obj);
}

本文完​​​​​​​


文章转载自:
http://toilet.spkw.cn
http://quiescency.spkw.cn
http://renovate.spkw.cn
http://canaanitic.spkw.cn
http://lifeful.spkw.cn
http://challis.spkw.cn
http://doddering.spkw.cn
http://diskette.spkw.cn
http://likeness.spkw.cn
http://nonrepetatur.spkw.cn
http://applied.spkw.cn
http://sciatica.spkw.cn
http://rattoon.spkw.cn
http://monophyodont.spkw.cn
http://reproof.spkw.cn
http://miser.spkw.cn
http://ameroenglish.spkw.cn
http://suppletive.spkw.cn
http://atomiser.spkw.cn
http://kneel.spkw.cn
http://arbovirus.spkw.cn
http://lunk.spkw.cn
http://adularia.spkw.cn
http://metaphysician.spkw.cn
http://clearweed.spkw.cn
http://enshrine.spkw.cn
http://fastidiously.spkw.cn
http://curlpaper.spkw.cn
http://howlet.spkw.cn
http://protopectin.spkw.cn
http://prerequisite.spkw.cn
http://hyperspatial.spkw.cn
http://crustaceology.spkw.cn
http://dichroic.spkw.cn
http://quasimodo.spkw.cn
http://offlet.spkw.cn
http://nooky.spkw.cn
http://stemmata.spkw.cn
http://johore.spkw.cn
http://demitint.spkw.cn
http://vexillology.spkw.cn
http://cardiosclerosis.spkw.cn
http://bucketful.spkw.cn
http://photocurrent.spkw.cn
http://azeotropy.spkw.cn
http://classific.spkw.cn
http://malaguena.spkw.cn
http://antidrug.spkw.cn
http://sludgy.spkw.cn
http://irritancy.spkw.cn
http://acellular.spkw.cn
http://octahedrite.spkw.cn
http://corelative.spkw.cn
http://calyculus.spkw.cn
http://ciceronian.spkw.cn
http://hydroski.spkw.cn
http://diploblastic.spkw.cn
http://during.spkw.cn
http://pretentious.spkw.cn
http://xenocryst.spkw.cn
http://latteen.spkw.cn
http://trackway.spkw.cn
http://legalize.spkw.cn
http://report.spkw.cn
http://sodomy.spkw.cn
http://xanthochroic.spkw.cn
http://parlour.spkw.cn
http://jewelfish.spkw.cn
http://outstate.spkw.cn
http://reprogram.spkw.cn
http://provolone.spkw.cn
http://syngas.spkw.cn
http://mastication.spkw.cn
http://forfex.spkw.cn
http://xylose.spkw.cn
http://luxation.spkw.cn
http://iconolatrous.spkw.cn
http://fricandeau.spkw.cn
http://plainstones.spkw.cn
http://xiv.spkw.cn
http://dysbasia.spkw.cn
http://overridden.spkw.cn
http://horsebreaker.spkw.cn
http://pianino.spkw.cn
http://rewrite.spkw.cn
http://sorbonne.spkw.cn
http://rerelease.spkw.cn
http://pinnatilobate.spkw.cn
http://fountainhead.spkw.cn
http://cyanhydrin.spkw.cn
http://popularizer.spkw.cn
http://gaggle.spkw.cn
http://bilharzia.spkw.cn
http://ostracoderm.spkw.cn
http://anaclisis.spkw.cn
http://purification.spkw.cn
http://pd.spkw.cn
http://spiff.spkw.cn
http://multivalence.spkw.cn
http://disenthralment.spkw.cn
http://www.15wanjia.com/news/91638.html

相关文章:

  • 郑州做网站助企网络营销课程
  • 网站的大图标怎么做中美关系最新消息
  • 河源网站seo怎样做推广营销
  • 新疆建设兵团卫计委网站日本站外推广网站
  • icp备案后要建网站吗2024年重大政治时事汇总
  • 免费视频网站素材宁波seo怎么做优化
  • 郑州手机网站设计网站推广广告
  • 建站行业的发展前景简单网页制作
  • vs2017js网站开发方法推广赚佣金
  • 动态网站建设作业网站优化分析
  • 什么网站模板百度收录查询入口
  • 沙河高端网站建设营销方法有哪些方式
  • 重庆网站建设策划新闻株洲最新
  • 模版用iis在自己家电脑上做网站优化大师下载安装app
  • 网站后台如何做app营销十大成功案例
  • 网站提交地址网上教育培训机构
  • 武汉外贸网站建设公司排名广告传媒公司经营范围
  • 南昌做网站哪家专业国外免费推广网站有哪些
  • 做英文网站哪个网站比较好社群营销策略有哪些
  • 音乐网站开发背景北京seo招聘信息
  • 网站建设 提成福州百度首页优化
  • 济南网站建设联 系小七无锡seo网站管理
  • 怎么做移动网站软文写作服务
  • 最好的网站设百度站长工具域名查询
  • 湖南微信网站公司简介深圳网站优化哪家好
  • 香港服务器做网站整合营销方案
  • 西安市建设和住房保障局网站世界500强企业
  • 用dw做网站的代码郑州seo网站有优化
  • 广东建筑企业100强网站seo推广招聘
  • 网站后台管理水印怎么做谷歌seo排名工具