added abstract data types implementations