zhuaizhai 2024-03-13 11:12 采纳率: 90.5%
浏览 3
已结题

C++实现数据查找功能

C++编写单链表的按照值查找结点位序的操作函数。编程要求
完成在单链表中查找值为e的结点位序函数的定义,具体要求如下: int LocateElem(LinkList L,ElemType e);
//在单链表L中查找,返回L中第1个与e满足关系equal()的数据元素的位序否则为0。
输入说明:
第一行输入单链表的长度M;第二行输入单链表的M个整数;
第三行输入要查找的数据元素的值。输出说明:
如果查找成功,第二行输出查找元素的逻辑序号;如果查找失败,则输出“查找失败!“。
输入样例1:
10
12 47 5 8 6 92 45 63 75 38
92
输出样例1:
92是单链表第6个元素
输入样例2:
10
12 47 5 8 6 92 45 63 75 38
93
输出样例2:
查找失败!

  • 写回答

3条回答 默认 最新

  • 檀越@新空间 2024-03-13 11:12
    关注

    zhuaizhai 上午好☀️☀️☀️️
    本答案参考ChatGPT-3.5

    解决方案

    1. 首先,需要定义一个结构体可以表示单链表的每个结点,例如:

      typedef struct ListNode {
          int data;
          struct ListNode *next;
      } ListNode;
      
    2. 然后,定义一个函数 LocateElem 来实现按照值查找结点位序的操作,函数的参数为单链表的头结点指针和要查找的元素值,返回值为元素的位序或0(表示查找失败)。

      int LocateElem(ListNode *L, int e) {
          int pos = 1; // 初始化位序为1
          ListNode *curr = L->next; // 从第一个结点开始遍历
          while (curr != NULL) {
              if (curr->data == e) {
                  return pos; // 找到了与e相等的元素,返回位序
              }
              curr = curr->next;
              pos++;
          }
          return 0; // 没有找到,返回0表示查找失败
      }
      
    3. main 函数中,先读取输入的单链表长度和元素,然后调用 LocateElem 函数查找给定元素的位序,并进行相应输出。

      int main() {
          int M, e;
          cin >> M;
          ListNode *L = new ListNode; // 创建单链表的头结点
          L->next = NULL; // 头结点后继置空
          ListNode *curr = L; // 指向当前结点的指针
          for (int i = 0; i < M; i++) { // 读取链表的元素值并插入链表
              ListNode *newNode = new ListNode;
              cin >> newNode->data;
              newNode->next = NULL;
              curr->next = newNode;
              curr = newNode;
          }
          cin >> e;
          int pos = LocateElem(L, e); // 调用函数查找元素的位序
          if (pos == 0) {
              cout << "查找失败!";
          } else {
              cout << e << "是单链表第" << pos << "个元素";
          }
          return 0;
      }
      

      这样,就实现了在单链表中按照值查找结点位序的功能。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月21日
  • 已采纳回答 3月13日
  • 创建了问题 3月13日