Are all data structures in the von Neumann architecture based on the array, or array-like?
Your question is a bit vague, but it seems that you're missing one mechanism: dynamic memory allocation. Some data structures such as linked lists are heavily based on dynamic memory allocation, and so although linked lists are very similar to arrays in function, they are implemented very differently.

Dynamic memory allocation is treated as a primitive in C. System libraries are supposed to implement the malloc() and free() primitives, with the support of the operating system. While eventually memory is accessed (in the CPU level) as one long array (perhaps some of it implemented as virtual memory), this is all hidden under the hood as far as the C programmer is considered (unless they choose to tinker with it).