#### Overview of this book

Golang is one of the fastest growing programming languages in the software industry. Its speed, simplicity, and reliability make it the perfect choice for building robust applications. This brings the need to have a solid foundation in data structures and algorithms with Go so as to build scalable applications. Complete with hands-on tutorials, this book will guide you in using the best data structures and algorithms for problem solving. The book begins with an introduction to Go data structures and algorithms. You'll learn how to store data using linked lists, arrays, stacks, and queues. Moving ahead, you'll discover how to implement sorting and searching algorithms, followed by binary search trees. This book will also help you improve the performance of your applications by stringing data types and implementing hash structures in algorithm design. Finally, you'll be able to apply traditional data structures to solve real-world problems. By the end of the book, you'll have become adept at implementing classic data structures and algorithms in Go, propelling you to become a confident Go programmer.
Preface
Free Chapter
Section 1: Introduction to Data Structures and Algorithms and the Go Language
Data Structures and Algorithms
Getting Started with Go for Data Structures and Algorithms
Section 2: Basic Data Structures and Algorithms using Go
Linear Data Structures
Non-Linear Data Structures
Homogeneous Data Structures
Heterogeneous Data Structures
Dynamic Data Structures
Classic Algorithms
Section 3: Advanced Data Structures and Algorithms using Go
Network and Sparse Matrix Representation
Memory Management
Next Steps
Other Books You May Enjoy

# Two-dimensional arrays

Two-dimensional arrays were presented briefly in Chapter 2, Getting Started with Go for Data Structures and Algorithms. To recap, for dynamic allocation, we use slice of slices, which is a two-dimensional array. A two-dimensional array, is a list of single-dimensional arrays. Every element in a two-dimensional array arr, is identified as arr[i][j], where arr is the name of the array and i and j represent rows and columns, and their values ranging from 0 to m and 0 to n, respectively. Traversing a two-dimensional array is of O(m*n) complexity.

The following code shows how to initialize an array:

`var arr = [4][5] int{    {4,5,7,8,9},    {1,2,4,5,6},    {9,10,11,12,14},    {3,5,6,8,9}}`

An element in a two-dimensional array is accessed with a row index and column index. In the following example, the array's value in row 2 and column 3 is retrieved as an...