# Implement Queue via Stack

By
blackntt

# Problem:

Xây dựng cấu trúc dữ liệu Queue bằng Stack

# Solution:

template < class T >
class Queue{
private:
stack< T > s1;
stack< T > s2;
public:
Queue(){}
void add(T data){
s1.push(data);
}
void remove(){

    		shiftStack();
    		s2.pop();
    	}
    	T peek(){
    		shiftStack();
    		return s2.top();
    	}
    	bool isEmpty(){
    		return s1.empty()&&s2.empty();
    	}
    	void shiftStack(){
    		if(s2.empty()){
    			while(!s1.empty()){
    				s2.push(s1.top());
    				s1.pop();
    			}
    		}
    	}

};