of the algorithm indeedthis is what normally drives the development of new data structures and algorithms we shall study the general ideas concerning efficiency in and then apply them throughout the remainder of these notes data structuresabstract data typesdesign patterns for many problemsthe ability to formulate an efficient algorithm depends on being able to organize the data in an appropriate manner the term data structure is used to denote particular way of organizing data for particular types of operation these notes will look at numerous data structures ranging from familiar arrays and lists to more complex structures such as treesheaps and graphsand we will see how their choice affects the efficiency of the algorithms based upon them often we want to talk about data structures without having to worry about all the implementational details associated with particular programming languagesor how the data is stored in computer memory we can do this by formulating abstract mathematical models of particular classes of data structures or data types which have common features these are called abstract data typesand are defined only by the operations that may be performed on them typicallywe specify how they are built out of more primitive data types ( integers or strings)how to extract that data from themand some basic checks to control the flow of processing in algorithms the idea that the implementational details are hidden from the user and protected from outside access is known as encapsulation we shall see many examples of abstract data types throughout these notes at an even higher level of abstraction are design patterns which describe the design of algorithmsrather the design of data structures these embody and generalize important design concepts that appear repeatedly in many problem contexts they provide general structure for algorithmsleaving the details to be added as required for particular problems these can speed up the development of algorithms by providing familiar proven algorithm structures that can be applied straightforwardly to new problems we shall see number of familiar design patterns throughout these notes textbooks and web-resources to fully understand data structures and algorithms you will almost certainly need to complement the introductory material in these notes with textbooks or other sources of information the lectures associated with these notes are designed to help you understand them and fill in some of the gaps they containbut that is unlikely to be enough because often you will need to see more than one explanation of something before it can be fully understood there is no single best textbook that will suit everyone the subject of these notes is classical topicso there is no need to use textbook published recently books published or years ago are still goodand new good books continue to be published every year the reason is that these notes cover important fundamental material that is taught in all university degrees in computer science these days there is also lot of very useful information to be found on the internetincluding complete freely-downloadable books it is good idea to go to your library and browse the shelves of books on data structures and algorithms if you like any of themdownloadborrow or buy copy for yourselfbut make sure that most of the