Transfers ToCSUDescriptionThis course is an introduction to the study of data structures and algorithms as well as an introduction to software development primarily in C++. The course begins with a short review of object-oriented programming, emphasizing utilizing and extending existing code through inheritance and interfaces. The review leads into more advanced topics including multiple inheritance, virtual inheritance, the diamond problem, templates, and multithreading. Complexity analysis, including Big-O notation, best case, worst case, average case, and amortized analysis are covered in detail. Data structures and algorithms are covered in a language-independent manner. Linked lists, stacks, queues, trees, heaps, and graphs are covered in detail along with associated implementation and memory management techniques. Algorithms for searching and sorting, including hashing, are covered in detail. Recursion, which was introduced in the previous course, is analyzed rigorously. The Standard Template Library is discussed in reference to each data structure and algorithm covered in the course. Software development is explored in the contexts of event-driven programming and video game programming. A large scale project requiring significant planning, collaboration, and documentation is required.