貌似有段時間沒有做原創文章了,聒噪的很,開始正式學習資料結構啦哈哈,今天先做單向鍊錶的建立,希望和大家一起分享
陣列作為存放同類資料的集合,給我們在程式設計時帶來很多的方便,增加了靈活性。但陣列也同樣存在一些弊病。如陣列的大小在定義時要事先規定,不能在程式中進行調整,這樣一來,在程式設計中針對不同問題有時需要30個大小的陣列,有時需要50個陣列的大小,難於統一。我們只能夠根據可能的最大需求來定義陣列,經常會造成一定儲存空間的浪費。
我們希望構造動態的陣列,隨時可以調整陣列的大小,以滿足不同問題的需要。鍊錶就是我們需要的動態陣列。它是在程式的執行過程中根據需要有資料儲存就向系統要求申請儲存空間,決不構成對儲存區的浪費。
鍊錶是一種複雜的資料結構,其資料之間的相互關係使鍊錶分成三種:單鏈表、迴圈鍊錶、雙向鍊錶。首先介紹單鏈表
下圖(圖1)是單鏈表的結構
單 鍊錶有乙個頭節點head,指向鍊錶在記憶體的首位址。鍊錶中的每乙個節點的資料型別為結構體型別,節點有兩個成員:整型成員(實際需要儲存的資料)和指向下乙個結構體型別節點的指標即下乙個節點的位址(事實上,此單鏈表是用於存放整型資料的動態陣列)。鍊錶按此結構對各節點的訪問需從鍊錶的頭找起,後續節點的位址由當前節點給 出。無論在表中訪問那乙個節點,都需要從鍊錶的頭開始,順序向後查詢。鍊錶的尾節點由於無後續節點,其指標域為空,寫作為null。
上圖還給出這樣一層含義,鍊錶中的各節點在記憶體的儲存位址不是連續的,其各節點的位址是在需要時向系統申請分配的,系統根據記憶體的當前情況,既可以連續分配位址,也可以跳躍式分配位址。
看一下鍊錶節點的資料結構定義:
struct node
;
在鍊錶節點的定義中,除乙個整型的成員外,成員p是指向與節點型別完全相同的指標。
在鍊錶節點的資料結構中,非常非凡的一點就是結構體內的指標域的資料型別使用了未定義成功的資料型別。這是在c中唯一規定可以先使用後定義的資料結構。
鍊錶的建立、輸出步驟
單鏈表的建立過程有以下幾步:
1 ) 定義鍊錶的資料結構;
2 ) 建立乙個空表;
3 ) 利用malloc ( )函式向系統申請分配乙個節點;
4 ) 將新節點的指標成員賦值為空。若是空表,將新節點連線到表頭;若是非空表,將新
節點接到表尾;
5 ) 判斷一下是否有後續節點要接入鍊錶,若有轉到3 ),否則結束;
單鏈表的輸出過程有以下幾步
1) 找到表頭;
2) 若是非空表,輸出節點的值成員,是空表則退出;
4) 轉到2 ).
首先是輸入鍊錶長度的鍊錶建立列印,先上**
#include #include typedef struct node *ptrtonode;
struct node ;
ptrtonode read(); /* 細節在此不表 */
void print( ptrtonode l ); /* 細節在此不表;空煉表將輸出null */
int main()
ptrtonode read()
return h;
} void print( ptrtonode l )
while(l!=null)
putchar('\n');
}
就是這樣的話頭結點預設的data值是沒有用的,從頭結點的next開始,流程如圖下
如果希望表頭就有資料接入,則**改為如下
#include #include typedef struct node *ptrtonode;
struct node ;
ptrtonode read(); /* 細節在此不表 */
void print( ptrtonode l ); /* 細節在此不表;空煉表將輸出null */
int main()
ptrtonode read()
return h;
} } void print( ptrtonode l )
while(l!=null)
putchar('\n');
}
**如下
#include #include typedef struct node *ptrtonode;
struct node ;
ptrtonode read(); /* 細節在此不表 */
void print( ptrtonode l ); /* 細節在此不表;空煉表將輸出null */
int main()
ptrtonode read()
return h;
} } void print( ptrtonode l )
while(l!=null)
putchar('\n');
}
執行結果如下:
至此,完成鍊錶的建立
c語言單向鍊錶建立
typedef struct nodenode,ptrnode 1 結構體的大小 參考鏈結 char 1 int 4 64位系統中,不管什麼型別的指標的大小都是8 cpu一次讀取8位元組,在結構體中會對不滿足8位元組的型別補全為8位元組 乙個實體結構體的大小為補全後所有變數大小的和。sizeof s...
C語言單向鍊錶建立和遍歷
鍊錶是一種常見的資料結構,鍊錶是由多個結點 自引用結構體 串成的表。什麼是自引用結構體?自引用結構體是一種特殊的結構體型別,它有乙個指標型別的成員,這個指標成員指向與這個結構體一樣的型別。鍊錶就是由乙個乙個結點 自引用結構體 結點被指標串起組成的表。鍊錶的頭指標,頭節點 鍊錶中指向第乙個結點的指標,...
C語言 單向鍊錶
1.c語言單向鍊錶 2.鍊錶的 增,刪,查,遍歷 author mr.long date 2015 12 1 15 24 26 include include 結構定義 struct node 函式定義 void printnode struct node head struct node addf...