Com S 228 - Introduction to Data Structures Department of Computer Science, College of Liberal Arts and Sciences Course Content: ~~~~~~~~~~~~~~ This class is designed to give you essential programming tools and knowledge. You will learn how to model data in a computer, and how to specify, use, and implement standard data structures. You will learn how efficient or expensive various combinations of data structures and algorithms are. Along the way, you will develop skills in imperative programming. You will learn some of design principles and ideas for managing small (up to 500 line) programs. Finally we hope to share our sense of the satisfaction that comes from crafting an elegant, correct and efficient solution to a programming problem. Goals: ~~~~~ In one sentence the essential goal is for you to acquire skills and knowledge in imperative programming and data structures. In more detail, you should: * Have a working knowledge of basic algorithms and data structures. This includes: - a working knowledge of such implementation data structures as arrays, records, variants, and pointers, and - the use of such implementation data structures to implement stacks, queues, lists, sets, trees, searching, and sorting. * Understand ADTs, their importance in object-based software development, how they are specified (informally), and how they can be implemented in C++. * Design, write, and document C++ programs of up to 500 lines in size. This includes: - the ability to design and write code that uses previously compiled C++ classes, given (informal) specifications of those classes, - the ability to design and (informally) specify ADTs to modularize and solve programming problems (i.e., object-based design), and - the ability to pick from known data structures those appropriate to model the information needed to solve the problem, and - the ability to creatively develop algorithms to solve such problems. * Understand the significance of information hiding in software development, and how information hiding can be achieved by using C++ modules and classes. * Understand asymptotic notation and notions of time and space complexity, and be able to judge the efficiency of algorithms. * Be able to carefully (albeit informally) reason about the correctness of programs that use ADTs and about the correctness of implementations of ADTs. Audience: ~~~~~~~~ Com S and Cpr E majors needing an introduction to data structures. Some students try to take this course just to learn C++. I want to explicitly discourage you if you are not taking this course to learn data structures. For example, if you are a graduate student or advanced undergraduate, this course is not for you, drop it and just read a book and work some problems on your own. (I'm happy to offer suggestions.) Also some students (especially advanced undergraduates) try to take this course just to have a course with C++ on their resume. This is a mistake if you already have credit for Com S 208 or 212; if so drop this course, as you can't also get credit for Com S 228. Satisfies What Requirements: ~~~~~~~~~~~~~~~~~~~~~~~~~~~ Second computer science course for Com S and Cpr E majors. Class Requirements: ~~~~~~~~~~~~~~~~~~ 4 hours lecture, 1 discussion/laboratory per week. The lectures are given by a computer science faculty member. In addition, there will be teaching assistants associated with the class who will meet discussion sections, answer questions, and help with the grading of homework and examinations. A substantial part of the course is practice in writing programs. Typically, there are 20 programs of about 100-500 lines to be written during the semester. These programs are an essential part of the course. Students per Section: 80-180 students is typical. ~~~~~~~~~~~~~~~~~~~~ Tutoring: ~~~~~~~~ Some tutors are available from the ISU tutoring office. Teaching assistants also typically hold office hours for the purpose of answering questions or helping with the debugging of programs. Examinations ~~~~~~~~~~~~ There will be several (typically 4 or 5) hour examinations, depending on the instructor, and a two-hour final examination. Grading: ~~~~~~~ Letter grade.