control constructs allow algorithmic steps to be represented in convenient yet unambiguous way at minimumalgorithms require constructs that perform sequential processingselection for decision-makingand iteration for repetitive control as long as the language provides these basic statementsit can be used for algorithm representation all data items in the computer are represented as strings of binary digits in order to give these strings meaningwe need to have data types data types provide an interpretation for this binary data so that we can think about the data in terms that make sense with respect to the problem being solved these low-levelbuilt-in data types (sometimes called the primitive data typesprovide the building blocks for algorithm development for examplemost programming languages provide data type for integers strings of binary digits in the computer' memory can be interpreted as integers and given the typical meanings that we commonly associate with integers ( and - in additiona data type also provides description of the operations that the data items can participate in with integersoperations such as additionsubtractionand multiplication are common we have come to expect that numeric types of data can participate in these arithmetic operations the difficulty that often arises for us is the fact that problems and their solutions are very complex these simplelanguage-provided constructs and data typesalthough certainly sufficient to represent complex solutionsare typically at disadvantage as we work through the problem-solving process we need ways to control this complexity and assist with the creation of solutions why study data structures and abstract data typesto manage the complexity of problems and the problem-solving processcomputer scientists use abstractions to allow them to focus on the "big picturewithout getting lost in the details by creating models of the problem domainwe are able to utilize better and more efficient problem-solving process these models allow us to describe the data that our algorithms will manipulate in much more consistent way with respect to the problem itself earlierwe referred to procedural abstraction as process that hides the details of particular function to allow the user or client to view it at very high level we now turn our attention to similar ideathat of data abstraction an abstract data typesometimes called an adtis logical description of how we view the data and the operations that are allowed without regard to how they will be implemented this means that we are concerned only with what the data is representing and not with how it will eventually be constructed by providing this level of abstractionwe are creating an encapsulation around the data the idea is that by encapsulating the details of the implementationwe are hiding them from the user' view this is called information hiding figure shows picture of what an abstract data type is and how it operates the user interacts with the interfaceusing the operations that have been specified by the abstract data type the abstract data type is the shell that the user interacts with the implementation is hidden one level deeper the user is not concerned with the details of the implementation the implementation of an abstract data typeoften referred to as data structurewill require that we provide physical view of the data using some collection of programming constructs and primitive data types as we discussed earlierthe separation of these two perspectives will introduction