## Algorithms

### Linked List

Linked list is a linear data structure that consists of a sequence of elements, each element points to the next element in the sequence. This page shows the process of insert, delete and search for elements in the linked list.

Try### Heap

Visualization of heap operations, including insertions and deletions. Dynamically displays each step of the operation to help understand the principles of heap operations.

Try### Stack

Stack is a linear data structure that follows the Last In First Out (LIFO) principle. This page shows the process of push, pop and adjust the height of the stack.

Try### Hash Table

Hash table is a data structure that implements an associative array abstract data type, a structure that can map keys to values. This page shows the process of insert, delete and search for key-value pairs in the hash table.

Try### Dynamic Programming (Coin Change)

Visualization of the dynamic programming coin change algorithm. Set the target amount and the available coin denominations, click the step-by-step calculation button, and observe how the optimal solution is found step by step. The state transition process column of the output shows how the algorithm builds the solution of the larger problem from smaller problems.

Try### Consistent Hash Ring

The hash ring visualization of consistent hashing allows you to clearly and intuitively understand the key value allocation of consistent hashing, and add key value migration for deleting nodes. It also supports setting up virtual nodes (shadow nodes) to understand the effect of distribution balance optimization.

Try### JumpHash

Jumphash is a consistent hashing algorithm that provides a balance between the number of keys assigned to each node and the number of nodes. This page allows you to visualize the process of adding keys to the jump hash and checking for key existence.

Try### Hanoi Tower

Experience the classic Tower of Hanoi puzzle in an interactive web application. Challenge yourself with adjustable disk numbers, choose between manual and automatic modes, and receive hints to solve the puzzle.

Try### Dijkstra Shortest Path

Given a network, you can set the weights between different nodes, and after selecting the starting point, you can calculate the shortest path to other nodes.

Try### A* Pathfinding

Visualization of the A* pathfinding algorithm. Set obstacles, start and end points in a network, and watch the pathfinding process.

Try### BFS Pathfinding

Visualization of the Breadth-First Search pathfinding algorithm. Set obstacles, start and end points in a network, and watch the pathfinding process.

Try### Trie

Trie is a tree-like data structure that is used to store a dynamic set of strings. This page shows the process of insert, delete and search for strings in the trie.

Try### Skip List

Skip list is a data structure that allows fast search within an ordered sequence of elements. This page shows the process of insert, delete and search for elements in the skip list.

Try### Bloom Filter

Bloom filter is a space-efficient probabilistic data structure that is used to test whether an element is a member of a set. This page allows you to visualize the process of adding keys to the bloom filter and checking for key existence.

Try### Rate Limit

Rate limiting is a strategy to control the rate of traffic sent or received by a network. Fixed window rate limiting and sliding window rate limiting are the most common rate limiting algorithms. This page shows the characteristics and comparison of these two algorithms.

Try### Token Bucket

Token bucket is a rate limiting algorithm that can be used to control the rate of traffic. You can set the bucket capacity, token generation rate, and request rate, and then draw the curve of successful or failed requests.

Try