《程序员代码面试指南》第一章 栈和队列(1)C++实现

本文介绍了如何设计一个特殊栈,该栈除了提供基本的push、pop操作外,还能在O(1)时间复杂度内获取栈中最小元素。通过使用两个栈,一个用于存储数据,另一个记录最小值,来满足题目要求。C++实现中,利用类构造新数据类型,包含两个私有栈对象,并实现了相关操作。虽然代码未处理异常情况,但提供了参考资料供进一步学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

设计一个带有getMin功能的栈

【题目】

构造一个特殊的栈,除了具有栈的基本功能,还能返回栈中最小元素。

【要求】

1.pop、push、getMin操作的时间复杂度都是O(1)。

2.设计的栈类型可以使用现成的栈结构

【解法】

设计两个栈,一个是基本栈,用来保存数据;另一个用来记录栈中的最小值,随着基本栈中元素pop/push而改变。

【具体实现】

1.声明

#ifndef _GETMINSTACK_
#define _GETMINSTACK_
#include <stack>
using namespace std;
class MyStack{
public:
    MyStack(){};//构造函数
    ~MyStack(){};//析构函数
    void push(int elem);
    int pop();
    int getMin();
    bool empty();
    int top();
private:
    stack<int> stackData; //私有对象不能直接访问
    stack<int> stackMin;
};
#endif // _GETMINSTACK_

2.实现

#include <iostream>
#include "MyStack.h"

using namespace std;

void MyStack::push(int elem)
{
    if(stackMin.empty())
    {
        stackMin.push(elem);
    }
    else if(elem<=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值