文章目录
前言
蒟蒻君开始写STL了…
问世间栈为何物?移步算法初探系列11——栈
手动实现栈(链表存储)
#include <bits/stdc++.h>
#include <cstddef>
using namespace std;
// 定义链表
template <class T>
struct node {
T num;
node<T>* nxt;
};
template<class T>
class MyStack {
private:
// 栈顶元素
node<T>* Top;
public:
// 构造函数:栈顶为空
MyStack() {
Top = NULL;
}
// 析构函数:清空栈
~MyStack();
// 元素入栈
void _push(T x);
// 栈顶出栈
void _pop();
// 栈顶元素
T _top();
// 栈中元素个数
size_t _size();
// 栈是否为空
bool _empty();
};
template<class T>
MyStack<T> :: ~MyStack() {
node<T>* p = Top;
while (p != NULL) {
Top = p;
p = p -> nxt;
delete Top;
}
}
template<class T>
void MyStack<T> :: _push(T x) {
node<T>* p = new node<T>;
p -> num = x;
p -> nxt = Top;
Top = p;
}
template<class T>
void MyStack<T> :: _pop() {
// 已经空了的话就报错
if (_empty()) {
throw"_empty";
}
node<T>* t = Top;
Top = Top -> nxt;
delete t;
}
template<class T>
T MyStack<T> :: _top() {
return Top -> num;
}
template<class T>
size_t MyStack<T> :: _size() {
node<T> *p = Top;
size_t sizes = 0;
while (p != NULL) {
p = p -> nxt;
++sizes;
}
return sizes;
}
template<class T>
bool MyStack<T> :: _empty() {
return Top == NULL;
}
int main() {
// 测试
MyStack<int> S;
S._push(1);
cout << S._top() << '\n';
S._push(2);
cout << S._size() << '\n';
S._pop();
cout << S._empty() << '\n';
return 0;
}