preface searching and sorting introduces the concepts of searching and sorting and illustrates how the efficiency of some adts can be improved when working with sorted sequences search operations for an unsorted sequence are discussed and the binary search algorithm is introduced as way of improving this operation three of the basic sorting algorithms are also introduced to further illustrate the use of algorithm analysis new implementation of the set adt is provided to show how different data structures or data organizations can change the efficiency of an adt linked structures provides an introduction to dynamic structures by illustrating the construction and use of the singly linked list using dynamic storage allocation the common operations -traversalsearchinginsertionand deletion -are presented as is the use of tail reference when appropriate several of the adts presented in earlier are reimplemented using the singly linked listand the run times of their operations are compared to the earlier versions new implementation of the sparse matrix is especially eye-opening to many students as it uses an array of sorted linked lists instead of single python list as was done in an earlier stacks introduces the stack adt and includes implementations using both python list and linked list several common stack applications are then presentedincluding balanced delimiter verification and the evaluation of postfix expressions the concept of backtracking is also introduced as part of the application for solving maze detailed discussion is provided in designing solution and partial implementation queues introduces the queue adt and includes three different implementationspython listcircular arrayand linked list the priority queue is introduced to provide an opportunity to discuss different structures and data organization for an efficient implementation the application of the queue presents the concept of discrete event computer simulations using an airline ticket counter as the example advanced linked lists continues the discussion of dynamic structures by introducing collection of more advanced linked lists these include the doubly linkedcircularly linkedand multi linked lists the latter provides an example of linked structure containing multiple chains and is applied by reimplementing the sparse matrix to use two arrays of linked listsone for the rows and one for the columns the doubly linked list is applied to the problem of designing and implementing an edit buffer adt for use with basic text editor recursion introduces the use of recursion to solve various programming problems the properties of creating recursive functions are presented along with common examplesincluding factorialgreatest common divisorand the towers of hanoi the concept of backtracking is revisited to use recursion for solving the eight-queens problem