C. The performance of delete operation in doubly linked list chaining is O(1). You simply have to delete the element x in the list T[h(x.key)] and you don't need to get the previous pointer to delete a node in linked list as it's doubly linked list.
Whereas, in open chaining, you need to probe for the element to delete and mark it with 'X' if found. Essentially it will depend on the number of consecutive locations filled which will make it O(n) I believe, where n < size of the hash table.
B. is wrong because extra space for links is required.
A. I feel that Chaining is faster than Open addressing but essentially the worst case performance in both cases boils down to O(n), as you have to traverse the linked list in chaining and probe for finding the element in open addressing. So, in the first case of chaining : all elements are in a single bucket => O(n)
And in open addressing: all places except last are filled which makes load factor < 1 (a requirement for open addressing) and you have to probe each and every location to decide whether the element is there or not.
Correct me if I am wrong, but I feel that worst cases of both are O(n) and hence, A is wrong.