HOW TO USE THIS BOOK....10
ALGORITHMS ANALYSIS....15
APPROACH TO SOLVE ALGORITHM DESIGN PROBLEMS....55
ABSTRACT DATA TYPE & C# COLLECTIONS....61
SORTING....91
SEARCHING....131
LINKED LIST....210
STACK....265
QUEUE....322
TREE....343
PRIORITY QUEUE/ HEAPS....411
HASH-TABLE....456
GRAPHS....473
STRING ALGORITHMS....532
ALGORITHM DESIGN TECHNIQUES....565
BRUTE FORCE ALGORITHM....572
GREEDY ALGORITHM....579
DIVIDE-AND-CONQUER, DECREASE-AND-CONQUER....590
DYNAMIC PROGRAMMING....602
BACKTRACKING....614
COMPLEXITY THEORY....617
APPENDIX....625
This book introduces you to the world of data structures and algorithms. Data structures define the way data is organized in memory for fast and efficient access, while algorithms are sets of instructions to solve problems by manipulating these data structures. Designing an efficient algorithm is an important skill that software companies like Microsoft, Google, and Facebook pursue. Most interviews for these companies focus on knowledge of data structures and algorithms, looking for how candidates can use these concepts to solve complex problems efficiently. In addition to knowing a programming language, you also need a good command of computer fundamentals to qualify for an interview and excel as a software engineer. This book assumes you are familiar with the C# language and its concepts, such as classes.In the beginning of this book, we will explore Complexity Analysis and the various data structures and their algorithms. We will look at Linked-Lists, Stacks, Queues, Trees, Heaps, Hash Tables, and Graphs, as well as Sorting and Searching techniques. In the final chapters, we will cover different algorithmic techniques such as Brute Force, Greedy, Divide-and-Conquer, Dynamic Programming, and Backtracking algorithms.