手写STL
链式栈
template<class T>
class Stack{
struct Link{
Link(){data=0;p=nullptr;}
Link(const T&n,Link*np=nullptr){data=n;p=np;}
T data;
Link*p;
};
Link*tp;
unsigned sz;
public:
Stack(){tp=nullptr;sz=0;}
inline void push(const T&x){tp=new Link(x,tp);sz++;}
inline T&top()const{return tp->data;}
inline T pop(){Link*del=tp;T x=tp->data;tp=tp->p;sz--;delete del;return x;}
inline bool empty(){return sz==0;}
inline void clear(){tp=nullptr;sz=0;}
inline unsigned size(){return sz;}
};
链式双端队列
template<class T>
class Deque {
struct Link{
T data;Link*l,*r;
Link(){data=0;l=r=nullptr;}
Link(const T&n){data=n;l=r=nullptr;}
};
Link*l,*r;
unsigned sz;
public:
Deque(){sz=0;l=r=nullptr;}
inline bool empty(){return sz==0;}
inline unsigned size(){return sz;}
inline void push_front(const T&x){Link*p=new Link(x);sz?(l->l=p,p->r=l,l=l->l):(l=r=p,l->l=l->r=nullptr);sz++;}
inline void push_back(const T&x) {Link*p=new Link(x);sz?(r->r=p,p->l=r,r=r->r):(l=r=p,r->l=r->r=nullptr);sz++;}
inline T pop_front(){T x=l->data;l=l->r;sz--;return x;}
inline T pop_back(){T x=r->data;r=r->l;sz--;return x;}
inline T&front()const{return l->data;}
inline T&back()const{return r->data;}
inline void clear(){l=r=nullptr;sz=0;}
};