DATA STRUCTURES
&
ALGORITHMS
IN GO
FIRST EDITION
HEMANT JAIN
Data Structures & Algorithms In Go
Hemant Jain
Copyright © Hemant Jain 2017. All Right Reserved.
Hemant Jain asserts the moral right to be identified as
the author of this work.
All rights reserved. No part of this publication may be
reproduced, stored in or introduced into a retrieval
system, or transmitted, in any form, or by any means
(electrical, mechanical, photocopying, recording or
otherwise) without the prior written permission of the
author, except in the case of very brief quotations
embodied in critical reviews and certain other non-
commercial uses permitted by copyright law. Any
person who does any unauthorized act in relation to this
publication may be liable to criminal prosecution and
civil claims for damages.
ACKNOWLEDGEMENT
The author is very grateful to GOD ALMIGHTY for his grace and
blessing.
Deepest gratitude for the help and support of my brother Dr.
Sumant Jain. This book would not have been possible without the
support and encouragement he provided.
I would like to express profound gratitude to my guide/ my friend
Naveen Kaushik for his invaluable encouragement, supervision
and useful suggestion throughout this book writing work. His
support and continuous guidance enable me to complete my work
successfully.
Finally yet importantly, I am thankful to Love Singhal, Anil Berry
and Others who helped me directly or indirectly in completing this
book.
Hemant Jain
TABLE OF CONTENTS
ACKNOWLEDGEMENT
TABLE OF CONTENTS
CHAPTER 0: HOW TO USE THIS BOOK
WHAT THIS BOOK IS ABOUT
PREPARATION PLANS
SUMMARY
CHAPTER 1: INTRODUCTION - PROGRAMMING OVERVIEW
INTRODUCTION
FIRST GO PROGRAM
VARIABLES & CONSTANTS
BASIC DATA TYPES
STRING
CONDITIONS AND LOOPS
FUNCTION
PARAMETER PASSING, CALL BY VALUE
POINTERS
PARAMETER PASSING, CALL BY POINTER / REFERENCE
STRUCTURES
METHODS
INTERFACE
ARRAY
SLICE
MAP / DICTIONARY
ARRAY INTERVIEW QUESTIONS
CONCEPT OF STACK
SYSTEM STACK AND METHOD CALLS
RECURSIVE FUNCTION
EXERCISES
CHAPTER 2: ALGORITHMS ANALYSIS
INTRODUCTION
ALGORITHM
ASYMPTOTIC ANALYSIS
BIG-O NOTATION
OMEGA-Ω NOTATION
THETA-Θ NOTATION
COMPLEXITY ANALYSIS OF ALGORITHMS
TIME COMPLEXITY ORDER
DERIVING THE RUNTIME FUNCTION OF AN ALGORITHM
TIME COMPLEXITY EXAMPLES
MASTER THEOREM
MODIFIED MASTER THEOREM
EXERCISE
CHAPTER 3: APPROACH TO SOLVE ALGORITHM DESIGN
PROBLEMS
INTRODUCTION
CONSTRAINTS
IDEA GENERATION
COMPLEXITIES
CODING
TESTING
EXAMPLE
SUMMARY
CHAPTER 4: ABSTRACT DATA TYPE & GO COLLECTIONS
ABSTRACT DATA TYPE (ADT)
DATA-STRUCTURE
GO COLLECTION FRAMEWORK
STACK
QUEUE
TREE
BINARY TREE
BINARY SEARCH TREES (BST)
PRIORITY QUEUE (HEAP)
HASH-TABLE
DICTIONARY / SYMBOL TABLE
GRAPHS
GRAPH ALGORITHMS
SORTING ALGORITHMS
COUNTING SORT
END NOTE
CHAPTER 5: SEARCHING
INTRODUCTION
WHY SEARCHING?
DIFFERENT SEARCHING ALGORITHMS
LINEAR SEARCH – UNSORTED INPUT
LINEAR SEARCH – SORTED
BINARY SEARCH
STRING SEARCHING ALGORITHMS
HASHING AND SYMBOL TABLES
HOW SORTING IS USEFUL IN SELECTION ALGORITHM?
PROBLEMS IN SEARCHING
EXERCISE
CHAPTER 6: SORTING
INTRODUCTION
TYPE OF SORTING
BUBBLE-SORT
MODIFIED (IMPROVED) BUBBLE-SORT
INSERTION-SORT
SELECTION-SORT
MERGE-SORT
QUICK-SORT
QUICK SELECT
BUCKET SORT
GENERALIZED BUCKET SORT
HEAP-SORT
TREE SORTING
EXTERNAL SORT (EXTERNAL MERGE-SORT)
COMPARISONS OF THE VARIOUS SORTING ALGORITHMS.
SELECTION OF BEST SORTING ALGORITHM
EXERCISE
CHAPTER 7: LINKED LIST
INTRODUCTION
LINKED LIST
TYPES OF LINKED LIST
SINGLY LINKED LIST
DOUBLY LINKED LIST
CIRCULAR LINKED LIST
DOUBLY CIRCULAR LIST
EXERCISE
CHAPTER 8: STACK
INTRODUCTION
THE STACK ABSTRACT DATA TYPE
STACK USING SLICES
STACK GENERIC IMPLEMENTATION
STACK USING LINKED LIST
PROBLEMS IN STACK
USES OF STACK
EXERCISE
CHAPTER 9: QUEUE
INTRODUCTION
THE QUEUE ABSTRACT DATA TYPE
QUEUE USING LIST
QUEUE USING LINKED LIST
PROBLEMS IN QUEUE
EXERCISE
CHAPTER 10: TREE
INTRODUCTION
TERMINOLOGY IN TREE
BINARY TREE
TYPES OF BINARY TREES
PROBLEMS IN BINARY TREE
BINARY SEARCH TREE (BST)