#include <iostream>
#include <algorithm>
using namespace std;
class AStack {
public:
AStack(int size=25);
AStack(const AStack&);
~AStack();
AStack& operator = (AStack s);
void push(int);
int pop();
int top();
bool isEmpty();
void flush();
private:
int capacity ;
int* a;
int index; // Index of the top most element
};
AStack::AStack(int size) : index(-1), a(new int[size]()), capacity(size) {}
AStack::AStack(const AStack& s) : capacity(s.capacity), a(new int[capacity]()), index(s.index)
{ std::copy(s.a, s.a + capacity, a); }
AStack::~AStack()
{ delete[] a; }
AStack& AStack::operator = (AStack s)
{
std::swap(capacity, s.capacity);
std::swap(a, s.a);
std::swap(index, s.index);
return *this;
}
void AStack::push(int x) {
if (index == capacity - 1) {
cout << "\n\nThe stack is full. Couldn't insert " << x << "\n\n";
return;
}
a[++index] = x;
}
int AStack::pop() {
if (index == -1) {
cout << "\n\nNo elements to pop\n\n";
return -1;
}
return a[index--];
}
int AStack::top() {
if (index == -1) {
cout << "\n\nNo elements in the Stack\n\n";
return -1;
}
return a[index];
}
bool AStack::isEmpty() {
return (index == -1);
}
void AStack::flush() {
if (index == -1) {
cout << "\n\nNo elements in the Stack to flush\n\n";
return;
}
cout << "\n\nFlushing the Stack: ";
while (index != -1) {
cout << a[index--] << " ";
}
cout << endl << endl;
}
AStack& reverseStack(AStack& s1) {
AStack s2;
while (!s1.isEmpty()) {
s2.push(s1.pop());
}
s1 = s2;
return s1;
}
int main() {
AStack s1;
s1.push(1);
s1.push(2);
s1.push(3);
s1.push(4);
s1.push(5);
s1 = reverseStack(s1);
cout << "\n\nFlushing s1:\n";
s1.flush();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNsYXNzIEFTdGFjayB7CnB1YmxpYzoKICAgIEFTdGFjayhpbnQgc2l6ZT0yNSk7CiAgICBBU3RhY2soY29uc3QgQVN0YWNrJik7CiAgICB+QVN0YWNrKCk7CiAgICBBU3RhY2smIG9wZXJhdG9yID0gKEFTdGFjayBzKTsKICAgIHZvaWQgcHVzaChpbnQpOwogICAgaW50IHBvcCgpOwogICAgaW50IHRvcCgpOwogICAgYm9vbCBpc0VtcHR5KCk7CiAgICB2b2lkIGZsdXNoKCk7Cgpwcml2YXRlOgogICAgaW50IGNhcGFjaXR5IDsKICAgIGludCogYTsKICAgIGludCBpbmRleDsgLy8gSW5kZXggb2YgdGhlIHRvcCBtb3N0IGVsZW1lbnQKfTsKCgpBU3RhY2s6OkFTdGFjayhpbnQgc2l6ZSkgOiBpbmRleCgtMSksIGEobmV3IGludFtzaXplXSgpKSwgY2FwYWNpdHkoc2l6ZSkge30KCkFTdGFjazo6QVN0YWNrKGNvbnN0IEFTdGFjayYgcykgOiBjYXBhY2l0eShzLmNhcGFjaXR5KSwgYShuZXcgaW50W2NhcGFjaXR5XSgpKSwgaW5kZXgocy5pbmRleCkKeyAgICBzdGQ6OmNvcHkocy5hLCBzLmEgKyBjYXBhY2l0eSwgYSk7ICB9CgpBU3RhY2s6On5BU3RhY2soKSAKeyBkZWxldGVbXSBhOyB9CgpBU3RhY2smIEFTdGFjazo6b3BlcmF0b3IgPSAoQVN0YWNrIHMpIAp7CiAgICBzdGQ6OnN3YXAoY2FwYWNpdHksIHMuY2FwYWNpdHkpOwogICAgc3RkOjpzd2FwKGEsIHMuYSk7CiAgICBzdGQ6OnN3YXAoaW5kZXgsIHMuaW5kZXgpOwogICAgcmV0dXJuICp0aGlzOwp9Cgp2b2lkIEFTdGFjazo6cHVzaChpbnQgeCkgewogICAgaWYgKGluZGV4ID09IGNhcGFjaXR5IC0gMSkgewogICAgICAgIGNvdXQgPDwgIlxuXG5UaGUgc3RhY2sgaXMgZnVsbC4gQ291bGRuJ3QgaW5zZXJ0ICIgPDwgeCA8PCAiXG5cbiI7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgYVsrK2luZGV4XSA9IHg7Cn0KCmludCBBU3RhY2s6OnBvcCgpIHsKICAgIGlmIChpbmRleCA9PSAtMSkgewogICAgICAgIGNvdXQgPDwgIlxuXG5ObyBlbGVtZW50cyB0byBwb3BcblxuIjsKICAgICAgICByZXR1cm4gLTE7CiAgICB9CiAgICByZXR1cm4gYVtpbmRleC0tXTsKfQoKaW50IEFTdGFjazo6dG9wKCkgewogICAgaWYgKGluZGV4ID09IC0xKSB7CiAgICAgICAgY291dCA8PCAiXG5cbk5vIGVsZW1lbnRzIGluIHRoZSBTdGFja1xuXG4iOwogICAgICAgIHJldHVybiAtMTsKICAgIH0KICAgIHJldHVybiBhW2luZGV4XTsKfQoKYm9vbCBBU3RhY2s6OmlzRW1wdHkoKSB7CiAgICByZXR1cm4gKGluZGV4ID09IC0xKTsKfQoKdm9pZCBBU3RhY2s6OmZsdXNoKCkgewogICAgaWYgKGluZGV4ID09IC0xKSB7CiAgICAgICAgY291dCA8PCAiXG5cbk5vIGVsZW1lbnRzIGluIHRoZSBTdGFjayB0byBmbHVzaFxuXG4iOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIGNvdXQgPDwgIlxuXG5GbHVzaGluZyB0aGUgU3RhY2s6ICAiOwogICAgd2hpbGUgKGluZGV4ICE9IC0xKSB7CiAgICAgICAgY291dCA8PCBhW2luZGV4LS1dIDw8ICIgICI7CiAgICB9CiAgICBjb3V0IDw8IGVuZGwgPDwgZW5kbDsKfQoKQVN0YWNrJiByZXZlcnNlU3RhY2soQVN0YWNrJiBzMSkgewogICAgQVN0YWNrIHMyOwogICAgd2hpbGUgKCFzMS5pc0VtcHR5KCkpIHsKICAgICAgICBzMi5wdXNoKHMxLnBvcCgpKTsKICAgIH0KICAgIHMxID0gczI7CiAgICByZXR1cm4gczE7Cn0KCmludCBtYWluKCkgewogICAgQVN0YWNrIHMxOwogICAgczEucHVzaCgxKTsKICAgIHMxLnB1c2goMik7CiAgICBzMS5wdXNoKDMpOwogICAgczEucHVzaCg0KTsKICAgIHMxLnB1c2goNSk7CiAgICBzMSA9IHJldmVyc2VTdGFjayhzMSk7CiAgICBjb3V0IDw8ICJcblxuRmx1c2hpbmcgczE6XG4iOwogICAgczEuZmx1c2goKTsKICAgIHJldHVybiAwOwp9Cg==