数据结构--链栈C++(模板类实现)
作者:
AmbitionX
,
2022-05-03 14:20:57
,
所有人可见
,
阅读 175
#include <iostream>
using namespace std;
template <typename DataType>
struct Node
{
DataType data;
Node<DataType> * next;
};
template <typename DataType>
class LinkStack
{
public:
LinkStack();
~LinkStack();
void Push(DataType x);
DataType Pop();
DataType GetTop();
void Empty();
private:
Node<DataType> * top;
};
template <typename DataType>
LinkStack<DataType>:: LinkStack()
{
top = new Node<DataType>;
top->next = nullptr;
}
template <typename DataType>
LinkStack<DataType> :: ~LinkStack( )
{
Node<DataType> *q;
while (top != NULL)
{
q = top;
top = top->next;
delete q;
}
}
template <typename DataType>
void LinkStack<DataType>:: Push(DataType x)
{
Node<DataType> * s = nullptr;
s = new Node<DataType>;
s->data = x;
s->next = top;
top = s;
}
template <typename DataType>
DataType LinkStack<DataType>:: Pop()
{
Node<DataType> * p = nullptr;
DataType x;
if (top == nullptr) throw "下溢";
x = top->data;
p = top;
top = top->next;
delete p;
return x;
}
template <typename DataType>
DataType LinkStack<DataType>:: GetTop()
{
if (top == nullptr) throw "栈顶为空";
else return top->data;
}
template <typename DataType>
void LinkStack<DataType>:: Empty()
{
if (top == nullptr) cout << "栈为空" << endl;
else cout << "栈不为空" << endl;
}
int main()
{
LinkStack<int> S{ };
cout << "1 和 2 入栈";
S.Push(1);
S.Push(2);
cout << "当前栈顶元素位: " << S.GetTop() << endl;
int x;
try
{
x = S.Pop();
cout << "出栈操作,出来的元素是: " << x << endl;
}
catch (char *str)
{
cout << str << endl;
}
int y;
try
{
cout << "请输入待入栈元素: ";
cin >> y;
cout << "待入栈元素为: " << y << endl;
S.Push(y);
}
catch (char *str)
{
cout << str << endl;
}
S.Empty();
return 0;
}