LNode* LocataElem(LinkList L, ElemType e) { int count = 0; LNode* p = L; while (p->next) { p = p->next; count++; if (p->data == e) { printf("你所查找的数据元素在第%d位。", count); return p; } } printf("你所查找的数据元素不存在"); return NULL; } puts(LocataElem(H,'a'));
时间: 2024-03-18 10:39:36 浏览: 99
这段代码存在一些问题:
1. 函数声明中的参数类型 ElemType 未定义,需要在代码中进行定义或者引入相关头文件。
2. 函数返回值类型为 LNode*,但在调用时使用了 puts() 函数,puts() 函数的参数类型为 char*,存在类型不匹配的问题。
3. 在调用 puts() 函数时没有使用格式化字符串,会导致程序崩溃。
下面是修改后的代码:
```c
#include <stdio.h>
typedef int ElemType;
typedef struct LNode
{
ElemType data;
struct LNode* next;
} LNode, *LinkList;
LNode* LocateElem(LinkList L, ElemType e)
{
int count = 0;
LNode* p = L->next;
while (p)
{
count++;
if (p->data == e)
{
printf("你所查找的数据元素在第%d位。\n", count);
return p;
}
p = p->next;
}
printf("你所查找的数据元素不存在。\n");
return NULL;
}
int main()
{
// 创建链表
LinkList H = (LinkList)malloc(sizeof(LNode));
LNode* p = H;
for (int i = 0; i < 5; i++)
{
LNode* node = (LNode*)malloc(sizeof(LNode));
node->data = 'a' + i;
node->next = NULL;
p->next = node;
p = node;
}
// 查找元素
LNode* node = LocateElem(H, 'c');
if (node)
{
printf("查找到的元素为:%c\n", node->data);
}
return 0;
}
```
在修改后的代码中,我们定义了 ElemType 类型,并用 typedef 进行了声明,同时修正了函数声明中的参数类型。在 LocateElem 函数中,我们首先将 p 指向链表的第一个元素,然后在循环中逐个遍历链表中的元素,当遇到数据元素等于 e 时,输出数据元素的位置并返回该元素的指针。在主函数中,我们创建了一个链表并调用 LocateElem 函数查找链表中的元素,并根据返回值输出查找到的元素。
阅读全文