Skip to content

nRanzo/data_algorithms_java

Repository files navigation

Essential Algorithms and Data Structures Collection

Welcome to the Essential Algorithms and Data Structures Collection—an extensive and curated collection of algorithms, data structures, and implementations that every proficient engineer should be familiar with. This repository serves as a comprehensive resource, whether you're refreshing your knowledge, preparing for interviews, or enhancing your programming skills.

Table of Contents

Introduction

In this repository, you'll find a variety of data structures and algorithms implemented in a clean and understandable manner. The focus is on clarity, efficiency, and adherence to best practices. Each implementation is accompanied by a detailed explanation and complexity analysis to help you grasp the underlying concepts thoroughly.

Data Structures

This section includes classic and advanced data structures that are fundamental to computer science and software engineering:

  • Linked Lists: Singly, Doubly, and Circularly Linked Lists
  • Stacks and Queues: Array-based and Linked List-based implementations
  • Trees: Binary Trees, AVL Trees, Red-Black Trees, Tries
  • Graphs: Adjacency Matrix, Adjacency List, Depth-First Search, Breadth-First Search
  • Heaps: Binary Heaps, Fibonacci Heaps
  • Hash Tables: Chaining, Open Addressing
  • Others: Sets, Maps, Bloom Filters, Priority Queues

Algorithms

The algorithms section covers a wide range of essential algorithms:

  • Sorting Algorithms: Quick Sort, Merge Sort, Heap Sort, Bubble Sort
  • Search Algorithms: Binary Search, Depth-First Search, Breadth-First Search
  • Graph Algorithms: Dijkstra’s Algorithm, Kruskal’s Algorithm, A* Search
  • Dynamic Programming: Knapsack Problem, Longest Common Subsequence, Fibonacci
  • Greedy Algorithms: Huffman Coding, Prim’s Algorithm
  • Divide and Conquer: Merge Sort, Quick Sort, Matrix Multiplication
  • Backtracking: N-Queens Problem, Subset Sum, Sudoku Solver

Complexity Analysis

Each implementation includes a complexity analysis section, where you can find:

  • Time Complexity: Best, average, and worst-case scenarios
  • Space Complexity: Memory usage and optimization considerations

This analysis will help you understand the efficiency and trade-offs of each algorithm and data structure in different contexts.

How to Use

  1. Clone the Repository:
    git clone https://github.com/nranzo/data_algorithms_java.git
  2. Navigate to Specific Folders: Explore specific data structures or algorithms by navigating through the folder structure.
  3. Run Examples: Each implementation comes with a main class or test cases that you can run to see the code in action.
  4. Read Documentation: Detailed comments and documentation are provided in each file to help you understand the implementation.

Contributing

Contributions are welcome! If you have a new algorithm or data structure to add, or if you want to improve existing implementations:

  1. Fork the repository
  2. Create a new branch (git checkout -b feature-branch)
  3. Commit your changes (git commit -m 'Add new feature')
  4. Push to the branch (git push origin feature-branch)
  5. Open a Pull Request

Please ensure that your contributions are well-documented and include complexity analysis.

Whereas if you simply need an implementation and corresponding documentation, please open an issue.

License

This repository is licensed under the MIT License. See the LICENSE file for details.

Problems to fix:

  1. extra/LinkedPositionalListGui.java is not working properly

Problems fixed:

  1. extra/Josephus.java was not working properly
  2. lists/ListAdapter.java was suffering from backing problem
  3. some interfaces started with H, whereas others did not
  4. lists/*.java had minor issues, now are well linked together

About

extensive and curated collection of algorithms, data structures and implementations on java

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages