1.定義一個數組,把1 2 3 4賦值給這個數組
2.建立一個新的頭結點
3.頭插與尾插
(因為前期C語言基礎沒打牢固,在寫這個代碼時,真的遇見了很多問題,導致我有幾天心情都不是太好,因為老是陷進一個死循環啊!!!特別是 指針的使用,把所有函數堆在一起后,完全分不清了,而數據結構的重點又在於指針,所以准備重溫函數的調用,指針與數組了。。。)
敲代碼前,頭腦一定要清晰!!!
1 #include <stdio.h>
2 #include <stdlib.h>
3 typedef int Elemtype; 4 typedef struct Node{ 5 Elemtype data; 6 struct Node *link; 7 }linknode,*linklist; 8
9 //初始化
10 void initlist(linklist first){ 11 first=(linknode*)malloc(sizeof(linknode)); 12 if(!first) { 13 printf("\nerror!"); 14 } 15 first->link=NULL; 16 } 17
18 //頭插法建立單鏈表
19 void headinsert(linklist first,Elemtype a[4]){ 20 first->link=NULL; 21 int i; 22 for(i=3;i>=0;i--){ 23 linknode* s=(linknode*)malloc(sizeof(linknode));//給數組建立一個新的結點
24 s->data=a[i];//將數組內容賦值給結點的數據域
25 s->link=first->link;//將頭結點的指針域 NULL賦給結點s,使其成爲終端節點
26 first->link=s;//頭結點指向s,使s成爲首元結點,依此類推
27 } 28 } 29
30 //尾插法建立單鏈表
31 void TailCreatList(linklist first,Elemtype a[4]) { 32 int i; 33 linknode *r;//新建一個結點
34 r = first; //r指向了頭節點,此時的頭節點是終端節點,r始終指向L的終端節點
35 for (i=0;i<4;i++) { 36 linknode *s = (linknode*) malloc(sizeof(linknode));//s指向新申請的節點
37 s->data = a[i]; //用新節點的數據域來接受i
38 r->link = s; //用r來接納新節點
39 r = s; //r指向終端節點
40 } 41 r->link = NULL; //元素已經全部裝入鏈表L中,L的終端節點指針域為NULL,L建立完成
42 } 43
44 //打印節點
45 void DisPlay(linklist L) { 46 if (L == NULL){ 47 return; 48 } 49 linknode *p = L->link; 50 while (p != NULL) { 51 printf("%d\n", p->data); 52 p = p->link; 53 } 54 printf("\n"); 55 } 56
57 int main(){ 58 int b[4]={1,2,3,4}; 59 linknode *L1, *L2; 60 L1 = ( linknode*) malloc(sizeof(linknode)); 61 L2= ( linknode*) malloc(sizeof(linknode)); 62 headinsert(L1,b); 63 DisPlay(L1); 64 TailCreatList(L2,b); 65 DisPlay(L2); 66 }