2015-08-22 45 views
2

我正在製作一個程序,而我以爲使用的算法需要一種廉價的方式來訪問列表以使其有效。有沒有一種有效的方法來訪問最後一個元素的列表?或者,因爲我認爲這可能是不可能的,因爲SML列表的結構,是否有一個有效的數據結構來實現它?SML/NJ - 有效的方法或數據結構從頭開始訪問開始

數據的長度在執行之前是未知的,除了串行遍歷數據外,不需要其他數據。

+0

你必須留下一些東西,因爲你爲什麼不能重新定義前面作爲後面,並向前訪問呢? – newacct

+0

我希望能夠從後面訪問列表,同時仍然能夠從正面訪問它 - 用幾句話,我想要雙向訪問。理論上,雙向鏈表將是完美的。 –

回答

0

如果使用功能性deque看起來像是矯枉過正,並且您只需要以相反順序遍歷列表一次,那麼解決方案(例如,使用List.lastList.take來模擬hdtl,但是按照您看起來知道的那樣,倒序是相反的,因爲它們會使列表遍歷爲二次方。另一方面,內置函數rev非常高效,因爲它既是尾遞歸又是線性的。如果您向需要以相反順序遍歷該列表的函數提供列表,則一個簡單的解決方案是使用let使用rev進行綁定,以相反順序創建列表的本地副本,然後以常規方式遍歷反向列表。

+0

我的確記住了這些,但會連續讀取不同的列表,並且連續的反轉會太慢。另一方面,使用功能性deque確實是過度的,所以我想出了一個新的算法:P但是瞭解功能性dequeues使得這個問題值得。 –