Introduction to the design, analysis and implementation of data structures and sorting algorithms, using object-oriented programming techniques. Study of computational complexity and Big-O notation. Design and implementation of abstract data types and containers classes: Vector, List, Set, Sequence, Table, Stack, Queue, Priority Queue, Tree, and Graph. The list of concrete structures to be studied includes: dynamic arrays, linked lists, Bit vectors, binary trees, binary search trees, 2-3 Trees, heaps, hash tables, adjacency matrices and adjacency lists. Recursion, generics and inheritance will be used extensively. In some universities this course is called Computer Science II (CS2)