we study data structures so that we can learn to write more efficient programs but why must programs be efficient when new computers are faster every yearthe reason is that our ambitions grow with our capabilities instead of rendering efficiency needs obsoletethe modern revolution in computing power and storage capability merely raises the efficiency stakes as we computerize more complex tasks the quest for program efficiency need not and should not conflict with sound design and clear coding creating efficient programs has little to do with "programming tricksbut rather is based on good organization of information and good algorithms programmer who has not mastered the basic principles of clear design is not likely to write efficient programs conversely"software engineeringcannot be used as an excuse to justify inefficient performance generality in design can and should be achieved without sacrificing performancebut this can only be done if the designer understands how to measure performance and does so as an integral part of the design and implementation process most computer science curricula recognize that good programming skills begin with strong emphasis on fundamental software engineering principles thenonce programmer has learned the principles of clear program design and implementationthe next step is to study the effects of data organization and algorithms on program efficiency approachthis book describes many techniques for representing data these techniques are presented within the context of the following principles each data structure and each algorithm has costs and benefits practitioners need thorough understanding of how to assess costs and benefits to be able to adapt to new design challenges this requires an understanding of the principles of algorithm analysisand also an appreciation for the significant effects of the physical medium employed ( data stored on disk versus main memoryxiii