The objective of the course is to familiarize students with basic data structures and their use in fundamental algorithms. Course contents: Introduction to object oriented programming through stacks, queues and linked lists. Dictionaries: skip-lists, hashing, analysis of collision resolution techniques. Trees, traversals, binary search trees, optimal and average BST's. 2-4 trees and red-black trees. Tries and pattern matching. Priority queues and binary heaps. Sorting: merge, quick, radix, selection, heap. Graphs, Breadth first search and connected components. Depth first search in directed and undirected graphs and strongly connected components. Spanning trees: Prim's and Kruskal's algorithm, union-find data structure. Dijkstra's algorithm for shortest paths, shortest path tree. Directed acyclic graphs: topological sort and longest path.