Are all data structures in the von Neumann architecture based on the array, or array-like?

I am an old Pythonista now learning C and how various data structures and types are implemented, such as binary trees and hash tables. Learning about the latter, leads me understand that the hash function servers the purpose of computing from the key the index in the array where the value is stored. I have also learned that trees may be stored as arrays. Given that arrays are said to be efficient (for lookup, if not insert/delete) due to the way they match memory addressing in the von Neumann architecture, is it generally the case that all other structures are basically "supersets" or "super-structures" of the array?

After all, the array is nothing more than a contiguous collection of memory "cells", so we can think of an int as a single cell array. And we can think of a struct as an array where elements are not necessarily of the same type. I struggle to think how any other data structure could be constructed in any other way, but I guess it's best that I ask here to be sure.

EDIT: Just to be perfectly clear and correct, I do understand that a memory cell and a data element are not necessarily the same thing, an element may occupy more than one memory cell. The distinction between the two is a minor detail that shouldn't detract from the question.

• Would you consider linked lists to be "array-like"? – Yuval Filmus Oct 28 '19 at 9:35
• My question is about how the structure is implemented, not whether the structure is itself array-like. I wouldn't consider a linked list to be array-like, but it would be part of my question: are linked lists implemented with arrays? Are all data structures so implemented? – Theo d'Or Oct 28 '19 at 9:38
• CPUs access memory as a big array. In this sense, everything is an array. – Yuval Filmus Oct 28 '19 at 9:41
• But does that also mean every structure is implemented with arrays? In addition to structs and primitive values like ints, floats and chars, which are array-like as indicated in my question. I want to understand whether trees, linked lists etc. are using arrays for their implementation. – Theo d'Or Oct 28 '19 at 10:52
• I'm not sure what it means for a data structure to be implemented "with arrays". That's why I asked you about linked lists. I suggest taking a look at a standard implementation of linked lists in C. – Yuval Filmus Oct 28 '19 at 10:54

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).