for clarification of your 1st doubt, you can read https://en.wikipedia.org/wiki/Van_Emde_Boas_tree
for 2nd 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 )