📖 Scenario: Imagine you are managing a line of customers waiting to buy tickets at a counter. You want to keep track of who is next in line using a queue.
🎯 Goal: Build a simple queue using an array in Rust. You will add elements to the queue, remove elements from the queue, and display the queue's current state.
📋 What You'll Learn
Create an array-based queue with fixed size
Implement enqueue operation to add elements
Implement dequeue operation to remove elements
Print the queue elements in order
💡 Why This Matters
🌍 Real World
Queues are used in real life to manage lines, like customers waiting for service or tasks waiting to be processed.
💼 Career
Understanding queues is important for software developers working on scheduling, resource management, and data processing systems.
Progress0 / 4 steps
1
Create the queue array and initialize front and rear
Create a fixed-size array called queue of size 5 with all elements set to 0. Also create two variables front and rear both set to -1 to represent the empty queue.
DSA Rust
Hint
Use let mut queue = [0; 5]; to create the array. Use let mut front: i32 = -1; and let mut rear: i32 = -1; to initialize the queue pointers.
2
Add a variable to hold the queue size
Create a variable called size and set it to 5 to represent the maximum size of the queue.
DSA Rust
Hint
Use let size = 5; to store the queue capacity.
3
Enqueue an element into the queue
Write code to add the number 10 to the queue. First check if the queue is full by comparing rear with size - 1. If not full, increase rear by 1 and insert 10 at queue[rear]. If front is -1, set it to 0.
DSA Rust
Hint
Check if rear < size - 1. If yes, increment rear, assign 10 to queue[rear], and if front is -1, set it to 0.
4
Print the current queue elements
Use a for loop with variable i from front to rear (inclusive) to print each element in queue separated by spaces. Use println! to print the elements on one line.
DSA Rust
Hint
Use a for loop from front to rear and print each queue[i] with a space. Then print a newline.
Practice
(1/5)
1. What is the main characteristic of a queue implemented using an array?
easy
A. It follows Last-In-First-Out (LIFO) order
B. It follows First-In-First-Out (FIFO) order
C. It allows random access to elements
D. It stores elements in sorted order
Solution
Step 1: Understand queue behavior
A queue adds elements at the rear and removes from the front, so the first element added is the first removed.
Step 2: Compare with options
This behavior matches FIFO, not LIFO or random access or sorting.
Final Answer:
It follows First-In-First-Out (FIFO) order -> Option B
Quick Check:
Queue = FIFO [OK]
Hint: Remember queue = first in, first out [OK]
Common Mistakes:
Confusing queue with stack (LIFO)
Thinking queue allows random access
Assuming queue sorts elements
2. Which of the following is the correct Rust syntax to declare a fixed-size array of 5 integers for queue storage?
easy
A. let queue: [i32; 5] = [0; 5];
B. let queue = Vec<i32>::new(5);
C. let queue: [i32] = [0, 0, 0, 0, 0];
D. let queue = [5]int{0};
Solution
Step 1: Identify Rust array syntax
In Rust, fixed-size arrays are declared as [type; size], and can be initialized with a repeated value like [0; 5].
Step 2: Check options
let queue: [i32; 5] = [0; 5]; matches this syntax. let queue = Vec<i32>::new(5); uses Vec but with wrong new() usage. let queue: [i32] = [0, 0, 0, 0, 0]; misses size in type. let queue = [5]int{0}; is invalid Rust syntax.
Final Answer:
let queue: [i32; 5] = [0; 5]; -> Option A
Quick Check:
Rust array syntax = [type; size] [OK]
Hint: Rust arrays use [type; size] syntax [OK]
Common Mistakes:
Using Vec::new with size argument
Missing size in array type
Using non-Rust syntax like option D
3. Consider this Rust code snippet for a queue using an array:
let mut queue = [0; 3];
let mut front = 0;
let mut rear = 0;
// Enqueue 10
queue[rear] = 10;
rear += 1;
// Enqueue 20
queue[rear] = 20;
rear += 1;
// Dequeue
front += 1;
// Enqueue 30
queue[rear] = 30;
rear += 1;
println!("{:?}", &queue);
What is the printed output?
medium
A. [10, 0, 30]
B. [0, 20, 30]
C. [20, 30, 0]
D. [10, 20, 30]
Solution
Step 1: Trace enqueue and dequeue operations
Initially queue = [0,0,0], front=0, rear=0.
Enqueue 10: queue[0]=10, rear=1
Enqueue 20: queue[1]=20, rear=2
Dequeue: front=1 (10 is logically removed but still in array)
Enqueue 30: queue[2]=30, rear=3
Step 2: Check final queue array
Array is [10, 20, 30]. Dequeue only moves front pointer, does not clear value.
Final Answer:
[10, 20, 30] -> Option D
Quick Check:
Array stores all enqueued values [OK]
Hint: Dequeue moves front pointer, array values stay [OK]
Common Mistakes:
Assuming dequeue clears array slot
Mixing front and rear indexes
Confusing array content with logical queue content
4. Given this Rust queue code snippet, what is the error?