これはMicrosoftのインタビューの質問です。Cのファイルから最後のn行を読み込む方法
C(正確に)
を使用してファイルの
読む最後のn行これを達成するために非常に多くの方法があるかもしれませんまあ、それらのいくつかは次のようになります。
- の>最も簡単な最初のパスではすべてファイル内の行数をカウントし、2回目のパスでは最後のn行を表示します。
- >または、各行に2重リンクリストを維持し、n番目の最後のノードまでリンクリストを逆行して最後のn行を表示することができます。
- > fnameは-nソート尾のようなものを実装
- 私たちが最後に到達するまで>より多くのそれを最適化するために、我々は、nと、ラウンドロビン方式で動的に保存されたすべての行と長さの二重のポインタを持つことができますファイルの
たとえば、ファイルに10行あり、最後の3行を読み込みたい場合。バッファの配列をbuf [3] []として作成することができ、実行時に最後の行に到達するまでmallocを続けてバッファを循環的に解放し、配列の現在のインデックスを知るためのカウンタを保持します。
上記の方法のいずれかが私に正しい答えや他の一般的なアプローチ/方法を得るのに役立つ場合は誰でも私にもっと最適化されたソリューションまたはatleastガイドを教えてください。
最後の方が最適化されているようです。 –
テールの実装を見てみましょうか? http:// stackoverflow。com/questions/10164597/how-would-you-implement-tail-efficient – StarPinkER
余分な点については、ファイルの行数がn行未満の場合はエラーを返します。 –