•To study the concept of algorithms and the concept of algorithm efficiency.
• To study the concept of abstract data types (ADTs) and the abstract data types most commonly used in software development (stacks, queues, lists, and sets, . . . )
• To study the basic data types most commonly used to represent these abstract data types (arrays, linked lists, and binary search trees, . . . ), together with algorithms operating on these data structures.