implementation of the containerbreduce the chance of introducing errors from misuse of the list since it provides additional operations that are not appropriate for bagcprovide better coordination between different modules and designersand deasily swap out our current implementation of the bag adt for differentpossibly more efficientversion later selecting data structure the implementation of complex abstract data type typically requires the use of data structure for organizing and managing the collection of data items there are many different structures from which to choose so how do we know which to usewe have to evaluate the suitability of data structure for implementing given abstract data typewhich we base on the following criteria does the data structure provide for the storage requirements as specified by the domain of the adtabstract data types are defined to work with specific domain of data values the data structure we choose must be capable of storing all possible values in that domaintaking into consideration any restrictions or limitations placed on the individual items does the data structure provide the necessary data access and manipulation functionality to fully implement the adtthe functionality of an abstract data type is provided through its defined set of operations the data structure must allow for full and correct implementation of the adt without having to violate the abstraction principle by exposing the implementation details to the user does the data structure lend itself to an efficient implementation of the operationsan important goal in the implementation of an abstract data type is to provide an efficient solution some data structures allow for more efficient implementation than othersbut not every data structure is suitable for implementing every adt efficiency considerations can help to select the best structure from among multiple candidates there may be multiple data structures suitable for implementing given abstract data typebut we attempt to select the best possible based on the context in which the adt will be used to accommodate different contextslanguage libraries will commonly provide several implementations of some adtsallowing the programmer to choose the most appropriate following this approachwe introduce number of abstract data types throughout the text and present multiple implementations as new data structures are introduced the efficiency of an implementation is based on complexity analysiswhich is not introduced until later in thuswe postpone consideration of the efficiency of an implementation in selecting data structure until that time in the meantimewe only consider the suitability of data structure based on the storage and functional requirements of the abstract data type