【数据结构】·【链式栈】

#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;
	}
}

运行截图:

友元重载<<不懂为什么不行,知道的说下,谢谢。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值