reordering of some topics for examplethe on recursion and hashing can be presented at any time after the discussion of algorithm analysis in abstract data types introduces the concept of abstract data types (adtsfor both simple typesthose containing individual data fieldsand the more complex typesthose containing data structures adts are presented in terms of their definitionuseand implementation after discussing the importance of abstractionwe define several adts and then show how well-defined adt can be used without knowing how its actually implemented the focus then turns to the implementation of the adts with an emphasis placed on the importance of selecting an appropriate data structure the includes an introduction to the python iterator mechanism and provides an example of user-defined iterator for use with container type adt arrays introduces the student to the array structurewhich is important since python only provides the list structure and students are unlikely to have seen the concept of the array as fixed-sized structure in first course using python we define an adt for one-dimensional array and implement it using hardware array provided through special mechanism of the -implemented version of python the two-dimensional array is also introduced and implemented using - array of arrays the array structures will be used throughout the text in place of the python' list when it is the appropriate choice the implementation of the list structure provided by python is presented to show how the various operations are implemented using - array the matrix adt is introduced and includes an implementation using two-dimensional array that exposes the students to an example of an adt that is best implemented using structure other than the list or dictionary sets and maps this reintroduces the students to both the set and map (or dictionaryadts with which they are likely to be familiar from their first programming course using python even though python provides these adtsthey both provide great examples of abstract data types that can be implemented in many different ways the also continues the discussion of arrays from the previous by introducing multi-dimensional arrays (those of two or more dimensionsalong with the concept of physically storing these using one-dimensional array in either row-major or column-major order the concludes with an example application that can benefit from the use of three-dimensional array algorithm analysis introduces the basic concept and importance of complexity analysis by evaluating the operations of python' list structure and the set adt as implemented in the previous this information will be used to provide more efficient implementation of the set adt in the following the concludes by introducing the sparse matrix adt and providing more efficient implementation with the use of list in place of two-dimensional array xv