If you're using the 'new' and 'delete' operators, or 'malloc' and 'free' in C, it's dynamic memory allocation, yes. I don't know about "most books" but the C/C++ books I've seen call it that.
You can use pointers without doing any dynamic memory allocation, though. For example:
Code:
int x;
int * px = &x;
px is a pointer to int, but it doesn't use dynamic memory allocation. So it's quite possible to have linked lists, binary trees, and the like without doing any dynamic allocation.
As for a pointer array being faster... it depends. It's faster to declare a fixed-length array of structs than it is to dynamically allocate another one every time it's needed, so if you know in advance that you'll need, say, 100 elements in the array, it's more effective to use a normal array.