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

河北黄骅市网站建设公司网络营销策划书

河北黄骅市网站建设,公司网络营销策划书,网站直播软件开发,佛山网站建设wantsun【Leedcode】栈和队列必备的面试题(第三期) 文章目录【Leedcode】栈和队列必备的面试题(第三期)一、题目(用两个栈实现队列)二、思路图解1.定义两个栈2.初始化两个数组栈3. 将数据放入pushST数组栈中4.删除…

【Leedcode】栈和队列必备的面试题(第三期)


文章目录

  • 【Leedcode】栈和队列必备的面试题(第三期)
  • 一、题目(用两个栈实现队列)
  • 二、思路+图解
    • 1.定义两个栈
    • 2.初始化两个数组栈
    • 3. 将数据放入pushST数组栈中
    • 4.删除队列数据
    • 4.返回队列顶的数据
    • 5.判断队列是否为空
    • 6.释放销毁队列
  • 三、整体源代码
  • 总结


一、题目(用两个栈实现队列)

Leedcode链接
在这里插入图片描述


在这里插入图片描述


在这里插入图片描述
这几个接口使我们需要实现的我会一 一实现并讲解!

二、思路+图解

注意:这里会用到很多栈和队列接口实现的一些知识,这里不再深究,如果想了解可以去下面两个博客!
栈的接口模拟实现 + 队列的接口模拟实现


做本题需要的接口和结构体声明!

代码如下(示例):

typedef int STDataType;typedef struct Stack
{STDataType* a;int top;int capacity;
}Stack;void StackInit(Stack* ps);//初始化栈
void StackDestroy(Stack* ps);//销毁栈
void StackPush(Stack* ps, STDataType x);//存放栈
void StackPop(Stack* ps);//删除栈
STDataType StackTop(Stack* ps);//获取栈顶信息
int StackSize(Stack* ps);//获取栈内数据个数
bool StackEmpty(Stack* ps);//判断栈是否为空  如果是空返回truevoid StackInit(Stack* ps)//初始化栈
{assert(ps);ps->a = NULL;ps->top = 0;ps->capacity = 0;
}void StackDestroy(Stack* ps)//销毁栈
{assert(ps);free(ps->a);ps->top = 0;ps->capacity = 0;
}void StackPush(Stack* ps, STDataType x)//存放栈数据
{assert(ps);if (ps->top == ps->capacity){//增容//capacity 如果是0 那么就定义为4  如果不是0  则capacity乘以 2   三目操作符  ? :int newCapacity = ps->capacity == 0 ? 4 : ps->capacity * 2;STDataType* tmp = realloc(ps->a, sizeof(STDataType) * newCapacity);if (tmp == NULL){printf("realloc fail");exit(-1);}//拿到新开辟的空间地址 - 更新增容后的最大空间数量  ps->a = tmp;ps->capacity = newCapacity;}ps->a[ps->top] = x;ps->top++;
}void StackPop(Stack* ps)//删除栈
{assert(ps);assert(!StackEmpty(ps));ps->top--;
}STDataType StackTop(Stack* ps)//获取栈顶信息
{assert(ps);assert(!StackEmpty(ps));return ps->a[ps->top-1];
}int StackSize(Stack* ps)//获取栈内数据个数
{assert(ps);return ps->top;
}bool StackEmpty(Stack* ps)//判断栈是否为空  如果是空返回true
{assert(ps);//if (ps->top == 0)//{//	return true;//}//else//	return false;return ps->top == 0;
}

1.定义两个栈

在这里插入图片描述

代码如下(示例):

typedef struct {Stack pushST;Stack popST;
} MyQueue;

2.初始化两个数组栈

在这里插入图片描述


在这里插入图片描述


代码如下(示例):

MyQueue* myQueueCreate() {MyQueue* q = (MyQueue*)malloc(sizeof(MyQueue));StackInit(&q->pushST);StackInit(&q->popST);return q;
}

3. 将数据放入pushST数组栈中

在这里插入图片描述

代码如下(示例):

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

4.删除队列数据

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


代码如下(示例):

int myQueuePop(MyQueue* obj) {if(StackEmpty(&obj->popST)){while(!StackEmpty(&obj->pushST)){StackPush(&obj->popST, StackTop(&obj->pushST));StackPop(&obj->pushST);}}int front = StackTop(&obj->popST);StackPop(&obj->popST);return front;
}

4.返回队列顶的数据

这里接口实现和删除队列数据很详细,这里不用删除,直接返回即可!

代码如下(示例):

int myQueuePeek(MyQueue* obj) {if(StackEmpty(&obj->popST)){while(!StackEmpty(&obj->pushST)){StackPush(&obj->popST, StackTop(&obj->pushST));StackPop(&obj->pushST);}}return StackTop(&obj->popST);
}

5.判断队列是否为空

在这里插入图片描述

代码如下(示例):

bool myQueueEmpty(MyQueue* obj) {return StackEmpty(&obj->popST) && StackEmpty(&obj->pushST);
}

6.释放销毁队列

在这里插入图片描述


在这里插入图片描述


代码如下(示例):

void myQueueFree(MyQueue* obj) {StackDestroy(&obj->popST);StackDestroy(&obj->pushST);free(obj);
}

三、整体源代码

代码如下(示例):

typedef int STDataType;typedef struct Stack
{STDataType* a;int top;int capacity;
}Stack;void StackInit(Stack* ps);//初始化栈
void StackDestroy(Stack* ps);//销毁栈
void StackPush(Stack* ps, STDataType x);//存放栈
void StackPop(Stack* ps);//删除栈
STDataType StackTop(Stack* ps);//获取栈顶信息
int StackSize(Stack* ps);//获取栈内数据个数
bool StackEmpty(Stack* ps);//判断栈是否为空  如果是空返回truevoid StackInit(Stack* ps)//初始化栈
{assert(ps);ps->a = NULL;ps->top = 0;ps->capacity = 0;
}void StackDestroy(Stack* ps)//销毁栈
{assert(ps);free(ps->a);ps->top = 0;ps->capacity = 0;
}void StackPush(Stack* ps, STDataType x)//存放栈数据
{assert(ps);if (ps->top == ps->capacity){//增容//capacity 如果是0 那么就定义为4  如果不是0  则capacity乘以 2   三目操作符  ? :int newCapacity = ps->capacity == 0 ? 4 : ps->capacity * 2;STDataType* tmp = realloc(ps->a, sizeof(STDataType) * newCapacity);if (tmp == NULL){printf("realloc fail");exit(-1);}//拿到新开辟的空间地址 - 更新增容后的最大空间数量  ps->a = tmp;ps->capacity = newCapacity;}ps->a[ps->top] = x;ps->top++;
}void StackPop(Stack* ps)//删除栈
{assert(ps);assert(!StackEmpty(ps));ps->top--;
}STDataType StackTop(Stack* ps)//获取栈顶信息
{assert(ps);assert(!StackEmpty(ps));return ps->a[ps->top-1];
}int StackSize(Stack* ps)//获取栈内数据个数
{assert(ps);return ps->top;
}bool StackEmpty(Stack* ps)//判断栈是否为空  如果是空返回true
{assert(ps);//if (ps->top == 0)//{//	return true;//}//else//	return false;return ps->top == 0;
}typedef struct {Stack pushST;Stack popST;
} MyQueue;MyQueue* myQueueCreate() {//动态开辟一个空间MyQueue* q = (MyQueue*)malloc(sizeof(MyQueue));//初始化两个数组栈StackInit(&q->pushST);StackInit(&q->popST);return q;
}void myQueuePush(MyQueue* obj, int x) {//将数据放入pushST数组栈中StackPush(&obj->pushST, x);
}int myQueuePop(MyQueue* obj) {//如果popST数组栈是空的  就从pushST数组栈中尝试取数据//然后popST数组栈顶部就是第一个元素。删除第一个元素就符合队列先进先出的逻辑了if(StackEmpty(&obj->popST)){//循环条件 只要pushST不为空就进入循环while(!StackEmpty(&obj->pushST)){//将pushST数组栈中的数据放入popst数组栈中StackPush(&obj->popST, StackTop(&obj->pushST));//数据已经拷贝到popst数组栈中  pushST数组栈中的整个数据就可以删除了StackPop(&obj->pushST);}}//将准备删除的数据放入局部变量front(这个元素是队列的头元素)int front = StackTop(&obj->popST);//删除头元素(队列删出头元素的行为)StackPop(&obj->popST);//函数要求返回整个被删除的头元素return front;
}int myQueuePeek(MyQueue* obj) {//如果popST数组栈是空的  就从pushST数组栈中尝试取数据//然后popST数组栈顶部就是第一个元素。删除第一个元素就符合队列先进先出的逻辑了if(StackEmpty(&obj->popST)){while(!StackEmpty(&obj->pushST)){StackPush(&obj->popST, StackTop(&obj->pushST));StackPop(&obj->pushST);}}//函数要求返回数据  返回popST数组栈的栈顶元素的数据return StackTop(&obj->popST);
}bool myQueueEmpty(MyQueue* obj) {//当popST 与 pushST 都是空时 return返回真true  否则为假 falsereturn StackEmpty(&obj->popST) && StackEmpty(&obj->pushST);
}void myQueueFree(MyQueue* obj) {//将popST 与 pushST 的空间先销毁 后 释放 obj指针指向的空间StackDestroy(&obj->popST);StackDestroy(&obj->pushST);free(obj);
}/*** Your MyQueue struct will be instantiated and called as such:* MyQueue* obj = myQueueCreate();* myQueuePush(obj, x);* int param_2 = myQueuePop(obj);* int param_3 = myQueuePeek(obj);* bool param_4 = myQueueEmpty(obj);* myQueueFree(obj);
*/

在这里插入图片描述


总结

以上就是今天要讲的内容,本文介绍了【Leedcode】中栈和队列必备的面试题(第三期)
如果我的博客对你有所帮助记得三连支持一下,感谢大家的支持!
在这里插入图片描述

http://www.tj-hxxt.cn/news/44175.html

相关文章:

  • 网站管理 上传模板培训机构
  • 西安网站建设官网2023年5月份病毒感染情况
  • 龙岗房价自学seo大概需要多久
  • 社区论坛系统免费开源百度怎么优化网站排名
  • 广东如何做网络推广营销策划方案seo怎么收费seo
  • 苏州做网站企业外链代发
  • 北京营销型网站建设查排名官网
  • 网站建设百度贴吧seo网络推广软件
  • 网站建设流程总结长沙网站开发制作
  • 公积金中心完善网站建设优化人员是什么意思
  • 网站开发分类站内seo内容优化包括
  • 自己做的网站如何赚钱吗网站备案是什么意思
  • php网站源码怎么在本地电脑调式厦门网站流量优化价格
  • 扬州公司做网站公司下载百度卫星导航
  • 做百度手机网站优化快如何策划一个营销方案
  • 中润建设集团有限公司网站群百度官网登录入口
  • 哪个网站在线做头像好百度快照优化培训班
  • 西安娱乐安排服务北京网站优化服务商
  • 下载网站的服务器文件b2b平台是什么意思啊
  • 广州建设六马路小学网站上海百度推广电话客服
  • 济南网站优化培训sem是什么职业岗位
  • 注册人力资源公司需要什么手续seo刷网站
  • 备案个人网站名称免费大数据分析网站
  • b2b网站介绍西安网站seo
  • 自己的网站怎么做关键词优化实时排名软件
  • 网站宣传平台网络营销课程ppt
  • 广州高端网站开发公司中国国家人事人才培训网官网
  • 做静态网站需要成本吗营销网站建设价格
  • 网站建设好做吗白度指数
  • 乳山建设局网站首页百度网盟