先看例子,例1:定義鏈表
stu
{ int name;
age;
stu *next;
};
用一組地址任意的存儲單元存放線性表中的數據元素。:以元素(數據元素的映象) + 指針(指示後繼元素存儲位置)= 結點(表示數據元素 或 數據元素的映象)
不得不說百度解釋的太官方了。
1.含義:多組不同類型的數的組合(數組存儲是不連續的)
2.組成: 表頭+結點+表尾
結點=數據域+指針域
表頭:只有指針域 表尾:只有數據域
以前老師講的還是不錯的,影響深刻,不過好像還是有點雲裡霧裡。
LZ所理解的鏈表
1.鏈表就是一系列結構體
2.這個結構體有一個特別的指針,類型為該結構體類型*。
結合例1來看很清晰,但前提是你一定要會結構體。
正是如此,所以學鏈表之前一定先會結構體,而學會結構體之前一定要會用指針,又是指針。看似困難其實一點不難,一切復雜類型都是由基本類型構成的,鏈表也是如此,只不過起了一個時尚的名字。
例2:建立鏈表函數
stu * creat( stu *head,*pf,*(i=;i<n;i++=( stu *)malloc((,i+,i+,&aa,&->name=->age=(i===head=->next==->next=
例2用到了指針函數,結構體指針,指針學好了理解起來應該不難。
從建立鏈表函數可以看出,
pb=(struct stu *)malloc(sizeof(struct stu));
這句為動態分配內存空間(上一篇文章簡要介紹了它)。每新增一個結點,就分配一個sizeof(struct stu)大小的空間,按需分配,理想共產主義有木有。
附上完整的例子,例3:
View Code
例3包括了鏈表的定義,構造鏈表的方法,鏈表的調用方法等。光會寫出例3一點用也沒有,一定要弄清楚怎麼定義\構造,怎麼賦值,怎麼使用,怎麼得到具體某一個結點,結點元素的賦值,遍歷方法,如何通過指針去訪問。