Question: | 实现一个特殊的栈,在实现栈的基本功能的基础上,在实现回栈中最小元素的操作 |
Thinking:
Sketch: | 定义俩个栈。同时压入同时弹出,比如说一个data,一个min,当data栈新压入的数大于min的栈顶,重复压入min栈顶数 |
Detailed: | 分别定义data,min俩个栈, push函数中,判断min栈是否为空,传入的数是否比min栈顶元素小,如果小压入传入数值,如果传入的数大于min栈顶元素,将传入的数压入data栈, getmin函数中判断min栈是否空,返回min栈顶元素,既是当前data栈最小值。 pop函数总判断data栈是否为空,当data栈出栈的 元素等于getmin函数,即min栈顶元素。
|
具体实现如下:
#include<iostream>
#include<stack>
using namespace std;
class stackmini
{
private:
int arr[];
int arrsize;
public:
stackmini(int initsize)
{
if(initsize<0)
cout<<"is a error"<<endl;
arr=new int[initsize];
arrsize=0;
}
int peek()
{
if(arrsize==0)
cout<<"is a error"<<endl;
return arr[arrsize-1];
}
void push(int digital)
{
if(arrsize<(sizeof(arr)/sizeof(arr[0])))
cout<<"is a error"<<endl;
arr[arrsize++]=digital;
}
int pop()
{
if(arrsize==0)
cout<<"is a error"<<endl;
return arr[--arrsize];
}
};
class my_stack1
{
private:
stack<int> stackdata;
stackmini stackmin;
public:
my_stack1()
{
this.stackdata=new stack<int>();
this.stackmin=new stack<int>();
}
void push(int digital)
{
if(this.stackmin.empty())
this.stackmin.push(digital);
else if(digital<=this.getmin())
this.stackmin.push(digital);
else
this.stackdata.push(digital);
}
int getmin()
{
if(this.stackmin.empty())
cout<<"is a error"<<endl;
return this.stackmin.peek();
}
int pop()
{
if(this,stackdata.empty)
cout<<"is a error"<<endl;
int value=this.stackdata.pop();
if(value==this.getmin())
this.stackmin.pop();
return value;
}
};