( All chapters, except Chapter 1, begin with an Introduction and Motivation.) <br> <br> 1. Preparing for the Journey. <br> <p> </p> <div style="margin-left: 0.2in;"> Where Are We Going? </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Blending Mathematics, Science, and Engineering. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> The Search for Enduring Principles in Computer Science. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Principles of Software System Structure. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Efficiency and Tradeoffs. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Software Engineering Principles. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Our Approach to Mathematics. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Some Notes on Programming Notation. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Preview of Coming Attractions. </div> <p></p> <br> <br> 2. Linked Data Representations. <br> <p> </p> <div style="margin-left: 0.2in;"> What are Pointers? The Basic Intuition. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Pointers in C—The Rudiments. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Pointer Diagramming Notation. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Linear Linked Lists. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Other Linked Data Structures. </div> <p></p> <br> <br> 3. Introduction to Recursion. <br> <p> </p> <div style="margin-left: 0.2in;"> Thinking Recursively. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Common Pitfall—Infinite Regresses. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Quantitative Aspects of Recursive Algorithms. </div> <p></p> <br> <br> 4. Modularity and Data Abstraction. <br> <p> </p> <div style="margin-left: 0.2in;"> The Structure of C Modules. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Priority Queues—An Abstract Data Type. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> A Pocket Calculator Interface. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> How to Hide Data Representations. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Modularity and Information Hiding in Program Design. </div> <p></p> <br> <br> 5. Introduction to Software Engineering Concepts. <br> <p> </p> <div style="margin-left: 0.2in;"> Top-Down Programming By Stepwise Refinement. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Proving Programs Correct. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Transforming and Optimizing Programs. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Testing Programs. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> The Philosophy of Measurement and Tuning. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Software Reuse and Bottom-up Programming. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Program Structuring and Documentation. </div> <p></p> <br> <br> 6. Introduction to Analysis of Algorithms. <br> <p> </p> <div style="margin-left: 0.2in;"> What Do We Use for a Yardstick? </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> The Intuition Behind O-Notation. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> O-Notation—Definition and Manipulation. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Analyzing Simple Algorithms. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> What O-Notation Doesn’t Tell You. </div> <p></p> <br> <br> 7. Linear Data Structures—Stacks and Queues. <br> <p> </p> <div style="margin-left: 0.2in;"> Some Background on Stacks. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> ADTs for Stacks and Queues. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Using the Stack ADT to Check for Balanced Parentheses. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Using the Stack ADT to Evaluate Postfix Expressions. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Implementing the Stack ADT. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> How C Implements Recursive Function Calls Using Stacks. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Implementations of the Queue ADT. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> More Queue Applications. </div> <p></p> <br> <br> 8. Lists, Strings, and Dynamic Memory Allocation. <br> <p> </p> <div style="margin-left: 0.2in;"> Lists. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Generalized Lists. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Applications of Generalized Lists. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Strings. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Dynamic Memory Allocation. </div> <p></p> <br> <br> 9. Trees. <br> <p> </p> <div style="margin-left: 0.2in;"> Basic Concepts and Terminology. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Binary Trees. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> A Sequential Binary Tree Representation. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> An Application—Heaps and Priority Queues. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Traversing Binary Trees. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Binary Search Trees. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> AVL Trees and Their Performance. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Two-Three Trees. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Tries. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> An Application—Huffman Codes. </div> <p></p> <br> <br> 10. Graphs. <br> <p> </p> <div style="margin-left: 0.2in;"> Basic Concepts and Terminology. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Graph Representations. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Graph Searching. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Topological Ordering. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Shortest Paths. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Task Networks. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Useful Background on Graphs. </div> <p></p> <br> <br> 11. Hashing and the Table ADT. <br> <p> </p> <div style="margin-left: 0.2in;"> The Table ADT. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Introduction to Hashing by Simple Examples. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Collisions, Load Factors, and Clusters. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Algorithms for Hashing by Open Addressing. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Choosing a Hash Function. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Comparison of Searching Methods Using the Table ADT. </div> <p></p> <br> <br> 12. External Collections of Data. <br> <p> </p> <div style="margin-left: 0.2in;"> Characteristics of External Storage Devices. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Techniques That Don’t Work Well. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Techniques That Work Well. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Information Retrieval and Databases. </div> <p></p> <br> <br> 13. Sorting. <br> <p> </p> <div style="margin-left: 0.2in;"> Laying Some Groundwork. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Priority Queue Sorting Methods. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Divide-and-Conquer Methods. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Methods That Insert Keys and Keep Them Sorted. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> O(n) Methods—Address Calculation Sorting. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Other Methods. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Comparison and Perspective. </div> <p></p> <br> <br> 14. Advanced Recursion. <br> <p> </p> <div style="margin-left: 0.2in;"> Recursion as a Descriptive Method. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Using Recursion to Build a Parser. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Translating from Infix to Postfix. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Recursion and Program Verification. </div> <p></p> <br> <br> 15. Object-Oriented Programming. <br> <p> </p> <div style="margin-left: 0.2in;"> Exploring OOP Through Progressive Examples. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Building Systems Using Object-Oriented Programming. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Advantages and Disadvantages of Object-Oriented Programming. </div> <p></p> <br> <br> 16. Advanced Software Engineering Concepts. <br> <p> </p> <div style="margin-left: 0.2in;"> The Software Lifecycle. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Software Productivity. </div> <p></p> <p> </p> <div style="margin-left: 0.2in;"> Software Process Models. </div> <p></p> <br> <br> Appendix Math Reference and Tutorial. 0201591189T04062001 <br>