some data structure algorithms