data structures & algorithms with JavaScript by Michael McMillan