手写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;}
};
posted @ 2022-11-14 17:17  半步蒟蒻  阅读(43)  评论(1)    收藏  举报