- #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;
- }
- }
运行截图:
友元重载<<不懂为什么不行,知道的说下,谢谢。