1、压入栈
2、出栈(删除栈顶元素)
3、返回栈顶元素
4、返回栈中最小的元素
5、返回栈中最大的元素
6、判断栈是否已满
7、判断栈是否是空的
8、清空栈
9、打印栈的元素
mystack.h
#ifndef MYSTACK_H
#define MYSTACK_H
#include <stack>
#define SIZE 100
/*
1、压入栈
2、出栈(删除栈顶元素)
3、返回栈顶元素
4、返回栈中最小的元素
5、返回栈中最大的元素
6、判断栈是否已满
7、判断栈是否是空的
8、清空栈
9、打印栈的元素
*/
class mystack
{
private:
//栈顶指针
int top;
int data[SIZE];
std::stack<int> minAVGstack;
std::stack<int> maxAVGstack;
public:
virtual ~mystack();
mystack();
void m_pop();
void m_push(int value);
int Gettop();
int MinOfStack();
int MaxOfStack();
bool isEmpty();
bool isFull();
void clearstack();
void PrintStack();
unsigned int GetLengthOfStack();
};
#endif // MYSTACK_H
mystack.cpp
#include "mystack.h"
#include <iostream>
#include <assert.h>
mystack::~mystack()
{
delete[] data;
}
mystack::mystack()
{
top = 0;
}
void mystack::m_push(int value)
{
if(!isFull())
data[top++] = value;
if(minAVGstack.size()==0 || value < minAVGstack.top())
minAVGstack.push(value);
else
minAVGstack.push(minAVGstack.top());
if(maxAVGstack.size()==0 || value>maxAVGstack.top())
maxAVGstack.push(value);
else
maxAVGstack.push(maxAVGstack.top());
}
bool mystack::isFull()
{
return top==SIZE-1;
}
bool mystack::isEmpty()
{
return top==0;
}
int mystack::Gettop()
{
return data[top-1];
}
void mystack::PrintStack()
{
while(top!=-1)
std::cout<<data[top--]<<"\t";
}
void mystack::m_pop()
{
if(!isEmpty())
--top;
}
void mystack::clearstack()
{
top = 0;
}
unsigned int mystack::GetLengthOfStack()
{
return top;
}
//获取栈的最小元素和最大元素
//分别定义一个辅助栈,分别保存主栈的最大和最小元素
//在入栈的时候,就需要判断
int mystack::MinOfStack()
{
assert(minAVGstack.size()>0);
return minAVGstack.top();
}
int mystack::MaxOfStack()
{
assert(maxAVGstack.size()>0);
return maxAVGstack.top();
}
main.cpp
#include <iostream>
#include "mystack.h"
using namespace std;
int main()
{
mystack m;
m.m_push(2);
m.m_push(3);
m.m_push(4);
m.m_push(5);
m.m_push(6);
m.m_push(7);
cout<<"\ntop = "<<m.Gettop();
cout<<"\nmin = "<<m.MinOfStack()<<"\n";
cout<<"\nmax = "<<m.MaxOfStack()<<"\n";
return 0;
}