Go轉型——資料結構初級(三)

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。**1**.鏈式線性表從之前的例題來看,線性表的順序儲存結構如果需要插入和刪除i(1<=i<=n)元素,需要移動大量元素,所以我們可以看一下線性表另一種表示方式——鏈式儲存結構。它不要求邏輯上相鄰的元素物理位置也相鄰,因此,鏈式儲存結構沒有順序線性表的缺點,同樣,它也失去了順序線性表可隨機儲存的優點。線性鏈表的特點是,使用一組任意的儲存單中繼存放區線性表的資料元素(遮住儲存單元可以是連續的,也可以是不連續的),因此為了表示資料元素a(i)和其直接後繼元素a(i+1)之間的邏輯關係,對於資料元素a(i)來說,除了要儲存自身儲存的資料資訊,還需要儲存一個指示其直接後繼的資訊(即直接後繼的儲存位置),這兩部分結合起來組成資料元素a(i)的儲存映像,稱為**結點**。它包含兩個域,其中,包含自身儲存的資料資訊的域叫做資料域,包含直接後繼的儲存資訊的域叫做**指標域**。指標域中儲存的資訊叫做指標或鏈。n個結點(a(i)的儲存映像(1<=i<=n))串連成鏈表。即為線性表的鏈式結構,又因為一個結點中只包含一個指標域,故又稱為線性鏈表或單鏈表。![image.png](https://static.studygolang.com/180122/9c7239f32987cf18c82cc67ca1d33c54.png)用線性鏈表表示線性表時,資料元素之間的邏輯關係是有結點中的指標指示的。換句話說,指標為資料元素之間的邏輯關係的映像。則邏輯上相鄰的兩個資料元素其儲存的物理位置不要求緊鄰,由此,這種儲存結構為**非順序映像**或**鏈式映像**。![image.png](https://static.studygolang.com/180122/44d756591898c6208041a6896dd1b951.png)由上述可見,單鏈表可由頭指標唯一指定,上述單鏈表頭指標為H,它指向表中第一個結點,若H為“空”(L=NULL),所表示的線性表為“空”表,其長度n為“零”。有時,我們在單鏈表的第一個結點之前附設一個結點,稱之為頭結點。頭結點的資料域可以不儲存任何資訊,也可以儲存如線性表的長度等累的附加資訊,頭結點的指標域儲存指向第一個資料元素的指標(即第一個元素節點的儲存位置)。如所示:![image.png](https://static.studygolang.com/180122/44fdf177170abe3baccedad8ea609344.png)線上性表的順序儲存結構中,由於邏輯上相鄰的兩個元素在物理位置上也相鄰,所以任何元素的儲存位置都可以從線性表的起始位置計算得到。但是在單鏈表中,任意兩個元素儲存位置之間沒有固定的聯絡。然而,每個元素的儲存位置都包含在它直接前驅結點的資訊中心。例如,P是指向線性表中第i個資料元素a(i)的指標,則P->Next是第i+1個資料元素(結點a(i+1))的指標。換句話說,如果P->Data=a(i),那麼P->Next->Data=a(i+1)。因此在單鏈表中,取得第i個資料元素必須從頭指標出發尋找。因此,單鏈表是非隨機存取的儲存結構。![image.png](https://static.studygolang.com/180122/d634da155175555a6ebe725bfe9e8452.png)**2**.鏈式表的插入刪除![image.png](https://static.studygolang.com/180122/925e04c61048f430d9fc5382d6d757d8.png)為插入資料元素X,首先要產生資料域為x的結點,然後插入在單鏈表中,我們需要修改a的指標域,令其指向結點x。而x中的指標域應指向結點b,從而實現3個元素之間的邏輯變化。假設s為指向結點x的指標,則上面指標修改可以用語句概括:`s ->next=p->next;p->next = s`還是以為例,我們添加資料元素X後,又想把他刪除,我們應該怎麼做?答案是,我們只需修改結點a的指標域,令其指向b即可,語句概括為:`p->next=p ->next->next`鏈式線性表插入、刪除實現如下如所示:![image.png](https://static.studygolang.com/180122/f218ef7c1e71112b78095bbdc09a16e3.png)![image.png](https://static.studygolang.com/180122/e8da17d41ef853e9d4a08ca6eae79720.png)![image.png](https://static.studygolang.com/180122/a1d61b8571331eb5e429cb55a46dc13d.png)**3**.線性鏈表的合并將兩個有序列表合并為一個有序列表,例如,我們現在有頭指標為La和Lb的單鏈表分別為有序線性表LA和LB的儲存結構,現在將LA和LB合并得到LC。我們應該怎麼做。**4**.靜態鏈表的操作我們可借用一維數組來描述鏈表,其類型如下說明:![image.png](https://static.studygolang.com/180123/5e39d8d153ac69ae3a8f9b63779b0159.png)![image.png](https://static.studygolang.com/180123/e5e52d4f19b4037a30a715dc2670312b.png)這種方法適用於沒有指標類型的進階程式設計語言中使用鏈表,數組中一個分量可以看作是一個結點,第零**分量**可以看作是頭結點。我們用遊標(也就是指標cur)來代替指標指示結點在數組中的相對位置,插入和刪除操作如所示。我們可以看到,這種儲存方式要預先分配一個很大的空間,但在做線性表的插入刪除時,不需要移動元素,僅需要修改指標(這裡的指標指得是遊標)。它仍然具有鏈式儲存結構的優點,為了區分指標類型表述的線性鏈表,我們將其稱為**靜態鏈表**。![image.png](https://static.studygolang.com/180123/d63bdb92d5fb703a504edbf42f32b15a.png)361 次點擊  
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.