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