00001
00002 #include "Stack.hpp"
00003
00004 Stack::Stack() {
00005 top = NULL;
00006 size = 0;
00007 }
00008
00009 Stack::Stack( DBase* item ) {
00010 top = new Link( item, NULL );
00011 size = 1;
00012 }
00013
00014 Stack::Stack( const Stack& stk ) {
00015 Link* fromCurr = stk.top;
00016 Link* toCurr = new Link( *fromCurr );
00017
00018 top = toCurr;
00019 size = 1;
00020
00021 while ( fromCurr->next != NULL ) {
00022
00023 fromCurr = fromCurr->next;
00024
00025 toCurr->next = new Link( *fromCurr );
00026
00027 toCurr = toCurr->next;
00028 size++;
00029 }
00030
00031 if ( size != stk.size ) {
00032 cout << "An error occured while copying the Stack to a new Stack\n";
00033 }
00034 }
00035
00036 void Stack::push( DBase* item ) {
00037 top = new Link( item, top );
00038 size++;
00039 }
00040
00041 DBase* Stack::pop() {
00042
00043 if ( isEmpty() )
00044 return NULL;
00045
00046 DBase* dtemp = top->element;
00047 Link* ltemp = top->next;
00048
00049 delete top;
00050 top = ltemp;
00051 size--;
00052
00053 return dtemp;
00054 }
00055
00056 void Stack::clear() {
00057 if ( isEmpty() )
00058 return;
00059
00060 while( top != NULL ) {
00061 Link* temp = top;
00062 top = top->next;
00063 delete temp;
00064 size--;
00065 }
00066
00067 assert( top == NULL );
00068 }
00069
00070 DBase& Stack::topValue() const {
00071 assert( !isEmpty() );
00072 return *top->element;
00073 }
00074
00075 void Stack::display() const {
00076 Link* curr = top;
00077
00078 if ( isEmpty() )
00079 return;
00080
00081 while ( curr->next != NULL ) {
00082
00083 curr->element->display();
00084 curr = curr->next;
00085 }
00086
00087 }
00088