Data structures, algorithms, and software principles in C /
Saved in:
Author / Creator: | Standish, Thomas A., 1941- |
---|---|
Imprint: | Reading, Mass. : Addison-Wesley, c1995. |
Description: | xx, 748 p. : ill. ; 24 cm. |
Language: | English |
Subject: | |
Format: | Print Book |
URL for this record: | http://pi.lib.uchicago.edu/1001/cat/bib/1712298 |
Table of Contents:
- 1. Preparing for the Journey
- Where Are We Going? Blending Mathematics, Science, and Engineering
- The Search for Enduring Principles in Computer Science
- Principles of Software System Structure
- Efficiency and Tradeoffs
- Software Engineering Principles
- Our Approach to Mathematics
- Some Notes on Programming Notation
- Preview of Coming Attractions
- 2. Linked Data Representations
- What are Pointers?
- The Basic Intuition
- Pointers in C--The Rudiments
- Pointer Diagramming Notation
- Linear Linked Lists
- Other Linked Data Structures
- 3. Introduction to Recursion
- Thinking Recursively
- Common Pitfall--Infinite Regresses
- Quantitative Aspects of Recursive Algorithms
- 4. Modularity and Data Abstraction
- Modularity and Information Hiding in Program Design
- 5. Introduction to Software Engineering Concepts
- Top-Down Programming By Stepwise Refinement
- Proving Programs Correct
- Transforming and Optimizing Programs
- Testing Programs
- The Philosophy of Measurement and Tuning
- Software Reuse and Bottom-up Programming
- Program Structuring and Documentation
- 6. Introduction to Analysis of Algorithms
- What Do We Use for a Yardstick?
- The Intuition Behind O-Notation
- O-Notation--Definition and Manipulation
- Analyzing Simple Algorithms
- What O-Notation Doesn't Tell You
- 7. Linear Data Structures--Stacks and Queues
- Some Background on Stacks
- ADTs for Stacks and Queues
- Using the Stack ADT to Check for Balanced Parentheses
- Using the Stack ADT to Evaluate Postfix Expressions
- Implementing the Stack ADT
- How C Implements Recursive Function Calls Using Stacks
- Implementations of the Queue ADT
- More Queue Applications
- 8. Lists, Strings, and Dynamic Memory Allocation
- Lists
- Generalized Lists
- Applications of Generalized Lists
- Strings
- Dynamic Memory Allocation
- 9. Trees
- Basic Concepts and Terminology
- Binary Trees
- A Sequential Binary Tree Representation
- An Application--Heaps and Priority Queues
- Traversing Binary Trees
- Binary Search Trees
- AVL Trees and Their Performance
- Two-Three Trees
- Tries
- An Application--Huffman Codes
- 10. Graphs
- Basic Concepts and Terminology
- Graph Representations
- Graph Searching
- Topological Ordering
- Shortest Paths
- Task Networks
- Useful Background on Graphs
- 11. Hashing and the Table ADT
- The Table ADT
- Introduction to Hashing by Simple Examples
- Collisions, Load Factors, and Clusters
- Algorithms for Hashing by Open Addressing
- Choosing a Hash function
- Comparison of Searching Methods Using the Table ADT
- 12. External Collections of Data
- Characteristics of External Storage Devices
- Techniques That Don't Work Well
- Techniques That Work Well
- Information Retrieval and Databases
- 13. Sorting
- Laying Some Groundwork
- Priority Queue Sorting Methods
- Divide-and-Conquer Methods
- Methods That Insert Keys and Keep Them Sorted