單鏈表的建立
結點建立:我們假設要建立的鍊錶的資料域用來儲存學生資訊,即姓名,學號和成績:
typedef struct student
stu;
接下來先用尾插法(即新增結點在尾部插入)建立鍊錶:
#include #include typedef struct student stu; stu *creat(int n) //n作為被傳遞的引數代表要建立的鍊錶的結點個數,函式返回值型別是結點指標型別 p->next=null; //迴圈外讓p的指標域為空,因為這是最後乙個結點
} else head=null; return head; //返回頭指標 } int main() } else printf("這是乙個空鍊錶!"); //n為0時鍊錶沒有結點 }
自己寫的**可能有許多不足之處,不過意思應該差不多了
下面看一下頭插法(即新增結點總是插入頭部):
#include #include typedef struct student
stu;
stu *creat(int n)
} else
head=null;
return head;
}int main()
} else
printf("這是乙個空鍊錶!");
}
這兩種方式建立的鍊錶結點會剛好是反向的:
例如,如果執行上面兩段程式,結果如下:
輸入鍊錶節點的個數:3
請輸入姓名,學號,分數:張三 11 78
請輸入姓名,學號,分數:李四 12 85
請輸入姓名,學號,分數:王五 13 92
第一段:
姓名 學號 分數
-------------------
張三 11 78
李四 12 85
王五 13 92
第二段:
姓名 學號 分數
-------------------
王五 13 92
李四 12 85
張三 11 78
單鏈表的遍歷
其實在上面兩段**的主函式中已經有這種思想了,只是並沒有作介紹,我們把這種思想提出來單獨看一下,以和上面結構一樣的鍊錶為例,寫乙個遍歷資料並輸出的子函式:
void print(stu *h) //h做函式引數,這裡將要接收的是指向鍊錶首結點的指標
}
單鏈表的插入
第一種情況,在鍊錶首部插入新結點:
stu *insert1(stu *h,int *pn)
/*h做函式引數,這裡將要接收的是指向鍊錶首結點的指標,pn是指向n的指標,下面要用到它改變n的值以統計新鍊錶結點個數*/
第二種,在尾部插入:
stu *insert2(stu *h,int *pn)
/*h做函式引數,這裡將要接收的是指向鍊錶首結點的指標
pn是指向n的指標,下面要用到它改變n的值以統計新鍊錶結點個數*/
第三種,在首尾之間插入,假設要在學號為number的學生的位置後插入:stu *insert3(stu *h,int *pn,int number)
/*h做函式引數,這裡將要接收的是指向鍊錶首結點的指標
pn是指向n的指標,下面要用到它改變n的值以統計新鍊錶結點個數*/
單鏈表的刪除
刪除也是在遍歷的基礎上進行操作的,思想就是先找到要刪除的結點,再讓它前面乙個結點的指標域指向它的後面乙個結點,還是用同乙個鍊錶,假設要刪除儲存學號為number的學生資訊的結點:
stu *delete(stu *h,int *pn,int number)
/*h做函式引數,這裡將要接收的是指向鍊錶首結點的指標
pn是指向n的指標,下面要用到它改變n的值以統計新鍊錶結點個數*/
單鏈表的基本操作就這些啦,分享到此結束。 鍊錶的基本操作
include include include include using namespace std struct listnode void initnode listnode node bool isempty listnode head void pushfront listnode hea...
鍊錶的基本操作
鍊錶操作是最基本的 必須掌握的知識點,最好滾瓜爛熟,透徹理解。工作時間短用的也不夠頻繁,還是總結一下比較好,以加強鞏固。1.單鏈表 結點形式 區分幾個概念 首節點 第乙個元素所在節點。頭指標 指向首節點的指標。頭結點 為了操作方便,在第乙個節點之前附設的乙個結點,此時指向頭結點的為頭指標。基本操作 ...
鍊錶的基本操作。。。
include node.h 列印鍊錶 void print node head printf n 從尾部插入 void insert tail node head,const int d while t next null t next p p next null 從頭部插入 void inser...