Application of software engineering techniques to the design and development of large programs, including a team project, with an emphasis on data abstraction and structures and associated algorithms: stacks, queues, linked lists, trees, graphs, and hash tables. This course also covers recursion and advanced sorting algorithms.