(donning flame retardant gear...)
1. odds are your graphics library uses MATs not quats internally . so you have to covert to draw anyway (or it does it for you). so you might as well just use mats for everything. quats are preferred for lerping between two orientations, in almost all other cases, a MAT will do. MATs (eulers) are more intuitive to work with. When concatenating finite discrete rotations, Quats degenerate about half as fast as mats due to floating point error, but still must be re-ortho-normalized.
2. flight sims use local rotations, not global. you'll need the "rotation about an arbitrary axis" formula (IE angle-axis formula), not the normal (global) rotation formulas.
3. both mats and quats suffer from floating point error as you append small discrete rotations to your ship's orientation, this requires re-ortho-normalization to guarantee forward, up, and right remain mutually perpendicular and do not become skewed. Gauss' algo is used for mats. Quats have an analogous algo.
so orientation is stored in a mat (fwd, up, and right vectors), rot about arb axis is used to turn, and then you re-ortho-normalize. can also be done with quats, just less intuitive.
note that flight sims are about the only type of game that uses 6DOF and local rotations. so when you start asking about these things, you'll find 90% of gamedevs have no idea what you're talking about. so you'll get a lot of answers that apply to storing orientation and other such things when using global, not local rotations.
and now for the acid test:
once you've correctly implemented 6DOF and local rotations, you should be able to begin at any arbitrary orientation, do a 360 around any local axis, and come back to exactly the same pixel in front of you when you're done - no drift whatsoever. then you know you got it right.