日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第十章 基本数据结构——链表

發(fā)布時(shí)間:2024/1/17 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第十章 基本数据结构——链表 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?鏈表

  鏈表與數(shù)組的區(qū)別是鏈表中的元素順序是有各對象中的指針決定的,相鄰元素之間在物理內(nèi)存上不一定相鄰。采用鏈表可以靈活地表示動態(tài)集合。鏈表有單鏈表和雙鏈表及循環(huán)鏈表。書中著重介紹了雙鏈表的概念及操作,雙鏈表L的每一個(gè)元素是一個(gè)對象,每個(gè)對象包含一個(gè)關(guān)鍵字和兩個(gè)指針:next和prev。鏈表的操作包括插入一個(gè)節(jié)點(diǎn)、刪除一個(gè)節(jié)點(diǎn)和查找一個(gè)節(jié)點(diǎn),重點(diǎn)來說一下雙向鏈表的插入和刪除節(jié)點(diǎn)操作,圖例如下:

鏈表是最基本的數(shù)據(jù)結(jié)構(gòu),凡是學(xué)計(jì)算機(jī)的必須的掌握的,在面試的時(shí)候經(jīng)常被問到,關(guān)于鏈表的實(shí)現(xiàn),百度一下就知道了。在此可以討論一下與鏈表相關(guān)的練習(xí)題。

(1)在單鏈表上插入一個(gè)元素,要求時(shí)間復(fù)雜度為O(1)。

解答:一般情況在鏈表中插入一元素是在末尾插入的,這樣需要從頭遍歷一次鏈表,找到末尾,時(shí)間為O(n)。要在O(1)時(shí)間插入一個(gè)新節(jié)點(diǎn),可以考慮每次在頭節(jié)點(diǎn)后面插入,即每次插入的節(jié)點(diǎn)成為鏈表的第一個(gè)節(jié)點(diǎn)。

(2)在單鏈表上刪除一個(gè)給定的節(jié)點(diǎn)p,要求時(shí)間復(fù)雜度為O(1)。

解答:一般情況刪除一個(gè)節(jié)點(diǎn)時(shí)候,我們需要找到該節(jié)點(diǎn)p的前驅(qū)節(jié)點(diǎn)q,需要對鏈表進(jìn)行遍歷,運(yùn)行時(shí)間為O(n-1)。我們可以考慮先將q的后繼節(jié)點(diǎn)s的值替換q節(jié)點(diǎn)值,然后刪除s即可。如下圖刪除節(jié)點(diǎn)q的操作過程:

(3)單鏈表逆置,不允許額外分配存儲空間,不允許遞歸,可以使用臨時(shí)變量,執(zhí)行時(shí)間為O(n)。

解答:這個(gè)題目在面試筆試中經(jīng)常碰到,基本思想上將指針逆置。如下圖所示:

(4)遍歷單鏈表一次,找出鏈表中間節(jié)點(diǎn)。

解答:定義兩個(gè)指針p和q,初始都指向鏈表頭節(jié)點(diǎn)。然后開始向后遍歷,p每次移動2步,q移動一步,當(dāng)p到達(dá)末尾的時(shí)候,p正好到達(dá)了中間位置。

(5)用一個(gè)單鏈表L實(shí)現(xiàn)一個(gè)棧,要求push和pop的操作時(shí)間為O(1)。

解答:根據(jù)棧中元素先進(jìn)后出的特點(diǎn),可以在鏈表的頭部進(jìn)行插入和刪除操作。

(6)用一個(gè)單鏈表L實(shí)現(xiàn)一個(gè)隊(duì)列,要求enqueue和dequeue的操作時(shí)間為O(1)。

解答:隊(duì)列中的元素是先進(jìn)先出,在單鏈表結(jié)構(gòu)中增加一個(gè)尾指針,數(shù)據(jù)從尾部插入,從頭部刪除。

3、有根樹的表示

  采用鏈表數(shù)據(jù)結(jié)構(gòu)來表示樹,書中先降二叉樹的鏈表表示法,然后拓展到分支數(shù)無限制的有根數(shù)。先來看看二叉樹的鏈表表示方法,用域p、left和right來存儲指向二叉樹T中的父親、左孩子和右孩子的指針。如下圖所示:

  對于分支數(shù)目無限制的有根樹,采用左孩子、右兄弟的表示方法。這樣表示的樹的每個(gè)節(jié)點(diǎn)都包含有一個(gè)父親指針p,另外兩個(gè)指針:

(1)left_child指向節(jié)點(diǎn)的最左孩子。

(2)right_sibling指向節(jié)點(diǎn)緊右邊的兄弟。

總結(jié)

以上是生活随笔為你收集整理的第十章 基本数据结构——链表的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。