11 按值定位

根据用户输入的元素,查找这个元素在链表中是第几个

 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\n", 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("\n");
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("没有这个元素\n");
58     return NULL;
59 
60 }
61 
62 
63 void main() {
64     //初始化链表(1,2,3,4)
65     printf("初始化链表为:\n");
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个元素\n", value,isfind->data);
75     }
76     else {
77         printf("没找到这个元素\n");
78     }
79    
80 
81 }

 

 

猜你喜欢

转载自www.cnblogs.com/shanlu0000/p/12459461.html
11