It looks to me like you have asked two completely different questions here.
1. "How do I get a quaternion to move from one position to another?"
2. "How do I get a quaternion to move from one angle to another?"
The answer to question one is you don't/can't.
For game programming purposes, quaternions are pretty straight forward. Think of them as an arrow that lives in another plane of existence. You can't really see it or deal with it directly, but you can ask it where it points and tell it how to rotate. As long as you trust that it will be where it's supposed to be once it completes that rotation, you can use it to store orientation information.
The primary difference between a matrix and a quaternion is that a 4by4 matrix can not only contain an orientation, but a position and scale/skew info as well. A quaternion can't. It can only hold an orientation. So, anything regarding position is a non-starter. When working with quaternions, you have to store a position separately. With that as a given, the answer to your question is probably self evident, because the positions are likely stored as vectors and you can do the same thing you did with a matrix.
Quaternions are not something you really "understand". They are multi-dimensional imaginary numbers. Just the concept of imaginary numbers is enough to blow most people's minds, then kick it up several notches to many dimensions of imaginary numbers and you're just asking for your brain to explode and that's a mess no one wants to clean up.
In game programming we use a small sub-set of the quaternion possible values by forcing it to be a unit quaternion. By forcing it to be a unit quaternion, we take 4 dimensions that we can't really understand and force the value to live on the surface of a sphere. Because it now lives on the surface of a sphere, you can think of it as an arrow that points to that place on the sphere. (And maybe a second tiny arrow that lives on and describes the facing on the surface of the sphere. Really, you might just think of it as this second tiny arrow living on the surface of the sphere. But the main big arrow describes the orientation on two axes, while the tiny arrow describes the rotation around the third axis.)
It's that 4th dimension that makes a quaternion different from a vertex normal. A normal doesn't have any way to know the rotation around it's own axis. So, you need 3 of them - like you have in a matrix - to describe an orientation. This can be done with a 3by3 matrix, but by adding another column and row, you get the added benefit of storing a position with it. So, a 3by3 matrix of mutually perpendicular vectors can basically do the same work as a quaternion. Quaternions and matrices are in many ways similar in the way we use them.
Quaternions on the other hand do know the amount of rotation around themselves. Because of that 4th dimension - in order to stay on the sphere (remain a unit quaternion), all 4 numbers must be adjusted to maintain that length of 1 when you rotate it on it's own axis. This makes every orientation of a quaternion unique, much like 3 mutually perpendicular vectors in a 3by3 matrix.
Don't try looking at the 4 values stored in the quaternion. They live in a 4 dimensional reality that is not going to make sense. Using quaternions is like using a calculator. You don't know how it works. You don't care how it works. All you care about is that when you give it the correct input, it gives you the correct output.
Just think of the quaternion as storing an orientation, which can be thought of as an arrow, or even like a 3by3 matrix of 3 mutually perpendicular vectors/arrows.
So, now on to question two.
If you have one quaternion that describes one orientation and another that describes a second orientation, you can subtract one quaternion from the other to give you the rotation required to change one into the other. I assume you can use SLERP to interpolate one quaternion to another.
For DirectX, here's MSDN's page on Quaternion SLERP. Don't let LERP and SLERP scare you if you are not familiar with them. All they are is a weighted average. It's exactly what you're looking for here. You feed it two quaternions and a percentage value of how far it is transformed from one to the other. (1.0 is 100%, so 0.4 is 40%, etc.) Interpolation is just a weighted average. But that assumes a straight line between two points. Here we're describing a curve between two points on a circle/sphere and so the interpolation needs to be curved instead of straight which is why you use SLERP instead of LERP.
Your quaternion can then be converted to a rotation matrix, to get the value put back into a matrix afterwards. So, you can pull a quaternion out of a matrix, then convert the quaternion back into a matrix, so that you can then combine it with the original matrix. This allows you to use quaternions to rotate matrices.