C++链式栈

#include 

using namespace std;

template  class LinkStack;

template 
class LinkNode
{
	friend class LinkStack;
public:

private:
	LinkNode(const T &dt, LinkNode *node = 0) :data(dt), link(node) {}

	T data;
	LinkNode *link;

};


template 
class LinkStack
{
public:
	LinkStack() { pop = 0; }
	void Push(const T &data);   //压栈
	T & Top();				    //获取栈顶元素
	T Pop();				    //弹出栈顶元素
	bool isEmpty();				//判断栈是否为空
	void makeEmpty();			//清空栈
	~LinkStack();

private:

	LinkNode *pop;

};

template 
void LinkStack::Push(const T &data)
{
	pop = new LinkNode(data,pop);
}

template 
T& LinkStack::Top()
{
	if (isEmpty()) throw "stack is empty";

	else
		return pop->data;
}

template 
T LinkStack::Pop()
{
	if (isEmpty()) throw "stack is empty";
	else
	{
		LinkNode  *del = pop;
		T tmp = del->data;

		pop = pop->link;

		delete del;

		return tmp;

	}
	
}

template 
bool LinkStack::isEmpty()
{
	return pop == 0;
}

template 
void LinkStack::makeEmpty()
{
	while (!isEmpty())
	{
		Pop();
	}
}

template 
LinkStack::~LinkStack()
{
	makeEmpty();
}


int main()
{
	int arry[5] = { 1,2,3,4,5 };

	LinkStack list;

	list.Push(arry[0]);
	cout << list.Top() << endl;

	list.Push(arry[1]);
	cout << list.Top() << endl;

	list.Push(arry[2]);
	cout << list.Top() << endl;

	list.Push(arry[3]);
	cout << list.Top() << endl;

	list.Push(arry[4]);
	cout << list.Top() << endl;

	cout << endl << endl;
	list.Pop();
	cout << list.Top() << endl;

	list.Pop();
	cout << list.Top() << endl;

	list.Pop();
	cout << list.Top() << endl;

	list.Pop();
	cout << list.Top() << endl;

	list.Pop();
	

	return 0;
}

运行结果

C++链式栈_第1张图片

你可能感兴趣的:(C++数据结构与算法)