0
0
DSA Cprogramming~20 mins

Adjacency List vs Matrix When to Choose Which in DSA C - Compare & Choose

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Graph Representation Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
Output of adjacency matrix after adding edges
What is the printed adjacency matrix after adding edges between nodes 0-1, 0-2, and 1-2 in a graph with 3 nodes?
DSA C
int graph[3][3] = {0};
graph[0][1] = 1;
graph[1][0] = 1;
graph[0][2] = 1;
graph[2][0] = 1;
graph[1][2] = 1;
graph[2][1] = 1;
for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 3; j++) {
        printf("%d ", graph[i][j]);
    }
    printf("\n");
}
A[[1,1,1],[1,1,1],[1,1,1]]
B[[0,1,0],[1,0,1],[0,1,0]]
C[[0,1,1],[1,0,1],[1,1,0]]
D[[0,0,0],[0,0,0],[0,0,0]]
Attempts:
2 left
💡 Hint
Think about how edges are represented in a matrix for an undirected graph.
🧠 Conceptual
intermediate
1:30remaining
Choosing adjacency list for sparse graphs
Why is an adjacency list preferred over an adjacency matrix for a graph with many nodes but very few edges?
ABecause adjacency lists use less memory by storing only existing edges.
BBecause adjacency lists require a fixed size regardless of edges.
CBecause adjacency matrices are faster to traverse for sparse graphs.
DBecause adjacency matrices cannot represent sparse graphs.
Attempts:
2 left
💡 Hint
Think about memory usage when most possible edges do not exist.
Predict Output
advanced
2:30remaining
Output of adjacency list after adding edges
What is the printed adjacency list after adding edges 0->1, 0->2, and 1->2 in a directed graph with 3 nodes?
DSA C
#include <stdio.h>
#include <stdlib.h>

typedef struct Node {
    int dest;
    struct Node* next;
} Node;

Node* createNode(int dest) {
    Node* newNode = (Node*)malloc(sizeof(Node));
    newNode->dest = dest;
    newNode->next = NULL;
    return newNode;
}

int main() {
    Node* graph[3] = {NULL, NULL, NULL};
    // Add edge 0->1
    Node* node1 = createNode(1);
    node1->next = graph[0];
    graph[0] = node1;
    // Add edge 0->2
    Node* node2 = createNode(2);
    node2->next = graph[0];
    graph[0] = node2;
    // Add edge 1->2
    Node* node3 = createNode(2);
    node3->next = graph[1];
    graph[1] = node3;
    // Print adjacency list
    for (int i = 0; i < 3; i++) {
        printf("%d: ", i);
        Node* temp = graph[i];
        while (temp) {
            printf("%d -> ", temp->dest);
            temp = temp->next;
        }
        printf("NULL\n");
    }
    return 0;
}
A
0: 1 -&gt; 2 -&gt; NULL
1: 2 -&gt; NULL
2: NULL
B
0: NULL
1: NULL
2: NULL
C
0: 1 -&gt; NULL
1: 2 -&gt; NULL
2: NULL
D
0: 2 -&gt; 1 -&gt; NULL
1: 2 -&gt; NULL
2: NULL
Attempts:
2 left
💡 Hint
New nodes are added at the head of the list, so the last added edge appears first.
🧠 Conceptual
advanced
1:30remaining
When adjacency matrix is better than adjacency list
In which scenario is an adjacency matrix a better choice than an adjacency list?
AWhen the graph has very few edges and memory is limited.
BWhen the graph is dense and quick edge lookup is needed.
CWhen edges need to be stored with variable weights efficiently.
DWhen the graph is very large and sparse.
Attempts:
2 left
💡 Hint
Think about speed of checking if an edge exists between two nodes.
🚀 Application
expert
2:00remaining
Memory usage comparison for large sparse graph
Consider a graph with 10,000 nodes and 15,000 edges. Which data structure uses less memory and why?
AAdjacency list uses less memory because it stores only existing edges.
BAdjacency matrix uses less memory because it uses a fixed size array.
CBoth use the same memory because they represent the same graph.
DAdjacency matrix uses less memory because it stores edges as bits.
Attempts:
2 left
💡 Hint
Think about how many entries adjacency matrix stores versus adjacency list.