The properties which are required are as follows :
a) Since queue length is not fixed , hence we can use either of the three mentioned data structures for our purpose
b) Also it is required that enqueue and dequeue operations are to be done in O(1) time.This can also be done for all.For linked list , we can maintain two pointers one pointing to front element from where dequeue will take place and the other pointing to rear element for enqueue operation.Hence just by making a few change of pointers , we are able to enqueue an dequeue using single and double linked list.Also can be done using dynamic array by maintaining index of front and rear elements of the queue.
Hence D) should be the correct option.