1,首先将链表初始值改为用户的输入
2,根据用户的输入,打印出初始化后的链表
3,用户继续输入希望寻找的值
4,根据这个值在链表中寻找数据域是这个值的结点,并计数,最后返回满足条件的结点个数
1 /*返回特定数据域值的结点个数*/ 2 3 #include<stdio.h> 4 #include<stdlib.h> 5 6 //链表中节点的结构 7 typedef struct Link { 8 int data; 9 struct Link* next; 10 }link; 11 12 //链表初始化 13 link* initByTailInsert() { 14 link* phead = NULL;//创建头指针 15 link* first_node = (link*)malloc(sizeof(link));//创建第一个节点 16 //第一个结点先初始化 17 first_node->data = 1; 18 first_node->next = NULL; 19 phead = first_node;//头指针指向第一个节点 20 21 int input_data = 0; //用户输入的值 22 23 //尾插入赋值 24 printf("请输入4个整数:"); 25 for (int i = 2; i < 6; i++) { 26 link* new_node = (link*)malloc(sizeof(link)); //申请新的结点 27 28 //new_node->data = i; 29 scanf("%d", &input_data); 30 new_node->data = input_data; 31 32 new_node->next = NULL; 33 first_node->next = new_node; //第一个结点的指针域指向这个新申请的结点 34 first_node = new_node; //第一个结点后移 35 } 36 37 //printf("头指针指向的值是:%d ", phead->data);//1 38 return phead; //将指向第一个结点的头指针返回 39 } 40 41 42 43 void showLink(link* phead) { 44 link* tmp = phead;//将头指针赋给tmp,tmp也是一个头指针 45 //只要tmp指针指向的结点的next不是Null,就执行输出语句。 46 while (tmp != NULL) { 47 printf("%d ", tmp->data); 48 tmp = tmp->next; 49 } 50 printf(" "); 51 } 52 53 //返回特定数据域值的结点个数 54 int count(link* phead, int value) { 55 link* tmp = phead; 56 int count = 0; 57 while (tmp != NULL) { 58 if (tmp->data == value) { 59 count++; 60 } 61 tmp = tmp->next; 62 } 63 return count; 64 } 65 66 void main() { 67 //初始化链表(1,2,3,4) 68 printf("初始化链表为: "); 69 link* phead = initByTailInsert(); //创建头指针,得到经过初始化后的头指针 70 showLink(phead); 71 int value = 0; 72 printf("请输入要寻找的元素:"); 73 scanf("%d", &value); 74 printf("数据域是%d的结点个数是:%d ", value,count(phead, value)); 75 76 }