迴圈鍊錶
在座的各位都很年輕,不會覺得日月如梭。可上了點年紀的人,比如我—的父輩們,就常常感慨,要是可以回到從前該多好二網上一也盛傳,所謂的成功男人就是3歲時不尿褲子,5歲能自己吃飯......80歲能自已做飯,90歲能不尿褲子。對於單鏈表,山於每個結點只儲存了向後的指標、到了尾標誌就停止了向後鏈的操作,這樣,當中某一結點就無法找到它的前驅結點了,就像我們剛才說的,不能回到從前。比如,你是一業務員,家在上海。需要經常出差,行程就是上海到北京一路上的城市,找客戶談生意或分公司辦理業務。你從_丘海出發,乘火車路經多城市停留後,再乘飛機返回上海,以後,每隔一段時i'}ej,你基本還要按照這樣的行程開展業務。
有一次,你先到南京開會,接下來要對以匕的城市走,遍,此時有人對你i}. ,不行,你得從上海開始,因為上海是第一站。你會對這人說什麼?神經病。哪有這麼傻的,直接回上海根本沒有必要,你可以從南京開始。下一站蚌埠,直到北京,之後#}i-考慮走完上海及蘇南的幾個城市。}.然這表示你是從當中一結點開始遍歷整個鍊錶,這都是原來的單鏈表結構解決不了的l[q題:事實上,把北京和上海之間連起來,形)」戈乙個環就解決了前面所面臨的困難。這就是我們現在要講的迴圈鍊錶。將單鏈表中終端結點的指標端由空指標改為指向頭結點,就使整個單鏈表形成乙個環,這種頭尾相接的單鏈表稱為單迴圈鍊錶,簡稱迴圈鍊錶(circular linkedlist)。從剛才的例子,可以總結出,迴圈鍊錶解決r乙個很麻煩的問題。如何從』}i中乙個結點出發,訪} rrl到鍊錶的全部結l} f}}}.二為了使空鍊錶與非空煉表處理一致,我們通常設乙個頭結點,當然,這並不是說,迴圈鍊錶一定要頭結點,這需要注意,迴圈鍊錶帶有頭結點的空鍊錶。
對於非空的迴圈鍊錶如下圖:
其實迴圈鍊錶和單鏈表的主要差舜就在於迴圈的判斷條件上,原來是判斷p->next是否為空,現在則是p一》next不等丁頭結點,則迴圈末結束。在單鏈表中,我們有了頭結點}}寸,我們可以用}[1)的時間訪iri乙個結點,但對t}i}}問到最後乙個結點,卻需要q[r:)時間,因為我們需要將單鏈表全部掃瞄一遍。有沒有可能用。[x)的時間由鍊錶指標訪問到最後乙個結點呢?當然可以。不過我們需要改造一下這個迴圈鍊錶,不用頭指標,而是用指向終端結點的尾指
從下圖中可以看到,終端結點用尾指標rear指示,則查詢終端結點是以}}s而開始r f:點,其實就是rear->next 5next,其時間複雜也為d[1)}舉個程式的例子,要將兩個迴圈鍊錶合併成乙個表時,有了尾指標就非常簡單了。比如下面的這兩個迴圈鍊錶,它們的尾指標分別是reara和rearb 。
《大話資料結構》
函式的漸進增長 我們現在來判斷一下,兩個演算法a和b哪個更好。假設兩個演算法的輸入規模都是n,演算法a要做2n 3次操作,你可以理解為先有乙個n次的迴圈,執行完成後,再有乙個n次迴圈,最後有三次賦值或運算,共2n 3次操作。演算法b要做3n 1次操作,你覺得它們誰更快呢 準確來說,答案是不一定的 當...
《大話資料結構》
常見的時間複雜度 常見的時間複雜度如下圖所示 常用的時間複雜度所耗費的時間從小到大依次是 o 1 o logn o n o nlogn o n o n 三次方 o 2 n次方 o n!o n n次方 我們前面已經談到了 o 1 常數階 o logn 對數階 o n 線性階 o n 平方階等,至於o ...
《大話資料結構》
線性表 線性表,從某種就能感覺到,是具有像線一樣的性質的表。在廣場上,有很多人分散在各處,當中有些是小朋友,可也有很多大人,甚至還有不少寵物,這些小朋友的資料對整個廣場人群來說,不能算是線性表的結果。但像剛才提到的那樣,乙個班級的小朋友,乙個跟著乙個排著隊,有乙個打頭,有乙個收尾,當中的小朋友,每乙...