08 尾插入法创建单链表

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("单链表创建成功\n");
23         printf("头结点的数据域是:%d\n", head->data);
24         printf("头结点的指针域是:%p\n", head->next);
25         */
26         return head;
27     }
28     else {
29         printf("单链表创建失败\n");
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("\n");
49     //printf("最终r的指针域是:%p\n", 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("初始化链表是:\n");
65     initLink(createLink(),data);
66 
67     printf("打印链表数据:\n");
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("单链表创建成功\n");
23         printf("头结点的数据域是:%d\n", head->data);
24         printf("头结点的指针域是:%p\n", head->next);
25         */
26         return head;
27     }
28     else {
29         printf("单链表创建失败\n");
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("请输入要添加的值:\n");
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("\n");
54     //printf("最终r的指针域是:%p\n", 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("初始化链表:\n");
70     initLink(createLink(),data);
71 
72     printf("打印链表数据:\n");
73     showLink(data);
74 
75 }
76     

猜你喜欢

转载自www.cnblogs.com/shanlu0000/p/12455762.html
08