Data structures is about how data is organized, structured, and stored in memory, as well as how this data is retrieved and manipulated. Since computer programming began, many data structures have been developed, each having its own name, properties, and characteristics. Understanding the existing data structures enables a programmer to choose the proper data structures to solve a problem. The programmer has to decide if what has to be done can be accomplished by reusing or modifying existing data structures, rather than reinventing the wheel. Let us start this way, in building a program a piece of data does not stand-alone and there is a major concern as to how the data are related to each other in a program. For each kind of relationship, there is a predefined structure, which conceptually (abstraction) or functionally (implementation), expresses how the data is stored, retrieved, or manipulated. Data can be structured as an array, struct, or a file; and these are the first data structures that programmers are exposed to. However, talking about data structures is more about major concepts such as stacks, queues, trees, hashing, sets, and graphs. The understanding of different data structures enables the programmer to solve a problem efficiently (time and space), such as applying and/or reusing the existing, tested algorithms. A large library of algorithms for data structure usage has existed for many years and still developing new algorithms, or optimizations of the existing ones, is a major topic of advanced computing. Let’s put it this way, in the field of computer science there are a series of important algorithms for solving certain problems, each having its own method of organizing data so that variables (objects) are created; this way of creating objects is known as data structures. You will observe that algorithms and data structures are very closely related and, in fact, a program is created by the combination of algorithms and data structures. In many occasions, as soon as the choice for the data structure is made, the rest of the program will easily follow. The storage for a data structures could be allocated during compile time- static data structures or during run time – dynamic data structures. The major data structures are stacks, queues, trees and graphs. However, each of these data structures can be implemented either statically, for example by arrays, or dynamically by linked lists. There are trade-offs in selecting a static data structure versus a dynamic data structure that will be discussed in detail.