for clarification of your 1^{st} doubt, you can read https://en.wikipedia.org/wiki/Van_Emde_Boas_tree

for 2^{nd} doubt, i hope there is no need to use doubly linked list

array [1...W+1] ===> already array is sorted by edge weights

where **ith** slot holds a **doubly linked list** of the edges with weight i.

let assume there are 5 edges with weight 15,

they use double linked list due to efficiently usage, if you use single linked list, after extracting one edge from it, you need to update it's previous node, next pointer. ( but no problem with using singly linked list )

but when you decrease the key, let the 3rd edge in weight 15,....

it need to update 2nd edge next pointer, array element points to new edge ( but no problem with using singly linked list )