C++链式栈

#include <iostream>

using namespace std;

template <class T> class LinkStack;

template <class T>
class LinkNode
{
	friend class LinkStack<T>;
public:

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

	T data;
	LinkNode *link;

};


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

private:

	LinkNode<T> *pop;

};

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

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

	else
		return pop->data;
}

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

		pop = pop->link;

		delete del;

		return tmp;

	}
	
}

template <class T>
bool LinkStack<T>::isEmpty()
{
	return pop == 0;
}

template <class T>
void LinkStack<T>::makeEmpty()
{
	while (!isEmpty())
	{
		Pop();
	}
}

template <class T>
LinkStack<T>::~LinkStack()
{
	makeEmpty();
}


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

	LinkStack<int> 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;
}

运行结果

猜你喜欢

转载自blog.csdn.net/weixin_40204595/article/details/107499074
今日推荐