• 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
    ", 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 }

     

     

     

  • 相关阅读:
    javaWeb下载
    javaWeb上传
    JavaWeb过滤器
    JavaWeb中的监听器
    数据库dbutils
    数据库连接池
    51nod 1837 砝码称重【数学,规律】
    Codeforces Round #437 (Div. 2)[A、B、C、E]
    Codeforces Round #436 (Div. 2)【A、B、C、D、E】
    Codeforces Round #435 (Div. 2)【A、B、C、D】
  • 原文地址:https://www.cnblogs.com/shanlu0000/p/12459461.html
Copyright © 2020-2023  润新知