链栈的实现
1.1 链栈的模板定义
#include<iostream>
using namespace std;
template<typename DataType>
struct Node {
DataType data;
Node* next;
};
template<typename DataType>
class LinkStack {
private:
Node<DataType>* top;
public:
LinkStack();
~LinkStack();
int Empty();
void Push(DataType x);
DataType Pop();
DataType Gettop();
};
1.2 链栈函数的实现
template<typename DataType>
LinkStack<DataType>::LinkStack() {
top = nullptr; // 让尾指针指向空
}
template<typename DataType>
int LinkStack<DataType>::Empty() {
if (top == nullptr)return 1;
else return 0;
}
template<typename DataType>
void LinkStack<DataType>::Push(DataType x) {
Node<DataType>* s;
s = new Node<DataType>; // 需要开辟空间的时候才要new,原本有空间就不用new了
s->data = x;
s->next = top;
top = s;
}
template<typename DataType>
DataType LinkStack<DataType>::Pop() {
if (top == nullptr)throw "The Stack is empty!";
else {
DataType temp = top->data;
Node<DataType>* p = top;
top = top->next;
delete p;
return temp;
}
}
template<typename DataType>
DataType LinkStack<DataType>::Gettop() {
if (top == nullptr)throw "The Stack is empty!";
else {
return top->data;
}
}
template<typename DataType>
LinkStack<DataType>::~LinkStack() {
Node<DataType>* p = top;
while (p != nullptr) {
top = top->next;
delete p;
p = top;
}
}
1.3 链栈的实例化测试
int main(void) {
LinkStack<int> LinkS{};
cout << LinkS.Empty() << endl;
LinkS.Push(7);
LinkS.Push(6);
LinkS.Push(5);
cout << LinkS.Pop() << endl;
cout << LinkS.Gettop() << endl;
return 0;
}