12 按号定位

根据用户输入的号码,找到这个号码对应的值

 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 link* getElemByNum(link* phead,int num) {
47     int j = 1; //计数器
48     link* tmp = phead;
49     while (tmp != NULL && num>j) {
50         tmp = tmp->next;
51         j++;
52     }
53     if (tmp == NULL || num<j) {
54         //printf("这个元素不存在
");
55         return NULL;
56     }
57     else {
58         return tmp;
59     }
60 }
61 
62 void main() {
63     //初始化链表(1,2,3,4)
64     printf("初始化链表为:
");
65     link* phead = initByTailInsert(); //创建头指针,得到经过初始化后的头指针
66     showLink(phead);
67     int num = 0;
68     printf("请输入要查找的号码:");
69     scanf("%d", &num);
70     link* isfind = getElemByNum(phead, num);
71     if (isfind != NULL) {
72         printf("第%d个元素是:%d", num, isfind->data);
73     }
74     else {
75         printf("这个元素没找到
");
76     }
77   
78 }

 

 

 

getElemByNum ,按号查找的方法中,对于循环控制条件和 if 判断条件 是 试出来的。。。。

原文地址:https://www.cnblogs.com/shanlu0000/p/12459701.html