template <class f>sgStack<r>:: sqStack(int ms) ∥/构造“空”栈 if(ms<=0) cout<< ERROR: invalid MaxSize!!\n"; return; F elemsnew T Lms]; MaxSize=ms; top=-1i template <class r>bool sqstack<r>:: Push(T e) /元素e压栈 if(isFu11())//栈满(溢出) cout<<“ ERROR: overf1ow!!\n”; return false; F elem[++top]=e;//栈顶指针增1,元素进栈 return true
template <class T>sqStack<T>::sqStack(int ms) // 构造“空” 栈 { if(ms<=0) { cout<<"ERROR:invalid MaxSize!!\n"; return; } elem=new T[ms]; MaxSize=ms; top=-1; } template <class T>bool sqStack<T>::Push(T e) // 元素e压栈 { if(isFull()) // 栈满(溢出) { cout << “ ERROR: overflow !!\n” ; return false; } elem[++top]=e; // 栈顶指针增1, 元素进栈 return true; }
template< class T>b。o1 tsTack<少>::Pop() //栈顶元素出栈,被删元素存e if( isEmpty())//栈空(下溢) cout < ERROR: underflow ! \n return false; top--;//栈顶指针减1(元素出栈 return true; template <class T>bool sqStack<T>:: GetTop(T &e) /取栈顶元素 主f( isEmpty(s)//栈空(下溢) cout < ERROR: underflow !!\n"i return false e=elem[top];//元素存e,栈顶不变(元素没出栈)
template <class T>bool sqStack<T>::Pop() //栈顶元素出栈, 被删元素存e { if(isEmpty()) // 栈空(下溢) { cout << “ ERROR: underflow !!\n” ; return false; } top--; //栈顶指针减1(元素出栈) return true; } template <class T>bool sqStack<T>::GetTop(T &e) // 取栈顶元素 { if(isEmpty(S)) // 栈空(下溢) { cout << “ ERROR: underflow !!\n” ; return false; } e=elem [top]; // 元素存e, 栈顶不变(元素没出栈)
e七un七xue; template <class T>sqstack<r>:: sqStack(const sqStack<r>& ob]) //由顺序栈obj复制构造新栈 Maκsize= ob]. MaxSize;//被构造栈与obj容量应相同 elem=new f [MaxSize]; top obj top i /申请空间,栈顶指针赋值 for (int 3=0; ]<=top; 3++) elem[j=obj.eem[j];//复制数据元素
return true; } template <class T>sqStack<T>::sqStack(const sqStack<T>& obj) //由顺序栈obj复制构造新栈 { MaxSize=obj.MaxSize; //被构造栈与obj容量应相同 elem=new T [MaxSize]; top = obj.top; //申请空间, 栈顶指针赋值 for(int j=0; j<=top; j++) elem[j]= obj.elem[j]; // 复制数据元素 }
template<classr>sqstack<r>&saStack<r>:: operato r=( const sqstack<T>& origIn)//"="运算符重载 if( Maxsize!= orIgIn.Maκsize)//栈容量不等 //需释放原来的存放数据元素空间,重新为当前栈申请空间 delete[] elem; MaxSize=origin. Maxsize elem=new T [MaxSize] top= origIn.top;//栈顶指针赋值 f。r(intj=0;j=t。p;j++) elem[j]= org.1.elem[j;//复制数据元素
template<classT>sqStack<T>&sqStack<T>::operato r=(const sqStack<T>&origin) //"="运算符重载 { if(MaxSize!=origin.MaxSize) // 栈容量不等 // 需释放原来的存放数据元素空间,重新为当前栈申请空间 { delete[] elem; MaxSize=origin.MaxSize; elem=new T [MaxSize]; } top=origin.top; //栈顶指针赋值 for(int j=0; j<=top; j++) elem[j]=origin.elem[j]; //复制数据元素 }
例3.1】用栈实现程序设计语言中的子程序调用 和返回。 假设有一个主程序main和三个子程序A1,A2和A3, 其调用关系如图3.5所示。 void maino void Al void A2O void A3o A1(; A2 ) A3( 图3.5子程序调用示意图
【例3.1】用栈实现程序设计语言中的子程序调用 和返回。 假设有一个主程序main和三个子程序A1,A2和A3, 其调用关系如图3.5所示