操作最後n個資料元素 類問題的解題思想

2021-05-23 21:25:52 字數 876 閱讀 2436

題目的提出是這樣的:

tail [-n] filename

其中,tail為命令名;引數filename為文字檔案名;引數[-n]表示要列印的行數,該引數是可選的,預設值為10。

要求是寫乙個程式實現這個命令:

這個題目可以有以下兩種思路:

1)設定兩個指標p,q,初始時兩個指標都指向檔案的第一行。演算法開始,第乙個指標p開始走,走到第n個位置時,第二個位置的指標q開始走,每次p和q都向前走一步.....當p指向檔案最後一行的下乙個位置時,q恰好指向倒數第n行的行首,這個時候列印q所指的一行資料,q向下走一行,列印,走一行,列印......p和q相遇時,完成任務!

ps:這個演算法也是2023年全國碩士入學考試計算機綜合的演算法題的解題方法,只不過題目跟上面的題目有些出入。

下面是這個演算法的c語言實現

上面檔案的檔名為tail2,下圖為在控制台輸入後的輸出結果,這裡我選擇了電影the social network的英文本幕檔案(已命名為out.txt)為輸入

2)第二個方法用單鏈表解決。建立乙個具有n個鏈結點,且不帶頭結點的單向迴圈鍊錶,每個鏈結點的資料域需要清空,然後從文字檔案的第一行開始,依次讀取檔案的每一行,每讀取一行就將其存入相應鏈結點的資料域。。。。。當檔案讀入結束後,迴圈鍊錶中保留的正好是需要列印的n行,於是,從最後存入資訊的那乙個鏈結點的後繼結點開始,依次列印鏈結點資料域中的內容,直到所有鏈結點均被列印。

下面是這個演算法的c語言實現:

這裡我選擇了電影the social network的英文本幕檔案(已命名為out.txt)為輸入,輸出結果如下圖所示

通過上面的分析可以看出,對於處理某個檔案最後n行,或者某個資料庫中的最後k個表,都可以用上面的兩種思想來實現~如果看官有更好的方法,歡迎分享~~~

好睏,回去睡覺嘍~~~

儲存最後N個匹配到的元素

from collections import deque def search lines,pattern,history 6 每次匹配成功時,就輸出當前的匹配行,以及最後匹配成功的n行文字 param lines 全部文字 param pattern 查詢內容 param history 最後n...

字元類元素個數統計

題目 2 寫乙個程式,統計字串的大寫字母個數 小寫字母個數 數字個數和其它字元個數。用函式func實現功能,在main中,至少使用10個字串對函式進行測試。30分 提示 函式名 func3 入口引數 乙個字串 返回結果 乙個結構體 包括大寫字母個數 小寫字母個數 數字個數和其它字元個數 提示 如果輸...

查詢n個數中最小的k個元素

求n個數中最小的k個元素 n很大,k相對較小 建立乙個k個元素的堆 再逐個插入,最壞情況時間複雜度為o nlgk include 求左右葉子 父結點的巨集定義 define left i i 2 define right i i 2 1 define parent i i 2 維持堆的性質 演算法原...