Tracing the Two Queues

Here is a sequence of operations on a queue of integers that starts out empty:

queue.enqueue(17);
queue.enqueue(42);
queue.enqueue(28);
queue.dequeue();
queue.dequeue();
queue.enqueue(65);
queue.enqueue(31);
queue.enqueue(53);
Solution

enqueue(17)

          ┌────┐
head ───▶ │ 17 │ ──▶ null
          └────┘
             ▲
             │
           tail

enqueue(42)

          ┌────┐      ┌────┐
head ───▶ │ 17 │ ──▶  │ 42 │ ──▶ null
          └────┘      └────┘
                         ▲
                         │
                       tail

enqueue(28)

          ┌────┐      ┌────┐      ┌────┐
head ───▶ │ 17 │ ──▶  │ 42 │ ──▶  │ 28 │ ──▶ null
          └────┘      └────┘      └────┘
                                     ▲
                                     │
                                   tail

dequeue()

          ┌────┐      ┌────┐
head ───▶ │ 42 │ ──▶  │ 28 │ ──▶ null
          └────┘      └────┘
                         ▲
                         │
                       tail

dequeue()

          ┌────┐
head ───▶ │ 28 │ ──▶ null
          └────┘
             ▲
             │
           tail

enqueue(65)

          ┌────┐      ┌────┐
head ───▶ │ 28 │ ──▶  │ 65 │ ──▶ null
          └────┘      └────┘
                         ▲
                         │
                       tail

enqueue(31)

          ┌────┐      ┌────┐      ┌────┐
head ───▶ │ 28 │ ──▶  │ 65 │ ──▶  │ 31 │ ──▶ null
          └────┘      └────┘      └────┘
                                     ▲
                                     │
                                   tail

enqueue(53)

          ┌────┐      ┌────┐      ┌────┐      ┌────┐
head ───▶ │ 28 │ ──▶  │ 65 │ ──▶  │ 31 │ ──▶  │ 53 │ ──▶ null
          └────┘      └────┘      └────┘      └────┘
                                                 ▲
                                                 │
                                               tail
Solution

enqueue(17): front = 0, size = 1

┌────┬────┬────┬────┬────┐
│ 17 │  _ │  _ │  _ │  _ │
└────┴────┴────┴────┴────┘
   ↑
 front

enqueue(42): front = 0, size = 2

┌────┬────┬────┬────┬────┐
│ 17 │ 42 │  _ │  _ │  _ │
└────┴────┴────┴────┴────┘
   ↑
 front

enqueue(28): front = 0, size = 3

┌────┬────┬────┬────┬────┐
│ 17 │ 42 │ 28 │  _ │  _ │
└────┴────┴────┴────┴────┘
   ↑
 front

dequeue(): front = 1, size = 2

┌────┬────┬────┬────┬────┐
│  _ │ 42 │ 28 │  _ │  _ │
└────┴────┴────┴────┴────┘
        ↑
      front

dequeue(): front = 2, size = 1

┌────┬────┬────┬────┬────┐
│  _ │  _ │ 28 │  _ │  _ │
└────┴────┴────┴────┴────┘
             ↑
           front

enqueue(65): front = 2, size = 2

┌────┬────┬────┬────┬────┐
│  _ │  _ │ 28 │ 65 │  _ │
└────┴────┴────┴────┴────┘
             ↑
           front

enqueue(31): front = 2, size = 3

┌────┬────┬────┬────┬────┐
│  _ │  _ │ 28 │ 65 │ 31 │
└────┴────┴────┴────┴────┘
             ↑
           front

enqueue(53): front = 2, size = 4

┌────┬────┬────┬────┬────┐
│ 53 │  _ │ 28 │ 65 │ 31 │
└────┴────┴────┴────┴────┘
             ↑
           front
Solution

enqueue(19): front = 2, size = 5

┌────┬────┬────┬────┬────┐
│ 53 │ 19 │ 28 │ 65 │ 31 │
└────┴────┴────┴────┴────┘
             ↑
           front

The array is now full, so enqueue(76) calls grow first. grow copies the items in queue order into indices 0 to 4 of a capacity-10 array and sets front to 0. Then 76 goes to index (0 + 5) % 10, which is 5. After enqueue(76), front = 0 and size = 6:

┌────┬────┬────┬────┬────┬────┬────┬────┬────┬────┐
│ 28 │ 65 │ 31 │ 53 │ 19 │ 76 │  _ │  _ │  _ │  _ │
└────┴────┴────┴────┴────┴────┴────┴────┴────┴────┘
   ↑
 front