根据用户输入的元素,查找这个元素在链表中是第几个
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 //尾插入赋值 22 for (int i = 2; i < 5; i++) { 23 link* new_node = (link*)malloc(sizeof(link)); //申请新的结点 24 new_node->data = i; 25 new_node->next = NULL; 26 first_node->next = new_node; //第一个结点的指针域指向这个新申请的结点 27 first_node = new_node; //第一个结点后移 28 } 29 30 printf("头指针指向的值是:%d ", phead->data);//1 31 return phead; //将指向第一个结点的头指针返回 32 } 33 34 35 36 void showLink(link* phead) { 37 link* tmp = phead;//将头指针赋给tmp,tmp也是一个头指针 38 //只要tmp指针指向的结点的next不是Null,就执行输出语句。 39 while (tmp != NULL) { 40 printf("%d ", tmp->data); 41 tmp = tmp->next; 42 } 43 printf(" "); 44 } 45 46 //按值查找 47 link* getElemByVal(link* phead, int value) { 48 link* tmp = phead;//将头指针赋给tmp,tmp也是一个头指针 49 while (tmp != NULL) { 50 //printf("%d ", tmp->data); 51 if (tmp->data == value) { 52 return tmp; 53 } 54 55 tmp = tmp->next; 56 } 57 //printf("没有这个元素 "); 58 return NULL; 59 60 } 61 62 63 void main() { 64 //初始化链表(1,2,3,4) 65 printf("初始化链表为: "); 66 link* phead = initByTailInsert(); //创建头指针,得到经过初始化后的头指针 67 showLink(phead); 68 69 int value = 0; 70 printf("请输入需要查找的值:"); 71 scanf("%d", &value); 72 link* isfind = getElemByVal(phead, value); 73 if (isfind != NULL) { 74 printf("这个元素是第%d个元素 ", value,isfind->data); 75 } 76 else { 77 printf("没找到这个元素 "); 78 } 79 80 81 }
创建头结点的方式:
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 typedef struct Link { 5 int data; 6 struct Link* next; 7 }link; 8 9 10 link* initLink(link* headNode) { 11 headNode = (link*)malloc(sizeof(link)); //头结点 12 headNode->next = NULL; 13 headNode->data = -1; //头结点的数据域给值是 -1 14 15 link* headNode2 = headNode; //复制一个头结点 16 17 for (int i = 1; i <= 10; i++) { 18 link* new_node = (link*)malloc(sizeof(link)); 19 new_node->data = i; 20 new_node->next = NULL; 21 headNode2->next = new_node; 22 headNode2 = new_node; 23 } 24 25 return headNode; 26 } 27 28 //按值查找 29 int getElemByVal(link* headNode, int value) { 30 link* tmp = headNode->next; //tmp是第一个结点 31 int count = 0; 32 while (tmp->next != NULL) { 33 //printf("%d ", tmp->data); 34 count++; 35 if (tmp->data == value) { 36 return count; 37 } 38 tmp = tmp->next; 39 } 40 //printf("没有这个元素 "); 41 return -1; 42 }