In reply to jh_veryveri:
Q1: yes, pushing a struct onto a queue means copying the struct. For a large struct, wrapping that data in a class and copying its handle might be more efficient
Q3: the IEEE standard for SystemVerilog does not say anything about how to implement any construct. There are other ways of implementing a queue besides a linked list or array; sometimes a combination of ways. I would assume pushing/popping one element of a queue from the front or back of the queue will be most efficient.