This is a new outline for 220, for the next time. I) Control Structures: - straight-line - branch - iteration - subroutine call/ macro expansion (deferred) simulation of various control structures by others. exercises: rewrite code using just one or the other control structure. II) Assertions: Boolean algebra and lattices - preconditions - postconditions - loop invariants - boolean algebra exercises in loop invariants. gather points. (filters) III) Data Structures - function notation, domain of a function, partial functions. - access routines, mutation routines, predicates, data lifetimes. - arrays, records and pointers. - ADT's and CDT's IV) String processing. - reg. expressions - BNF - relation to syntax of a program - parsing routines for input - ADT "string" V) Lists and trees - graph theory - most the list and move to front heuristic plus string searching - leaves and 3-regular trees - internal and external nodes, full trees. - ordered trees - general trees - forests, orchards. - search structures based on trees - recursion. VI) Subroutines - macros verses subroutines - the call stack and recurion - local and global variables - changing iteration to recursion, recursion to iteration. - tricks of the trade: wrapper functions for recursion, recursion invariants. - recursion invariants versus loop invariants. VII) Efficiency of algorithms. Heaps and Random trees. Self-balancing data strutures, R/B, 2-4, and Splay trees. Left-ist heaps, binomial queues and Fibonacci heaps.