Data Structures and Algorithms
Outline
The Lecture Notes is organized into eleven chapters. Besides
the subject matter, each chapter includes a list of problems and a list
of programming projects. Also, each chapter concludes with a list of references
for further reading and exploration of the subject.
-
1.
-
Introduction
-
2.
-
Lists
-
3.
-
Dictionaries
-
4.
-
Binary Trees
-
5.
-
Balanced Trees
-
6.
-
Priority Queues
-
7.
-
Directed Graphs
-
8.
-
Undirected Graphs
-
9.
-
Sorting Methods
-
10.
-
Introduction to NP-Completeness
-
11.
-
References
Most of the material (including some figures, examples, and
problems) is either sourced or adapted from classical textbooks on the
subject. However about 10 percent of the material has been presented in
a way different from any of the available sources. The primary sources
include the following six textbooks. I would like to thank the authors
of these classics. Special thanks to Professor Kruse for sending me all
the material he could on this subject.
-
1.
-
A. V. Aho, J. E. Hopcroft, and J. D. Ullman. Data Structures
and Algorithms. Addison-Wesley, Reading, Massachusetts, 1983.
-
2.
-
Gilles Brassard and Paul Bratley. Fundamentals of Algorithmics.
Prentice-Hall, 1996. Indian Edition published by Prentice Hall of India,
1998.
-
3.
-
T. H. Cormen, C. E. Leiserson, and R. L. Rivest. Introduction
to Algorithms. The MIT Press and McGraw-Hill Book Company, Cambridge,
Massachusetts, 1990.
-
4.
-
D. E. Knuth. Fundamental Algorithms (The Art of Computer
Programming: Volume 1). Second Edition, Narosa Publishing House, New
Delhi, 1985.
-
5.
-
R. L. Kruse. Data Structures and Program Design in C.
Prentice Hall of India, New Delhi, 1994.
-
6.
-
A. Weiss. Data Structures and Algorithms in C++. Addison-Wesley,
Reading, Massachusetts, 1994.
Two topics that have been covered implicitly rather than
in the form of independent chapters are: Algorithm Analysis Techniques
(such as recurrence relations) and Algorithm Design Techniques (such as
greedy strategy, dynamic programming, divide and conquer, backtracking,
local search, etc.). Two topics which have not been covered adequately
are: Memory management Techniques and Garbage Collection, and Secondary
Storage Algorithms. Pointers to excellent sources for these topics are
provided at appropriate places.