這兩天搞了搞鏈表,發現這東西挺好用的,特此記錄一下自己敲下的代碼,希望給后面的人一點啟發 = =
代碼可以直接拷貝測試
下面是鏈表節點,這里用來測試,就沒搞很多字段了
1 typedef struct Student_Node{ 2 int id; 3 struct Student_Node *next; 4 }Student_Node; 5 6 typedef Student_Node *Student;
接下來是節點的創建函數
1 Student creatStudent(int n) 2 { 3 int var; 4 Student s,p,index; 5 s = malloc(sizeof(Student));//頭結點 6 s->id = n; 7 index = s; 8 for (var = 1; var <= n; ++var) { 9 p = malloc(sizeof(Student)); 10 p->id = var; 11 index->next = p; 12 index = p; 13 } 14 index->next = NULL; 15 return s; 16 }
添加節點函數,這里用的尾插法,尾插法比較直觀易懂
1 void addStudent(Student s,int id) 2 { 3 Student q,p=s; 4 while(p->next != NULL) 5 { 6 p = p->next; 7 } 8 q = malloc(sizeof(Student)); 9 q->id = id; 10 q->next = NULL; 11 p->next = q; 12 s->id++; 13 }
打印節點函數,實際上就是遍歷整個鏈表
1 void printfStudent(Student s) 2 { 3 Student p; 4 p = s; 5 while( p->next != NULL) 6 { 7 printf("id=%d;\r",p->id); 8 p = p->next; 9 } 10 printf("id=%d;\r\r",p->id); 11 }
插入節點函數
1 void insetStudent(Student s,int n,int id) 2 { 3 int i=0; 4 Student p,index; 5 p = s; 6 while( p->next != NULL && i<n) 7 { 8 p = p->next; 9 i++; 10 } 11 12 index = malloc(sizeof(Student)); 13 index->id = id; 14 index->next = p->next; 15 p->next = index; 16 s->id++; 17 }
刪除節點函數
1 void deleteStudent(Student s,int n) 2 { 3 Student q,p = s; 4 int i = 1; 5 while(p->next !=NULL && i < n) 6 { 7 p = p->next; 8 i++; 9 } 10 q = p->next; 11 p->next = q->next; 12 free(q); 13 s->id--; 14 }
改節點函數
1 void changeStudent(Student s,int n,int id) 2 { 3 Student p=s; 4 int i = 0; 5 while(p->next != NULL && i < n) 6 { 7 p= p->next; 8 ++i; 9 } 10 p->id = id; 11 }
最后是主函數了,我這里進行了一一測試,頭節點的id為節點總數
1 int main(void) { 2 3 Student s; 4 5 s = creatStudent(10);//創建十個節點,不包括頭節點,以下都是不包括頭節點 6 printfStudent(s);//打印 7 8 insetStudent(s,1,100);//在第1個位置后面插入id為100的節點 9 printfStudent(s);//打印 10 11 deleteStudent(s,1);//刪除第一個節點 12 printfStudent(s);//打印 13 14 addStudent(s,888);//在末尾插入一個id為888的節點 15 printfStudent(s);//打印 16 17 changeStudent(s,1,1);//感覺第一個數據是100不合適,沒理由 = =! 18 printfStudent(s);//打印 19 20 return EXIT_SUCCESS; 21 }
下面是測試的結果
1 id=10; 2 id=1; 3 id=2; 4 id=3; 5 id=4; 6 id=5; 7 id=6; 8 id=7; 9 id=8; 10 id=9; 11 id=10; 12 13 id=11; 14 id=1; 15 id=100; 16 id=2; 17 id=3; 18 id=4; 19 id=5; 20 id=6; 21 id=7; 22 id=8; 23 id=9; 24 id=10; 25 26 id=10; 27 id=100; 28 id=2; 29 id=3; 30 id=4; 31 id=5; 32 id=6; 33 id=7; 34 id=8; 35 id=9; 36 id=10; 37 38 id=11; 39 id=100; 40 id=2; 41 id=3; 42 id=4; 43 id=5; 44 id=6; 45 id=7; 46 id=8; 47 id=9; 48 id=10; 49 id=888; 50 51 id=11; 52 id=1; 53 id=2; 54 id=3; 55 id=4; 56 id=5; 57 id=6; 58 id=7; 59 id=8; 60 id=9; 61 id=10; 62 id=888;