ICOM 4035 Data Structures Fall 2011 First Semester 2011-2012 Section: 050 Room S-205 Class: LWV 11:30-12:20 pm Office Hours: Tuesday MJ 12:00-1:30 pm. Credits: 3 Professor: Vidya Manian Office: CID Bldg. 2nd floor, Larsip Room 221 Telephone: 832-4040, Ext. 5845. E-mail: manian@ece.uprm.edu Email: manian@ece.uprm.edu Course Description 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. Textbook: Michael T. Goodrich, Roberto Tamassia, “Data Structures and Algorithms in Java”, (4th Edition) John Wiley and Sons, 2005. References: Mark Allen Weiss, Algorithms, data structures and problem solving with C++ , Addison Wesley, 1996. Internet, google search on topics, textbook website. Class participation 5% Partial Exams (3) 45% Exam 1: September 15 2011 4:30 to 6:30 pm Exam 2: October 20 2011 4:30 to 6:30 pm Exam 3: November 28 2011 4:30 to 6:30 pm Projects: 20% Laboratory: 10% Final Exam: 20% 1. Object-Oriented Design – general review of the O-O design, and using Java in particular. Design goals, design principles, design patterns, inheritance, polymorphism exceptions, interfaces and abstract classes, casting and generics. 2. Arrays, Linked Lists, and Recursion – revisit arrays and introduce the linked list data structures and how both can be used as data structures to support implementation of more abstract collections. Revisit recursion and discuss general strategies to develop recursive algorithms and how recursion is handled. 3. Analysis Tools – useful functions, general approaches for the analysis of algorithms to measure effort and determine correctness. 4. Stacks and Queues – Abstract specification of stacks and queues, different implementations, and applications 5. Lists and Iterators – Study of different types of lists, their abstract specification, different implementations, and applications. 6. Trees – Study of the tree data structures (general trees and binary trees): specification, implementations, and applications. Algorithms to traverse trees and tree iterators. 7. Priority Queues – Study of the priority queue, different implementations, and their applications. Study of heap data structure and the heapsort method to sort comparable elements in an array. 8. Maps and Dictionaries – The Map and the Dictionary data structures, their specification, and implementations. Hash-based implementations and applications. 9. Search Trees - Application of trees to the implementation of indexes to improve performance in the operations to access elements, and to store elements in collections of objects. In particular, we will study: binary search trees and balanced trees. 10. Sorting, Sets, Selection – Sorting methods: merge-sort, quick-sort, bucket-sort, and radixsort. Lower bounds for sorting. The Set ADT and its implementation. Selection. 11. Graphs – Introduction to graph theory concepts, different types of graphs, data structures for graph implementations, typical algorithms for traversing graphs, shortest paths, and applications.