Fundamentals of Data Structures: An Algorithmic Approach