資料結構 鍊錶

2021-10-07 20:25:45 字數 1510 閱讀 2596

鍊錶思路分為兩種。一種是動態的,一種是靜態的。

c語言的標準庫由於有malloc這樣的和c語言特性相關的動態申請記憶體,而可以使用動態鍊錶。下面給出結構體,–單鏈表的。

typedef

int elemtype;

struct node

typedef

struct node linkedlist;

看到沒,因為有malloc,所以可以隨時申請linkedlist型別的空間,申請的返回值其實就是申請的位址。當然需要linkedlist*型別的指標才可以接受。上面結構體的指標域剛好接受。

這就是動態鍊錶。

你想要哪個元素了,就用malloc申請對應的空間。

不想要了就free掉。

再把思維擴大,一塊100000tb的記憶體。如果要儲存幾百億這樣的結構體,那麼將是一種怎樣的情形?

那每個結構體都要有指標域,會不會很占用空間。

關鍵是和陣列對比啊。

linkedlist *l;

init

(&l)

;int i =0;

while(1

)

為了科學,我需要截圖。

這個,可能malloc的時候系統會自動的**吧。

總之想要靠這個將系統的記憶體給佔完肯定是不現實的了。

i現在列印到20000,但是記憶體仍然在這個範圍波動。

這是一種實驗了。如果我申請很大的陣列會怎樣呢?

#include

intmain

(int argc,

char

*ar**)

return0;

}

陣列的這個長度是我能編譯通過的最大了。

然後執行直接報了段錯誤。

我突然又想到了dom和sax。

當初學那個的時候記憶尤新。

一種是把東西全部吃下再消化,

一種是吃一點消化一點。

如果要我選的話,我可能以前只會選前者。

但是隨著時間的流逝,我也漸漸地會選擇後者。

所以就是說,鍊錶的話是有作業系統在維護,因此記憶體的管理什麼的是可控的。

而順序表則一下子需要申請那麼大的記憶體。系統肯定是給不了了。

#define max_size 100

typedef

struct nodelinkedlist[max_size]

;

這個說的是用base + cur - 1來定位這個鍊錶linkedlist的元素的位置。其中不用說了,cur就是第幾個–which

這種方式呢,一開始就要申請到max_size這樣大的記憶體。

這就是靜態的鍊錶了。

所謂靜態,就是不動態地(按照需要)分配記憶體。

資料結構 鍊錶

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

資料結構 鍊錶

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

資料結構 鍊錶

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