Solutions Manual for A Practical Introduction to Data Structures and Algorithm Analysis Second Edition Clifford A. Shaffer
Department of Computer Science Virginia Tech Blacksburg, VA 24061 November 30, 2000 Copyright c 2000 by Clifford A. Shaffer. Contents Preface ii 1 Data Structures and Algorithms 1 2 Mathematical Preliminaries 8 3 Algorithm Analysis 32 4 Lists, Stacks, and Queues 43 5 Binary Trees 62 6 General Trees 78 7 Internal Sorting 89 8 File Processing and External Sorting 107 9 Searching 114 10 Indexing 125 11 Graphs 133 12 Lists and Arrays Revisited 145 13 Advanced Tree Structures 157 i ii Contents 14 Analysis Techniques 88 15 Limits to Computation 94 Preface Contained herein are the solutions to all exercises from the textbook A Practical Introduction to Data Structures and Algorithm Analysis, 2nd edition. For most of the problems requiring an algorithm I have given actual code. In a few cases I have presented pseudocode. Please be aware that the code presented in this manual has not actually been compiled and tested. While I believe the algorithms to be essentially correct, there may be errors in syntax as well as semantics. Most importantly, these solutions provide a guide to the instructor as to the intended answer, rather than usable programs. iii 1 Data Structures and Algorithms Instructor’s note: Unlike the other chapters, many of the questions in this chapter are not really suitable for graded work. The questions are mainly intended to get students thinking about data structures issues. 1.1 This question does not have a specific right answer, provided the student keeps to the spirit of the question. Students may have trouble with the concept of “operations.” 1.2 This exercise asks the student to expand on their concept of an integer representation. A good answer is described by Project 4.5, where a singly-linked list is suggested. The most straightforward implementation stores each digit in its own list node, with digits stored in reverse order. Addition and multiplication are implemented by what amounts to grade-school arithmetic. For addition, simply march down in parallel through the two lists representing the operands, at each digit appending to a new list the appropriate partial sum and bringing forward a carry bit as necessary. For multiplication, combine the addition function with a new function that multiplies a single digit by an integer. Exponentiation can be done either by repeated multiplication (not really practical) or by the traditional Θ(logn)-time algorithm based on the binary representation of the exponent. Discovering this faster algorithm will be beyond the reach of most students, so should not be required. 1.3 A sample ADT for character strings might look as follows (with the normal interpretation of the function names assumed). 1 Chap. 1 Data Structures and Algorithms // Concatenate two strings String strcat(String s1, String s2); // Return the length of a string int length(String s1); // Extract a substring, starting at ‘start’, // and of length ‘length’ String extract(String s1, int start, int length); // Get the first character char first(String s1); // Compare two strings: the normal C++ strcmp function. Some // convention should be indicated for how to interpret
Geschreven voor
Documentinformatie
- Geüpload op
- 10 juli 2024
- Aantal pagina's
- 187
- Geschreven in
- 2023/2024
- Type
- Tentamen (uitwerkingen)
- Bevat
- Vragen en antwoorden