#include <iostream>
using namespace std;
class Stack
{
private :
/* int *p;
int top,length;*/
public :
int * p;
int top,length;
Stack( int = 0 ) ;
~Stack( ) ;
void push( int ) ;
int pop( ) ;
int func( ) ;
void display( ) ;
void Swap( ) ;
bool isEmpty( ) ;
bool isFull( ) ;
} ;
Stack:: Stack ( int size)
{
top= - 1 ;
length= size;
if ( size == 0 )
p = 0 ;
else
p= new int [ length] ;
}
Stack:: ~Stack( )
{
if ( p! = 0 )
delete [ ] p;
}
void Stack:: push ( int elem)
{
if ( p == 0 ) //If the stack size is zero, allow user to mention it at runtime
{
cout << "Stack of zero size" << endl;
cout << "Enter a size for stack : " ;
cin >> length;
p= new int [ length] ;
}
if ( top== ( length- 1 ) ) //If the top reaches to the maximum stack size
{
cout << "\n Cannot push " << elem<< ", Stack full" << endl;
return ;
}
else
{
top++ ;
p[ top] = elem;
}
}
int Stack:: pop ( )
{
if ( p== 0 || top== - 1 )
{
cout << "Stack empty!" ;
return - 1 ;
}
int ret= p[ top] ;
top-- ;
return ret;
}
void Stack:: display ( )
{
for ( int i = 0 ; i <= top; i++ )
cout << p[ i] << " " ;
cout << endl;
}
bool Stack:: isEmpty ( )
{
if ( p== 0 || top== - 1 ) { return 1 ; }
else return 0 ;
}
bool Stack:: isFull ( )
{
if ( top== length) { return 1 ; }
else return 0 ;
}
void Swap( Stack & x) {
int sz= x.length ,mytop,mybottom;
mytop= x.top ;
x.pop ( ) ;
int tmp[ sz- 1 ] ,i= 0 ;
while ( ! x.isEmpty ( ) ) {
mybottom= x.top ;
tmp[ i++ ] = mybottom;
x.pop ( ) ;
}
Stack returnIt;
returnIt.push ( mybottom) ;
for ( i= 0 ; i<= sz- 3 ; i++ ) {
returnIt.push ( tmp[ i] ) ;
}
returnIt.push ( mytop) ;
while ( ! returnIt.isEmpty ( ) ) {
int tt= returnIt.top ;
x.push ( tt) ;
returnIt.pop ( ) ;
}
}
int main( )
{
Stack s1;
s1.push ( 1 ) ;
s1.push ( 2 ) ;
s1.push ( 3 ) ;
s1.push ( 4 ) ;
s1.push ( 5 ) ;
s1.push ( 6 ) ;
s1.push ( 7 ) ;
s1.push ( 8 ) ;
s1.push ( 9 ) ;
s1.display ( ) ;
Swap( s1) ;
s1.display ( ) ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNsYXNzIFN0YWNrCnsKcHJpdmF0ZToKIC8qICAgaW50ICpwOwogICAgaW50IHRvcCxsZW5ndGg7Ki8KCnB1YmxpYzoKICAgIGludCAqcDsKICAgIGludCB0b3AsbGVuZ3RoOwogICAgU3RhY2soaW50ID0gMCk7CiAgICB+U3RhY2soKTsKCiAgICB2b2lkIHB1c2goaW50KTsKICAgIGludCBwb3AoKTsKICAgIGludCBmdW5jKCk7CiAgICB2b2lkIGRpc3BsYXkoKTsKICAgIHZvaWQgU3dhcCgpOwogICAgYm9vbCBpc0VtcHR5KCk7CiAgICBib29sIGlzRnVsbCgpOwp9OwoKU3RhY2s6OlN0YWNrKGludCBzaXplKQp7CiAgICB0b3A9LTE7CiAgICBsZW5ndGg9c2l6ZTsKICAgIGlmKHNpemUgPT0gMCkKICAgICAgICBwID0gMDsKICAgIGVsc2UKICAgICAgICBwPW5ldyBpbnRbbGVuZ3RoXTsKfQoKU3RhY2s6On5TdGFjaygpCnsKICAgIGlmKHAhPTApCiAgICAgICAgZGVsZXRlIFtdIHA7Cn0KCnZvaWQgU3RhY2s6OnB1c2goaW50IGVsZW0pCnsKICAgIGlmKHAgPT0gMCkgICAgICAgICAgICAgICAgLy9JZiB0aGUgc3RhY2sgc2l6ZSBpcyB6ZXJvLCBhbGxvdyB1c2VyIHRvIG1lbnRpb24gaXQgYXQgcnVudGltZQogICAgewogICAgICAgIGNvdXQ8PCJTdGFjayBvZiB6ZXJvIHNpemUiPDxlbmRsOwogICAgICAgIGNvdXQ8PCJFbnRlciBhIHNpemUgZm9yIHN0YWNrIDogIjsKICAgICAgICBjaW4gPj4gbGVuZ3RoOwogICAgICAgIHA9bmV3IGludFtsZW5ndGhdOwogICAgfQogICAgaWYodG9wPT0obGVuZ3RoLTEpKSAgICAgLy9JZiB0aGUgdG9wIHJlYWNoZXMgdG8gdGhlIG1heGltdW0gc3RhY2sgc2l6ZQogICAgewogICAgICAgIGNvdXQ8PCJcbkNhbm5vdCBwdXNoICI8PGVsZW08PCIsIFN0YWNrIGZ1bGwiPDxlbmRsOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgICB0b3ArKzsKICAgICAgICBwW3RvcF09ZWxlbTsKICAgIH0KfQppbnQgU3RhY2s6OnBvcCgpCnsKICAgIGlmKHA9PTAgfHwgdG9wPT0tMSkKICAgIHsKICAgICAgICBjb3V0PDwiU3RhY2sgZW1wdHkhIjsKICAgICAgICByZXR1cm4gLTE7CiAgICB9CiAgICBpbnQgcmV0PXBbdG9wXTsKICAgIHRvcC0tOwogICAgcmV0dXJuIHJldDsKfQoKdm9pZCBTdGFjazo6ZGlzcGxheSgpCnsKICAgIGZvcihpbnQgaSA9IDA7IGkgPD0gdG9wOyBpKyspCiAgICAgICAgY291dDw8cFtpXTw8IiAiOwogICAgY291dDw8ZW5kbDsKfQoKYm9vbCBTdGFjazo6aXNFbXB0eSgpCnsKICAgIGlmKHA9PTAgfHwgdG9wPT0tMSl7cmV0dXJuIDE7fQogICAgZWxzZSByZXR1cm4gMDsKfQpib29sIFN0YWNrOjppc0Z1bGwoKQp7CiAgICBpZiAodG9wPT1sZW5ndGgpe3JldHVybiAxO30KICAgIGVsc2UgcmV0dXJuIDA7Cn0KCnZvaWQgU3dhcChTdGFjayAmeCl7CglpbnQgc3o9eC5sZW5ndGgsbXl0b3AsbXlib3R0b207CiAgICBteXRvcD14LnRvcDsKICAgIHgucG9wKCk7CiAgICBpbnQgdG1wW3N6LTFdLGk9MDsKICAgIHdoaWxlKCF4LmlzRW1wdHkoKSl7CiAgICAgICAgbXlib3R0b209eC50b3A7CiAgICAgICAgdG1wW2krK109bXlib3R0b207CiAgICAgICAgeC5wb3AoKTsKICAgICAgICB9CiAgICBTdGFjayByZXR1cm5JdDsKICAgIHJldHVybkl0LnB1c2gobXlib3R0b20pOwogICAgZm9yKGk9MDtpPD1zei0zO2krKyl7CiAgICAgICAgcmV0dXJuSXQucHVzaCh0bXBbaV0pOwogICAgICAgIH0KICAgIHJldHVybkl0LnB1c2gobXl0b3ApOwogICAgd2hpbGUoIXJldHVybkl0LmlzRW1wdHkoKSl7CiAgICAJaW50IHR0PXJldHVybkl0LnRvcDsKICAgIAl4LnB1c2godHQpOwogICAgCXJldHVybkl0LnBvcCgpOwogICAgfQoJfQppbnQgbWFpbigpCnsKICAgIFN0YWNrIHMxOwogICAgczEucHVzaCgxKTsKICAgIHMxLnB1c2goMik7CiAgICBzMS5wdXNoKDMpOwogICAgczEucHVzaCg0KTsKICAgIHMxLnB1c2goNSk7CiAgICBzMS5wdXNoKDYpOwogICAgczEucHVzaCg3KTsKICAgIHMxLnB1c2goOCk7CiAgICBzMS5wdXNoKDkpOwogICAgczEuZGlzcGxheSgpOwogICAgU3dhcChzMSk7CiAgICBzMS5kaXNwbGF5KCk7Cn0=
stdout
Stack of zero size
Enter a size for stack :
Cannot push 1, Stack full
Cannot push 2, Stack full
Cannot push 3, Stack full
Cannot push 4, Stack full
Cannot push 5, Stack full
Cannot push 6, Stack full
Cannot push 7, Stack full
Cannot push 8, Stack full
Cannot push 9, Stack full
Stack empty!Stack of zero size
Enter a size for stack :
Cannot push -1081335660, Stack full
Cannot push -1, Stack full