I see.. so you split up a mesh into its convex sub-meshes (with all triangles clockwise), and you have a winged-edge-equivalent structure (that's exactly what you mean by the adjacency information for each vertex, edge and face).
Yes so, the problem remains with finding the first intersecting edge. If you randomize the picking of the first vertex, then you have the best average case performance, but it can still happen that it's the worst case.
The algorithm I used so far, needs a preordered mesh as input mesh.
For each Triangle you note its zMin and zMax. That's simply the smallest (largest) z component of the triangles vertices.
Then you order the triangles by their zMin. (You could also save the mesh to file in that face order)
Then you can intersect the mesh with any plane in distance D parallel to the xy-plane (meaning the plane containing the x and y-axis), pretty optimally, by disregarding all triangles that either have zMax < D or zMin > D.
Pretty restrictive because it works only for planes that are parallel to the xy plane, right?