鍊錶思路分為兩種。一種是動態的,一種是靜態的。
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...