If we need FIFO or LIFO collections (with basically push
, pop
and front
/back
) what should we use in Rust? Something like std::queue
or std::stack
from C++.
Stack in Rust To create a new stack, we can use the following syntax. Copy let s = Stack { stack: Vec::new() };
queues provides a number of efficient FIFO Queue data structures for usage in your libraries. These are all implemented on top of rust's Vector type. A queue is a linear data structure that commonly defines three methods: add : Also called queue or push , this adds elements to the queue.
Rust queue is a data structure that is used to store the elements, queue in Rust works in an FIO manner that means first in first out. This is a standard queue that is available inside the rust collection library and the queue is a linear data structure.
First of all, Rust does not offer (in the Standard library) any library with guaranteed latency for adding elements: Rust collections may generally allocate memory when adding new elements, and allocating memory may take an unbounded amount of time in the worst case.
That being said, there are two contenders for each case:
Vec
or LinkedList
(both feature pop_back
and push_back
)VecDeque
or LinkedList
(both feature pop_front
and push_back
)The difference between Vec*
and LinkedList
is that the latter is simplistic: for each call to push_back
a memory allocation is made. On the one hand, this is great because it means that the cost of push_back
is independent of the number of elements already in the collection, on the other hand... well, a memory allocation may take a really long time.
The former is a bit more complicated:
push_back
as long as there is excess capacitypush_back
even when not reserving excess capacity ahead of timeIn general, I would advise to use Vec
for a stack and VecDeque
for a queue.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With