When using arrays to implement dynamically changing abstract data types such as List, Queue, or Stack, the obvious problem that arises is that arrays themselves do not change freely. At some point, if you add enough elements to the array, you will end up running out of space.
The naive solution to this problem is to wait until the used array is exhausted, and then create a new larger array, copy all the elements from the old array to the new array and start using the new array.
A shadow array using an abstract data type implementation is an alternative to this. Instead of waiting until the old array is full, a second, larger array is created after some filling threshold is passed in the used array. Then, when elements are added to the old array, several elements are copied from the old array to the shadow array, so when the old array is full, all its elements are already copied to the new array.
" " , , , .