#define STACK_H
#include "List.h"
template < typename STACKTYPE >
class Stack : private List< STACKTYPE >
{
public:
void push( const STACKTYPE &value )
{
insertAtFront( value );
}
bool pop( const STACKTYPE &value )
{
return removeFromFront( value );
}
bool isStackEmpty() const
{
return isEmpty();
}
void printStack() const
{
print();
}
};
#endif
#ifndef STACKCOMPOSITION_H
#define STACKCOMPOSITION_H
#include "List.h"
template < typename STACKTYPE >
class Stack
{
public:
void push( const STACKTYPE &data )
{
StackList.insertAtFront( data );
}
bool pop( const STACKTYPE &data )
{
return StackList.removeFromFront( value );
}
bool isStackEmpty() const
{
return StackList.isEmpty();
}
void printStack() const
{
StackList.print();
}
private:
List< STACKTYEP > stackList;
};
#endif
#include <iostream>
using namespace std;
#include "Stack.h"
int main()
{
Stack < int > intStack;
cout << "Processing an integer Stack\n";
for( int i = 0; i < 3; i++ )
{
intStack.push( i );
intStack.printStack();
}
int popInt;
while( !intStack.isStackEmpty() )
{
intStack.pop( popInt );
cout << popInt <<" popped from stack\n";
}
Stack < double > doubleStack;
double value = 1.1;
for( int j = 0; j < 3; j++ )
{
doubleStack.push( value );
doubleStack.printStack();
value += 1.1;
}
double popDouble;
while ( !isStackEmpty() )
{
doubleStack.pop( popDouble );
cout << popDouble << "popped from stack\n";
doubleStack.printStack();
}
return 0;
}