Graphs
A graph is vertices connected by edges — more general than a tree because cycles are allowed and any node can connect to any other. The choices you make when representing one matter: adjacency list (each node stores its neighbours) is compact and fast to iterate neighbours — good for sparse graphs, which is most real-world ones (social networks, road maps, web links); adjacency matrix is an n×n boolean/weight matrix — O(1) edge-existence check but O(n²) memory, only worth it for dense graphs. Orthogonal distinctions: directed vs undirected (Twitter follows are directed, Facebook friendships aren't), weighted vs unweighted (road distance vs just "connected"), cyclic vs acyclic (DAGs — directed acyclic graphs — underpin build systems, dependency resolvers, and version-control history). The algorithms (graph algorithms) are where graphs earn their keep.