《資料結構》 鍊錶

2021-09-29 16:42:00 字數 3500 閱讀 3310

3.1 鍊錶的概念及結構

概念:鍊錶是一種物理儲存結構上非連續、非順序的儲存結構,資料元素的邏輯順序是通過鍊錶中的指標鏈

接次序實現的 。

現實中:

實際中煉表的結構非常多樣,以下情況組合起來就有8種鍊錶結構:

單向、雙向

帶頭、不帶頭

迴圈、非迴圈

常見

1. 無頭單向非迴圈鍊錶:結構簡單,一般不會單獨用來存資料。實際中更多是作為其他資料結構的子結

構,如雜湊桶、圖的鄰接表等等。另外這種結構在筆試面試**現很多。

2. 帶頭雙向迴圈鍊錶:結構最複雜,一般用在單獨儲存資料。實際中使用的鍊錶資料結構,都是帶頭雙向

迴圈鍊錶。另外這個結構雖然結構複雜,但是使用**實現以後會發現結構會帶來很多優勢,實現反而

簡單了,後面我們**實現了就知道了。

3.2鍊錶的實現
// 1、無頭單向非迴圈鍊錶增刪查改實現

typedef

int sltdatatype;

typedef

struct slistnode

slistnode;

typedef

struct slist

slist;

void

slistinit

(slist* plist)

;void

slistdestory

(slist* plist)

;slistnode*

buyslistnode

(sltdatatype x)

;void

slistpushfront

(slist* plist, sltdatatype x)

;void

slistpopfront

(slist* plist)

;slistnode*

slistfind

(slist* plist, sltdatatype x)

;// 在pos的後面進行插入

void

slistinsertafter

(slistnode* pos, sltdatatype x)

;// 在pos的前面進行插入

void

slisteraseafter

(slistnode* pos)

;void

slistremove

(slist* plist, sltdatatype x)

;void

slistprint

(slist* plist)

;void

testslist()

;

// 2、帶頭雙向迴圈鍊錶增刪查改實現

typedef

int ltdatatype;

typedef

struct listnode

listnode;

typedef

struct list

list;

void

listinit

(list* plist)

;void

listdestory

(list* plist)

;void

listpushback

(list* plist, ltdatatype x)

;void

listpushback

(list* plist)

;void

listpushfront

(list* plist, ltdatatype x)

;void

listpopfront

(list* plist)

;listnode*

listfind

(list* plist, ltdatatype x)

;// 在pos的前面進行插入

void

listinsert

(listnode* pos, ltdatatype x)

;// 刪除pos位置的節點

void

listerase

(listnode* pos)

;void

listremove

(list* plist, ltdatatype x)

;void

listprint

(list* plist)

;

4.順序表和煉表的區別和聯絡順序表:優點:空間連續、支援隨機訪問

1.中間或前面部分的插入刪除時間複雜度o(n)

2.增容的代價比較大。

鍊錶:

缺點;以節點為單位儲存,不支援隨機訪問

優點:1.任意位置插入刪除時間複雜度為o(1)

2.沒有增容問題,插入乙個開闢乙個空間。

介面實現:

#define _crt_secure_no_warnings 1

#include

"slist.h"

slistnode*

slistbyroom

(slisttype x)

void

slistpopback

(slistnode*

* plist)

while

(tail->next!=

null

)free

(tail)

; head->next =

null;}

void

slistprint

(slistnode*

* plist)

//列印

printf

("null\n");

}void

slistpopfront

(slistnode*

* plist)

//頭刪

else

}void

slistpushfront

(slistnode*

* plist, slisttype x)

//頭插

else

}void

slistpushback

(slistnode*

* plist, slisttype x)

//尾插

else

str->next = newnode;

}}

資料結構 鍊錶

鍊錶 what 就是一張鏈式儲存的表,是一種資料結構,是基礎,所以還是不要想有什麼用。具體呢?在c中就用結構體實現物件描述,然後通過函式來實現各個基本操作 c 則用類來表述,c中的結構體就可以看成c 中的類,然後通過類封裝各個操作步驟。這些操作實現後就需要 來測試,號稱demo,就是main函式裡面...

資料結構 鍊錶

鍊錶中的資料是以節點來表示的,每個結點的構成 元素 資料元素的映象 指標 指示後繼元素儲存位置 元素就是儲存資料的儲存單元,指標就是連線每個結點的位址資料。鍊錶的結點結構 data next data域 存放結點值的資料域 next域 存放結點的直接後繼的位址 位置 的指標域 鏈域 以 結點的序列 ...

資料結構 鍊錶

一般的建立線性鍊錶有兩種 1.正序法 需要三個指標,head作為頭指標,pre作為前乙個指標,cur作為當前指標用來建立空間 2.倒序法,利用指標的插入,只需要兩個指標,不斷的往頭指標後插入新空間,不過插入的越早,離頭指標越遠,也就越後面輸出 1.線性鍊錶的建立及查詢刪除 include inclu...