C++|使用int数组实现一个栈类,为这个栈类增加getMaxValue方法

news/2024/11/17 7:33:14/

面试题:

使用int数组实现一个栈类,为这个栈类增加getMaxValue方法

做法:
在实现好的栈类里面,维护一个子栈,用来存储所有入栈时当过最大值的数字
比如栈:3 2 5 1 2 4
那么维护的子栈中存储的是:3 5

比如栈:3 3 2 5 1 2 4
那么维护的子栈中存储的是:3 3 5

#include<iostream>
#include<algorithm>
using namespace std;class Stack {public:int* data;int capacity;int top;Stack* maxRecord;Stack():Stack(true) {}~Stack() {if (maxRecord->is_empty()) {delete maxRecord;}delete[] data;}void push(int item) {if (top == capacity - 1) {expand_capacity();}data[++top] = item;//add maxif (maxRecord) {if (maxRecord->is_empty()) {maxRecord->push(item);}else {if (item >= maxRecord->getTop()) {maxRecord->push(item);}}}}int pop() {if (!is_empty()) {//pop maxif (maxRecord) {if (!maxRecord->is_empty()) {if (maxRecord->getTop() == getTop()) {maxRecord->pop();}}}return data[top--];}else {throw runtime_error("Stack is empty");}}int getTop() {if (!is_empty()) {return data[top];}else {throw std::runtime_error("Stack is empty");}}bool is_empty() {return top == -1;}int size() {return top + 1;}int getMaxValue() {if (maxRecord) {if (!maxRecord->is_empty()) {return maxRecord->getTop();}else {cout << "empty" << endl;}}}void expand_capacity() {int new_capacity = capacity * 2;int* new_data = new int[new_capacity];for (int i = 0; i <= top; ++i) {new_data[i] = data[i];}delete[] data;data = new_data;capacity = new_capacity;}
private:Stack(bool need) { //将有参构造隐藏capacity = 2;data = new int[capacity];top = -1;if (need) {maxRecord = new Stack(!need); //防止递归创建}else {maxRecord = nullptr;}}};int main()
{Stack stack;stack.push(2);stack.push(1);stack.push(3);stack.push(3);stack.push(2);stack.push(5);cout << "Stack size: " << stack.size() << endl;cout << "MaxValue: " << stack.getMaxValue() << endl;stack.pop();cout << "MaxValue: " << stack.getMaxValue() << endl;stack.pop();cout << "MaxValue: " << stack.getMaxValue() << endl;stack.pop();cout << "MaxValue: " << stack.getMaxValue() << endl;stack.pop();cout << "MaxValue: " << stack.getMaxValue() << endl;return 0;
}

http://www.ppmy.cn/news/1055700.html

相关文章

go-kafka

go kafka包 本文使用的是kafka-go 6.5k 这个包 其他包参考&#xff1a; 我们在细分市场中非常依赖GO和Kafka。不幸的是&#xff0c;在撰写本文时&#xff0c;Kafka的GO客户库的状态并不理想。可用选项是&#xff1a; 萨拉玛&#xff08;Sarama&#xff09; 10k&#xff0c;这…

精准高效农业作业,植保无人机显身手

中国作为农业大国&#xff0c;拥有约18亿亩的农田&#xff0c;每年都需要进行种子喷洒和农药施用等农业作业&#xff0c;对于普通农户来说&#xff0c;这是一项耗时耗力的工程&#xff0c;同时&#xff0c;人工喷洒农药极易造成农药慢性中毒&#xff0c;对农民的身体健康产生极…

FairyGUI编辑器的弹窗操作【插件】

之前在FairyGUI编辑器菜单扩展中&#xff0c;我使用了App.Alert("复制失败")来提示操作是否成功。这篇则会说一下我们可以使用的弹窗提示&#xff0c;以及做到类似资源发布成功时的“发布成功”飘窗。 打开APP的API脚本&#xff0c;可以看到有很多公开方法&#xff…

设计模式(11)观察者模式

一、概述&#xff1a; 1、定义&#xff1a;观察者模式定义了一种一对多的依赖关系&#xff0c;让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象&#xff0c;使它们能够自动更新自己。 2、结构图&#xff1a; public interface S…

设计模式二十二:策略模式(Strategy Pattern)

定义一系列算法&#xff0c;将每个算法封装成独立的对象&#xff0c;并使这些对象可互相替换。这使得在运行时可以动态地选择算法&#xff0c;而不必改变使用算法的客户端代码。策略模式的主要目标是将算法的定义与使用分离&#xff0c;使得客户端可以根据需要灵活地选择和切换…

多维时序 | MATLAB实现BiTCN-BiGRU-Attention多变量时间序列预测

多维时序 | MATLAB实现SABO-CNN-GRU-Attention多变量时间序列预测 目录 多维时序 | MATLAB实现SABO-CNN-GRU-Attention多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 多维时序 | MATLAB实现BiTCN-BiGRU-Attention多变量时间序列预测。 模型描…

使用proxman对iOS真机进行抓包

1 打开手机的safari 输入地址 http://proxy.man/ssl 2 下载证书代开设置页面&#xff0c;安装证书 设置信任证书 打开手机设置 &#xff0c;点击通用 点击关于本机、 点击证书信任设置 打开信任设置开关 4 设置手机代理 查看需要设置的代理地址 打开界面 在手机中按…

Postgresql+Postgis安装教程

Windows 下载地址 Postgresql&#xff1a;https://www.enterprisedb.com/downloads/postgres-postgresql-downloads Postgis&#xff1a;https://winnie.postgis.net/download/windows/ 我这里安装Postgresql13&#xff0c;所以对应Postgis也选择pg13版本 首先安装Postgresql…