A dynamic data structure is one that is not fixed in size and may not be contiguous in the computer's main memory. This is implemented through the use of pointers which 'point' to the location of the next item in the data structure in memory. The advantage of this is that you do not have to specify the size of the data when you allocate memory to it, it can grow and shrink in size dynamically. The main disadvantage, however, is that it is slower to access a particular item in the structure, when compared to static data structures, requiring you to proceed through each to find it.
By contrast, a static data structure is fixed in size and contiguous in memory; means you must specify its size when it is defined. However, the upside of this is that you can easily access any item within the structure as you know where it is located in memory without going through the entire structure.