Advanced Programming and Problem-Solving Strategies in C. Part II: Algorithms and Data Structures

This book presents computing technologies for university students enrolled in advanced programming classes such as "Algorithms and programming", and software development professionals. It will give the reader an informative, challenging ad entertaining introduction to use C language to solve complex problems. Those problems will include advance algorithms and complex data structures. The book will concentrate on complete working programs, somehow presenting and contrasting several possible solutions. This work assumes a general-purpose knowledge of the C language such as the one usually learned during basic programming courses delivered at the first year of the curricula in computer engineering and computer science. The book main highlights are the following: - Extended coverage of pointers, dynamic arrays and matrices, linked-lists, and other basic data structures. - Abstract data types (ADTs). - Recursions and recursive algorithms. Each topic is covered by a rich collection of partial and complete examples, and about 100 fully implemented and debugged programs. The focus is on good software engineering, and on program clarity, such that the reader is guided to learn properties of algorithms and data structures as fast as possible. The content of each chapter is the following: - Chapter 1 presents a revising set of exercise to recall basic C construct and problem solving strategies. This is essentially a very brief summary of Volume I by the same author. Code and programming style follow the same book. - Chapter 2 covers dynamic memory allocation. Pointers, operators on pointers, dynamic arrays, and dynamic matrices are covered into details. - Chapter 3 presents dynamically allocated lists. Simple, ordered, bi-linked, circular, and list-of-lists are described with several figures and code segments. - Chapter 4 describes basic concepts for recursion and it presents simple recursive programs. - Chapter 5 includes standard recursive problems such as merge-sort, quick-sort, the eight queen problems, etc. It also describes combinatorics problems, such as: The multiplication principle, simple arrangements, arrangements with repetitions, simple permutation, permutation with repetitions, simple combination, combinations with repetitions, and the power-set. - Chapter 6 describe how to apply recursion to some hard-to-solve problems. - Chapter 7 describes all required concepts to write programs "in the large", i.e., multi-file programs, with personalized header files. It also illustrates the main concepts of Abstract Data Type (ADTs) and their use in C programming. - Chapter 8 illustrates several ADT-based problems, such as the stack (based on an array or a dynamic list), queues, etc. The book is also covered by online material, as all source codes are available on the editor web page. We would sincerely appreciate any comments, criticisms, corrections and suggestions for improving the text. Please address all correspondence to: stefano.quer@polito.it or visits the following web page: http://fmgroup.polito.it/quer/