數據結構之單鏈表 頭插與尾插法


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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM