#include <iostream>
template <class T>
class Stack_Class{
public:
T* stack;
int item_quantity;
T* First_item;
int Max_quantity;
Stack_Class(int value);
~Stack_Class();
bool Add(T value);
T Pop();
int GetMax_Quantity();
bool Full();
bool Empty();
};
template <class T>
Stack_Class<T>::Stack_Class(int value){
if (value > 0){
stack = new T[value];
First_item = stack;
item_quantity = 0;
Max_quantity = value;
}
}
template <class T>
Stack_Class<T>::~Stack_Class(){
if (First_item){
delete First_item;
}
}
template<class T>
bool Stack_Class<T>::Add(T num){
if (item_quantity <Max_quantity){
stack[item_quantity++] = num;
return true;
}
else return false;
}
template<class T>
T Stack_Class<T>::Pop(){
if (!Empty()){
item_quantity--;
return stack[item_quantity];
}
return 0;
}
template<class T>
bool Stack_Class<T>::Empty(){
return (item_quantity == 0);
}
template <class T>
int Stack_Class<T>::GetMax_Quantity(){
return Max_quantity;
}
int main(){
Stack_Class<int> intStack(3);
intStack.Add(1);
intStack.Add(2);
intStack.Add(3);
int count = intStack.GetMax_Quantity();
for (int i = 0; i < count; i++){
std::cout << "Pop No: " << i << " - Elemento: " << intStack.Pop() << std::endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGUgPGNsYXNzIFQ+CmNsYXNzIFN0YWNrX0NsYXNzewpwdWJsaWM6CiAgICBUKiBzdGFjazsKICAgIGludCBpdGVtX3F1YW50aXR5OwogICAgVCogRmlyc3RfaXRlbTsKICAgIGludCBNYXhfcXVhbnRpdHk7CgogICAgU3RhY2tfQ2xhc3MoaW50IHZhbHVlKTsgCiAgICB+U3RhY2tfQ2xhc3MoKTsKICAgIGJvb2wgQWRkKFQgdmFsdWUpOwogICAgVCBQb3AoKTsKICAgIGludCBHZXRNYXhfUXVhbnRpdHkoKTsKICAgIGJvb2wgRnVsbCgpOwogICAgYm9vbCBFbXB0eSgpOyAgIAp9OwoKCnRlbXBsYXRlIDxjbGFzcyBUPgpTdGFja19DbGFzczxUPjo6U3RhY2tfQ2xhc3MoaW50IHZhbHVlKXsKICAgIGlmICh2YWx1ZSA+IDApewogICAgICAgIHN0YWNrID0gbmV3IFRbdmFsdWVdOwogICAgICAgIEZpcnN0X2l0ZW0gPSBzdGFjazsKICAgICAgICBpdGVtX3F1YW50aXR5ID0gMDsKICAgICAgICBNYXhfcXVhbnRpdHkgPSB2YWx1ZTsKICAgIH0KfQoKdGVtcGxhdGUgPGNsYXNzIFQ+ClN0YWNrX0NsYXNzPFQ+Ojp+U3RhY2tfQ2xhc3MoKXsKICAgIGlmIChGaXJzdF9pdGVtKXsKICAgICAgICBkZWxldGUgRmlyc3RfaXRlbTsKICAgIH0KfQoKCgp0ZW1wbGF0ZTxjbGFzcyBUPgpib29sIFN0YWNrX0NsYXNzPFQ+OjpBZGQoVCBudW0pewogICAgaWYgKGl0ZW1fcXVhbnRpdHkgPE1heF9xdWFudGl0eSl7ICAgICAgIAoKICAgICAgICBzdGFja1tpdGVtX3F1YW50aXR5KytdID0gbnVtOwogICAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgZWxzZSByZXR1cm4gZmFsc2U7Cn0KCnRlbXBsYXRlPGNsYXNzIFQ+ClQgU3RhY2tfQ2xhc3M8VD46OlBvcCgpewogICAgaWYgKCFFbXB0eSgpKXsKICAgICAgICBpdGVtX3F1YW50aXR5LS07CiAgICAgICAgcmV0dXJuIHN0YWNrW2l0ZW1fcXVhbnRpdHldOwogICAgfQogICAgIHJldHVybiAwOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBUPgpib29sIFN0YWNrX0NsYXNzPFQ+OjpFbXB0eSgpewogICAgcmV0dXJuIChpdGVtX3F1YW50aXR5ID09IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW50IFN0YWNrX0NsYXNzPFQ+OjpHZXRNYXhfUXVhbnRpdHkoKXsKICAgIHJldHVybiBNYXhfcXVhbnRpdHk7Cn0KCmludCBtYWluKCl7ICAgIAogICAgU3RhY2tfQ2xhc3M8aW50PiBpbnRTdGFjaygzKTsKCiAgICBpbnRTdGFjay5BZGQoMSk7CiAgICBpbnRTdGFjay5BZGQoMik7CiAgICBpbnRTdGFjay5BZGQoMyk7CiAgICBpbnQgY291bnQgPSBpbnRTdGFjay5HZXRNYXhfUXVhbnRpdHkoKTsKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspewogICAgICAgIHN0ZDo6Y291dCA8PCAiUG9wIE5vOiAiIDw8IGkgPDwgIiAtIEVsZW1lbnRvOiAiICA8PCBpbnRTdGFjay5Qb3AoKSA8PCBzdGQ6OmVuZGw7CiAgICB9CiAgICByZXR1cm4gMDsKfQo=