The proper definition of data and their relations is a key element in software engineering. So much so that modern object-oriented programming talks of ``objects'' that may be data or program pieces, and usually contain some of both. Whilst there is no discussion about their conceptual necessity (
[Maurer77]), the practical implementation of data structures is far from agreed upon.
Standard programming languages offer more or less limited data structuring concepts as part of the programming language. Most typically, they are limited in the sense that they get declared once and remain rigidly the same; the concept of dynamic data structures allows structural changes during execution of an application; this is, of course, more difficult to define and implement (see [King92]).