These three data structures are ones of the most difficult I ever had to code