#pragmaoncetemplate<typenameT>structSNode{
T data;
SNode* Next;};template<typenameT>using List = SNode<T>*;template<typenameT>using Top = SNode<T>*;template<typenameT>classStack{public:Stack();~Stack();voidpush(const T& X);const T&pop();private:
List<T> first;//表头结点
Top<T> top;//栈顶};//创建一个空栈,只有一个表头template<typenameT>Stack<T>::Stack():first{new SNode<T>}{
first->Next =nullptr;}//释放所有结点template<typenameT>
Stack<T>::~Stack(){
Top<T> temp;while(first->Next !=nullptr){
temp = top;
first->Next = top->Next;
top = top->Next;delete temp;}delete first;}//入栈操作template<typenameT>voidStack<T>::push(const T& X){
top =new SNode<T>;
top->Next = first->Next;
first->Next = top;
top->data = X;}//出栈操作template<typenameT>const T&Stack<T>::pop(){
Top<T> temp;if(first->Next !=nullptr){
temp = top;
first->Next = top->Next;
T data = top->data;
top = top->Next;delete temp;return data;}}
#include<iostream>#include"链式栈.h"using std::cout;intmain(){
Stack<int> S{};for(int i =0; i <10;++i){
S.push(i);}for(int i =0; i <10;++i){
cout << S.pop()<<' ';}return0;}