"advancedstructureshoweverare characterized by their change of value and structure during the execution of program more sophisticated techniques are therefore needed for their implementation the sequence appears as hybrid in this classification it certainly varies its lengthbut that change in structure is of trivial nature since the sequence plays truly fundamental role in practically all computer systemsits treatment is included in chap the second treats sorting algorithms it displays variety of different methodsall serving the same purpose mathematical analysis of some of these algorithms shows the advantages and disadvantages of the methodsand it makes the programmer aware of the importance of analysis in the choice of good solutions for given problem the partitioning into methods for sorting arrays and methods for sorting files (often called internal and external sortingexhibits the crucial influence of data representation on the choice of applicable algorithms and on their complexity the space allocated to sorting would not be so large were it not for the fact that sorting constitutes an ideal vehicle for illustrating so many principles of programming and situations occurring in most other applications it often seems that one could compose an entire programming course by choosing examples from sorting only another topic that is usually omitted in introductory programming courses but one that plays an important role in the conception of many algorithmic solutions is recursion thereforethe third is devoted to recursive algorithms recursion is shown to be generalization of repetition (iteration)and as such it is an important and powerful concept in programming in many programming tutorialsit is unfortunately exemplified by cases in which simple iteration would suffice insteadchap concentrates on several examples of problems in which recursion allows for most natural formulation of solutionwhereas use of iteration would lead to obscure and cumbersome programs the class of backtracking algorithms emerges as an ideal application of recursionbut the most obvious candidates for the use of recursion are algorithms operating on data whose structure is defined recursively these cases are treated in the last two for which the third provides welcome background deals with dynamic data structuresi with data that change their structure during the execution of the program it is shown that the recursive data structures are an important subclass of the dynamic structures commonly used although recursive definition is both natural and possible in these casesit is usually not used in practice insteadthe mechanism used in its implementation is made evident to the programmer by forcing him to use explicit reference or pointer variables this book follows this technique and reflects the present state of the art is devoted to programming with pointersto liststrees and to examples involving even more complicated meshes of data it presents what is often (and somewhat inappropriatelycalled list processing fair amount of space is devoted to tree organizationsand in particular to search trees the ends with presentation of scatter tablesalso called "hashcodeswhich are often preferred to search trees this provides the possibility of comparing two fundamentally different techniques for frequently encountered application programming is constructive activity how can constructiveinventive activity be taughtone method is to crystallize elementary composition priciples out many cases and exhibit them in systematic manner but programming is field of vast variety often involving complex intellectual activities the belief that it could ever be condensed into sort of pure recipe teaching is mistaken what remains in our arsenal of teaching methods is the careful selection and presentation of master examples naturallywe should not believe that every person is capable of gaining equally much from the study of examples it is the characteristic of this approach that much is left to the studentto his diligence and intuition this is particularly true of the relatively involved and long example programs their inclusion in this book is not accidental longer programs are the prevalent case in practiceand they are much more suitable for exhibiting that elusive but essential ingredient called style and orderly structure they are also meant to serve as exercises in the art of program readingwhich too often is neglected in favor of program writing this is primary motivation behind the inclusion of larger programs as examples in their entirety the