#pragma once typedef Complex TPELEM; class Stack { friend class StackIterador; private: int top_; int size_; TPELEM *elems_; public: Stack(int size=10) { top_ = -1; size_ = size; elems_ = new TPELEM[size_]; } ~Stack() { delete [] elems_; } void push( TPELEM i ); TPELEM top( void ); TPELEM pop( void ); int isEmpty( void ); int isFull( void ); }; inline void Stack::push(TPELEM i) { elems_[++top_] = i; } inline TPELEM Stack::top(void) { return elems_[top_]; } inline TPELEM Stack::pop(void) { return elems_[top_--]; } inline int Stack::isEmpty( void ) { return top_ == -1; } inline int Stack::isFull( void ) { return top_ == size_-1; } // class Friend class StackIterador { private: int indCorrElemPilha_; Stack* pPilha_ ; public: StackIterador( Stack *pS ) { pPilha_=pS; indCorrElemPilha_=0; } int fim( void ); TPELEM prox( void ); void percorrePilha( void ); }; inline TPELEM StackIterador::prox( void ) { return( pPilha_->elems_[indCorrElemPilha_++] ); } inline int StackIterador::fim( void ) { return( (indCorrElemPilha_ == pPilha_->top_) ? 1 : 0 ); } inline void StackIterador::percorrePilha( void ) { for( int i=pPilha_->top_; i>=0; i-- ) { cout<elems_[i]; } cout<