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 }

 

 

 创建头结点的方式:

 

 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("没有这个元素\n");
41     return -1;
42 }

 

 

 

 

 

 

posted @ 2020-03-10 22:53  shanlu  阅读(106)  评论(0编辑  收藏  举报