BOWDOIN COLLEGE Department of Computer Science CS 102 -- Introduction to Computer Science II Syllabus: Spring, 1991 This course introduces the concepts of abstract data types, computational complexity, and informal verification in the context of large problem analysis and design. The basic data structures of computer science -- lists, stacks, queues, strings, and trees -- are introduced, together with their associated operators. The analysis of various sorting and searching algorithms and their implementations is followed by a first look at two broader aspects of the field of computer science--compilers and operating systems. Pascal is the laboratory language for the course. A weekly laboratory assignment and two or three tests will comprise the major work in the course. One or more of the lab assignments will be done as a team project. Meeting Times: TTh 11:00 lecture (208 Adams), W 2:00-3:00 lab (208 Adams). Instructor: Allen Tucker--211 Adams Office Hours: M-F, any time, by mutual arrangement Text: Stubbs and Webre, Data Structures with Abstract Data Types and Pascal (2nd edition), Brooks/Cole, 1989. Course Outline: Week of Lecture Topics Readings 1/21 Abstract data types, complexity of algorithms Chapter 1 1/28 Arrays, records, and linked lists Chapter 2 2/4 The List Abstract Data Type (ADT); array vs Chapter 4 2/11 linked implemenations 2/18 ***Review and Test #1 2/25 Stacks and queues, recursive algorithms, Chapter 3, Polish expression evaluation Appendix B 3/4 Sorting and its computational complexity; Chapter 6 3/11 insertion sort, quicksort, heapsort 3/18 ***Spring vacation 3/25 4/1 Strings Chapter 8 4/8 ***Review and Test #2 4/15 Trees; binary trees, search, heaps, and Chapter 5 4/22 implementation issues; parsing and compilers 4/29 Sets and graphs, operating systems, abstraction; Chapters 7, an overview 9, 10 5/6 ***Reading period 5/13 ***Test #3 More about the labs: Lab sessions will be scheduled weekly, on Wednesday afternoons in 208 Adams. Early labs will provide hands-on experience with sorting, measuring the efficiency of algorithms, and implementing abstract data types. Later labs will consider the design of larger software systems, inclulding the elements of operating systems and compilers. One or more final labs will be devoted to a team programming project that solves a complex software problem.