3. What will be the output of the following Rust code implementing a queue using two stacks?
struct Queue {
stack1: Vec<i32>,
stack2: Vec<i32>,
}
impl Queue {
fn new() -> Self {
Queue { stack1: Vec::new(), stack2: Vec::new() }
}
fn enqueue(&mut self, val: i32) {
self.stack1.push(val);
}
fn dequeue(&mut self) -> Option<i32> {
if self.stack2.is_empty() {
while let Some(x) = self.stack1.pop() {
self.stack2.push(x);
}
}
self.stack2.pop()
}
}
fn main() {
let mut q = Queue::new();
q.enqueue(10);
q.enqueue(20);
q.enqueue(30);
println!("{:?}", q.dequeue());
println!("{:?}", q.dequeue());
q.enqueue(40);
println!("{:?}", q.dequeue());
println!("{:?}", q.dequeue());
}