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

wed网站seo培训一对一

wed网站,seo培训一对一,宝塔一键迁移WordPress,网站建设研究课题最小栈 最小栈(Min Stack)是一个支持常数时间复杂度获取栈中最小元素的特殊栈数据结构。通常,标准的栈数据结构只支持在常数时间内执行入栈(push)和出栈(pop)操作,但无法在常数时间内…

最小栈

        最小栈(Min Stack)是一个支持常数时间复杂度获取栈中最小元素的特殊栈数据结构。通常,标准的栈数据结构只支持在常数时间内执行入栈(push)和出栈(pop)操作,但无法在常数时间内获取栈中的最小元素。

        最小栈通过在每个栈节点中额外存储一个当前阶段的最小值,从而实现在常数时间内获取最小元素的功能。这意味着无论栈的大小如何,都可以在常数时间内获取栈中的最小值。

最小栈的主要操作包括:

  1. 入栈(push):将元素压入栈顶,并更新当前最小值。

  2. 出栈(pop):从栈顶弹出一个元素。

  3. 获取最小值(getMin):返回栈中的最小元素,即栈顶节点的最小值。

        这样,在使用最小栈时,我们可以通过调用 getMin 操作来获取栈中的最小元素,并保持常数时间复杂度。其他与标准栈一致的操作,例如入栈和出栈,仍然可以在常数时间内执行。

        使用最小栈的一个常见场景是需要快速获取栈中的最小元素的问题,例如实现一个获取最小元素的栈(MinStack)或解决一些需要以常数时间获取最小值的算法问题。

栈结构

代码实现

#include <iostream>
#ifndef TEST_MIN_STACK_H
#define TEST_MIN_STACK_H
using namespace std;
class StackNode{public:int val;StackNode * next;StackNode(int v):val(v),next(nullptr){}
};
class MinStack {
public:MinStack() {}void push(int val) {// 将元素压入栈StackNode* n;data == nullptr ? (data = new StackNode(val)) && nullptr : (n = new StackNode(val)) && (n->next = data) && (data = n);// 更新最小值栈if (minData == nullptr) {minData = new StackNode(val);}else if(val <=  minData->val){StackNode* n = new StackNode(val);n->next = minData;minData = n;}}void pop() {if (data != nullptr) {// 取出栈顶元素int top = data->val;// 如果栈顶元素是最小值,同时从最小值栈中弹出if (minData != nullptr && top == minData->val) {StackNode* t = minData;minData = minData->next;delete t;}// 弹出栈顶元素StackNode* t = data;data = data->next;delete t;}}int top() {// if (data != nullptr) {//     // 返回栈顶元素//     return data->val;// }// // 当栈为空时,返回一个无意义的值// return INT_MIN;return data == nullptr ? INT_MIN : data->val;}int getMin() {//if (minData != nullptr) {// 返回最小值栈的栈顶元素// return minData->val;// }// 当栈为空时,返回一个无意义的值// return INT_MIN;return minData == nullptr ? INT_MIN : minData->val;}private:StackNode *data = nullptr;StackNode *minData = nullptr;
};#endif //TEST_MIN_STACK_H

实现分析

MinStack 类中有两个私有成员变量 data 和 minData,分别表示存储栈元素的栈和存储最小值的栈。这两个栈都是通过 StackNode 类的节点构成的。

下面是对 MinStack 类的各个方法进行分析:

  • void push(int val)将元素压入栈。该方法首先判断 data 是否为空,如果为空,则创建一个新的节点作为栈顶,并将 data 指向该节点;如果不为空,创建一个新节点并将其指向当前的栈顶节点,然后将 data 指向新的节点。接着,该方法更新最小值栈 minData。如果 minData 为空,直接创建一个新节点作为最小值栈的栈顶;如果不为空,并且当前值小于等于最小值栈的栈顶元素,创建一个新节点,并将其指向最小值栈的栈顶节点,然后将 minData 指向新的节点。

    • 图解:

      • StackNode* n = new StackNode(val);

      • n->next = data; 

        ​​​​​​​
      • data = n;

        ​​​​​​​
  • void pop()弹出栈顶元素。首先判断 data 是否为空,如果为空则直接返回。如果 data 不为空,则取出栈顶元素 top。如果 minData 不为空且栈顶元素 top 等于最小值栈的栈顶元素,则将最小值栈的栈顶元素弹出。接着,将栈顶元素弹出,并释放内存。

  • int top()返回栈顶元素的值。如果 data 为空,返回 INT_MIN,否则返回栈顶节点的值。

  • int getMin()返回最小值栈的栈顶元素的值。如果 minData 为空,返回 INT_MIN,否则返回最小值栈的栈顶节点的值。

        总体而言,该代码实现了一个基本的最小栈,支持在常数时间内进行入栈、出栈、获取栈顶元素和获取最小值的操作。

其他实现方式

        使用stack,vector或deque实现MinStack。把其中的data和minData属性换成对应的容器对象即可。

http://www.dinnco.com/news/63561.html

相关文章:

  • wordpress英文别名58同城关键词怎么优化
  • 网站建设验收方案品牌营销策划机构
  • 济宁北湖旅游度假区建设局网站百度网址导航主页
  • 做企业网站需要什么文件专业网店推广
  • 南京企业做网站seo关键词优化培训班
  • 如何做网站备案怎样建立一个自己的网站
  • b2b网站如何做住房和城乡建设部官网
  • 太原在线制作网站外链吧官网
  • 灵犀科技 网站建设北京seo公司司
  • 网站建设理念南京谷歌seo
  • python毕业设计做网站seo视频教程
  • 做招标网站 如何免费行情网站的推荐理由
  • 网站开场flash怎么做的网站seo内容优化
  • 特微网站首页百度招聘平台
  • 百姓畅言六安杂谈seo优化基础教程pdf
  • 淄博住房和城乡建设厅网站希爱力5mg效果真实经历
  • 阿里主机wordpress网站关键词优化wang
  • 建立一个网站的流程提高网站排名软件
  • 网站建设技术入股合同搜索词分析
  • 做自媒体挣钱的网站有哪些企业网站的搜索引擎推广与优化
  • 功能网站开发网络营销推广策划的步骤
  • vs用户登录注册网站建设代码市场推广方法
  • 做网站要租服务器吗百度大搜推广
  • 怎么建设好一个外贸购物网站sem和seo
  • 中山网站推广外包做一个企业网站需要多少钱
  • 绍兴企业免费建站泉州全网营销优化
  • 青之峰网站建设索引擎优化 seo
  • wordpress换站百度指数 移民
  • html编辑器怎么用关键词排名的排名优化
  • 电子商务网站建设方广州新一期lpr