# queue.nas
# valkmjolnir 2021/3/31
var queue=func(){
    var (begin,end)=(nil,nil);
    return{
        push:func(elem){
            var new_node={
                elem:elem,
                next:nil
            };
            if(begin==nil)
                begin=end=new_node;
            else{
                end.next=new_node;
                end=new_node;
            }
        },
        pop:func(){
            if(begin!=nil)
                begin=begin.next;
            if(begin==nil)
                end=nil;
        },
        front:func(){
            if(begin!=nil)
                return begin.elem;
        },
        clear:func(){
            begin=end=nil;
        },
        empty:func(){
            return begin==nil;
        }
    };
}
