Implementation of array of queues
25 views (last 30 days)
Show older comments
ROSHITH SEBASTIAN
on 6 May 2020
Commented: Guillaume
on 9 May 2020
Since matlab does not support queues, I am using arrays to handle the queueing functionality.
I have to implement an array of queues, which each queue of different length. 2D arrays in matlab support only matrices, hence should be of same no. of elements in each queue which is not my requirement.
I imported Java implementation of linkedlist, but it does not support struct or a class object. The element to be added into a queue is a struct or a class object.
How can I handle this in the most efficient way?
0 Comments
Accepted Answer
John D'Errico
on 6 May 2020
Edited: John D'Errico
on 6 May 2020
Standard arrays must be rectangular. However cell arrays are the perfect solution.
C = {1:3, 1:5,1:8}
C =
1×3 cell array
{1×3 double} {1×5 double} {1×8 double}
>> C{:}
ans =
1 2 3
ans =
1 2 3 4 5
ans =
1 2 3 4 5 6 7 8
You create and index them using curly braces, thus {}.
C{3}
ans =
1 2 3 4 5 6 7 8
And a cell array can contain anything at all, including structs.
Of course, an array of structs is also possible, and a struct can act as a container for anything too.
6 Comments
Guillaume
on 9 May 2020
As a complement to my answer in your previous question, I've written you an implementation of a queue which should have good performance.
More Answers (1)
Guillaume
on 6 May 2020
Edited: Guillaume
on 6 May 2020
You may want to bite the bullet and implement your own queue class in matlab as I've suggested before.
Otherwise, one possibility would be to add a level of indirection to your current code. Instead of storing the objects in the queue(s), store them as values in a containers.Map and store the corresponding key in the queue. Ideally, the key would be a hash of the object but since matlab doesn't have a built-in hashing function and since containers.Map doesn't even say if it's implemented as a hashmap you could simply use continuously increasing integers. So the algorithm would go like this:
- set up:
keycount = 0;
queueelements = containers.Map;
queue = .. %your queue implementation
- to enqueue object s:
keycount = keycount + 1;
queueelements(keycount) = s;
queue.enqueue(keycount);
- to dequeue object s:
key = queue.dequeue;
s = queueelements(key);
queueelements.remove(key);
edit note however that the performance of containers.Map in matlab is ... not great.
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!