1,创建单链表,用尾插入法给单链表赋初始值,并打印出链表的全部数据
1 /*尾插入法 2 创建单链表 3 */ 4 5 6 #include<stdio.h> 7 #include<stdlib.h> 8 9 //链表内存结构 10 typedef struct LinkList { 11 int data; //数据域 12 struct LinkList* next; //指针域 13 }link; 14 15 //单链表的创建(创建有头结点的) 16 link* createLink() { 17 link* head = (link*)malloc(sizeof(link)); //申请头结点 18 head->data = -1; //头结点的数据域是 -1 19 head->next = NULL; //头结点的指针域是 NULL 20 if (head) { 21 /* 22 printf("单链表创建成功 "); 23 printf("头结点的数据域是:%d ", head->data); 24 printf("头结点的指针域是:%p ", head->next); 25 */ 26 return head; 27 } 28 else { 29 printf("单链表创建失败 "); 30 return; 31 } 32 33 } 34 35 36 //单链表的初始化(尾插入法) 37 int* initLink(link* head_node,int data[10]) { //用data[]保存初始化的链表的数据,后传给showLink()遍历打印 38 link* p = head_node; //将头结点赋给p,p初始时是头结点,后用来不断申请结点 39 link* r = head_node; //同时将头结点赋给 r, r 始终是链表的最后一个结点 40 for (int i = 0; i < 10; i++) { 41 p = (link*)malloc(sizeof(link)); //p不断往后申请内存空间 42 p->data = i; //给新申请的结点的数据域赋值 43 p->next = NULL; //新申请的结点指针域初始化为空 44 r = p; //p成功申请结点空间后,将p这个新申请的结点赋给r,让r始终是链表的最后一个结点 45 printf("%d ", r->data); //打印出初始化链表中的每个结点的数据域的值 46 data[i] = r->data; //将数据域的值都保存在data[]数组中 47 } 48 printf(" "); 49 //printf("最终r的指针域是:%p ", r->next); //最终r就是最后一个结点,指针域是空00000000 50 return data; 51 } 52 53 //打印链表数据 54 void showLink(int data[10]) { 55 for (int i = 0; i < 10; i++) { 56 printf("%d ", data[i]); 57 } 58 } 59 60 void main() { 61 createLink(); 62 63 int data[10]; 64 printf("初始化链表是: "); 65 initLink(createLink(),data); 66 67 printf("打印链表数据: "); 68 showLink(data); 69 70 } 71
2,将初始化赋值改为用户输入
1 /*尾插入法 2 创建单链表 3 */ 4 5 6 #include<stdio.h> 7 #include<stdlib.h> 8 9 //链表内存结构 10 typedef struct LinkList { 11 int data; //数据域 12 struct LinkList* next; //指针域 13 }link; 14 15 //单链表的创建(创建有头结点的) 16 link* createLink() { 17 link* head = (link*)malloc(sizeof(link)); //申请头结点 18 head->data = -1; //头结点的数据域是 -1 19 head->next = NULL; //头结点的指针域是 NULL 20 if (head) { 21 /* 22 printf("单链表创建成功 "); 23 printf("头结点的数据域是:%d ", head->data); 24 printf("头结点的指针域是:%p ", head->next); 25 */ 26 return head; 27 } 28 else { 29 printf("单链表创建失败 "); 30 return; 31 } 32 33 } 34 35 36 //单链表的初始化(尾插入法) 37 int* initLink(link* head_node,int data[10]) { //用data[]保存初始化的链表的数据,后传给showLink()遍历打印 38 link* p = head_node; //将头结点赋给p,p初始时是头结点,后用来不断申请结点 39 link* r = head_node; //同时将头结点赋给 r, r 始终是链表的最后一个结点 40 for (int i = 0; i < 10; i++) { 41 p = (link*)malloc(sizeof(link)); //p不断往后申请内存空间 42 43 int num = 0; 44 printf("请输入要添加的值: "); 45 scanf("%d", &num); 46 47 p->data = num; //给新申请的结点的数据域赋值 48 p->next = NULL; //新申请的结点指针域初始化为空 49 r = p; //p成功申请结点空间后,将p这个新申请的结点赋给r,让r始终是链表的最后一个结点 50 //printf("%d ", r->data); //打印出初始化链表中的每个结点的数据域的值 51 data[i] = r->data; //将数据域的值都保存在data[]数组中 52 } 53 printf(" "); 54 //printf("最终r的指针域是:%p ", r->next); //最终r就是最后一个结点,指针域是空00000000 55 return data; 56 } 57 58 //打印链表数据 59 void showLink(int data[10]) { 60 for (int i = 0; i < 10; i++) { 61 printf("%d ", data[i]); 62 } 63 } 64 65 void main() { 66 createLink(); 67 68 int data[10]; 69 printf("初始化链表: "); 70 initLink(createLink(),data); 71 72 printf("打印链表数据: "); 73 showLink(data); 74 75 } 76