some basic data structrues and algorithms