#include<iostream>
#include<string>
using namespace std;
template<typename T> class LinkStack;
template<typename T>
class Node
{
public:
Node(T m_data,Node *m_next):data(m_data),next(m_next) {};
~Node() {};
friend class LinkStack<T>;
private:
Node *next;
T data;
};
template<typename T>
class LinkStack
{
public:
LinkStack():top(NULL) {};
~LinkStack() { delete top; };
void push(T m_data); //入栈
T pop(); //出栈并返回其数据
bool empty(); //判断栈是否为空
T gettop(); //获得栈顶元素
void showstack(); //显示栈内所有元素
void clear();
private:
Node<T> *top;
};
template<typename T>
void LinkStack<T>::push(T m_data)
{
top = new Node<T>(m_data, top);
}
template<typename T>
bool LinkStack<T>::empty()
{
return top == NULL;
}
template<typename T>
T LinkStack<T>::pop()
{
if (empty())
{
cout << "栈已空!" << endl;
exit(1);
}
else
{
Node<T> *p = top;
T m_data = top->data;
top = p->next;
delete p;
return m_data;
}
}
template<typename T>
T LinkStack<T>::gettop()
{
return top->data;
}
template<typename T>
void LinkStack<T>::showstack()
{
Node<T> *p = top;
if (empty())
cout << "栈已空!" << endl;
else
{
while (p!= NULL)
{
cout << p->data<<" ";
p = p->next;
}
cout << endl;
}
}
template<typename T>
void LinkStack<T>::clear()
{
top = NULL;
}
int main()
{
LinkStack<int> stack;
stack.push(1);
cout << stack.gettop() << endl;
stack.push(2);
cout << stack.gettop() << endl;
stack.push(3);
cout << stack.gettop() << endl;
stack.showstack();
cout << stack.pop() << endl;
stack.showstack();
stack.clear();
stack.showstack();
system("pause");
return 0;
}
刚开始学习数据结构,有建议或疑问请各位提出。