#include<iostream> #include<assert.h> using namespace std; template<class T> struct LinkNode{ T data; LinkNode<T> * link; LinkNode(T& item,LinkNode<T> *ptr=NULL){ data=item; link=ptr; } }; template<class T> class LinkedStack{ public: LinkNode<T> *top; LinkedStack():top(NULL){} ~LinkedStack(){ makeEmpty(); } void Push(T& x); bool Pop(T& x); bool getTop(T& x); bool IsEmpty(); int getSize(); void makeEmpty(); //friend ostream& operator<<(ostream& os,LinkedStack<T>& s); }; template<class T> bool LinkedStack<T>::IsEmpty(){ return (top==NULL)?true:false; } template<class T> void LinkedStack<T>::makeEmpty(){ LinkNode<T> *p; while(top!=NULL){ p=top; top=top->link; delete p; } } template<class T> void LinkedStack<T>::Push(T& x){ top=new LinkNode<T>(x,top); assert(top!=NULL); } template<class T> bool LinkedStack<T>::Pop(T& x){ if(IsEmpty()==true) return false; LinkNode<T> *p=top; top=top->link; x=p->data; delete p; return true; } template<class T> bool LinkedStack<T>::getTop(T& x){ if(IsEmpty()==true) return false; x=top->data; return true; } template<class T> int LinkedStack<T>::getSize(){ LinkNode<T> *p=top; int k=0; while(top!=NULL){ top=top->link; k++; } return k-1; } /* template<class T> ostream& operator<<(ostream& os,LinkedStack<T>& s){ os<<"栈中元素个数="<<s.getSize()<<endl; LinkNode<T> *p=s.top; int i=0; while(p!=NULL){ os<<++i<<":"<<p->data<<endl; p=p->link; } } */ void main(){ LinkedStack<char> link; int num; cout<<"输入数据个数:"; cin>>num; char start=97; for(int i=0;i<num;i++){ link.Push(start); start++; } for(int i=0;i<num;i++){ link.Pop(start); cout<<start<<endl; } }
运行截图:
友元重载<<不懂为什么不行,知道的说下,谢谢。
原文链接:https://www.f2er.com/datastructure/383121.html