📅  最后修改于: 2023-12-03 14:56:20.235000             🧑  作者: Mango
在链表中搜索元素是编写链表相关程序时经常进行的操作。下面是一个用于在链表中搜索元素的 C 程序,可供程序员参考。
#include <stdio.h>
#include <stdlib.h>
/* 结点结构体 */
struct node {
int data;
struct node *next;
};
/* 创建链表 */
struct node *create_list(int n)
{
struct node *head = NULL, *tail = NULL, *p = NULL;
int i, data;
for (i = 0; i < n; ++i) {
p = (struct node*)malloc(sizeof(struct node));
printf("请输入链表第%d个结点的值:", i+1);
scanf("%d", &data);
p->data = data;
p->next = NULL;
if (head == NULL) {
head = p;
tail = p;
} else {
tail->next = p;
tail = p;
}
}
return head;
}
/* 在链表中查找指定元素 */
struct node *search_list(struct node *head, int key)
{
struct node *p = head;
while (p != NULL && p->data != key) {
p = p->next;
}
return p;
}
/* 输出链表 */
void display_list(struct node *head)
{
struct node *p;
if (head == NULL) {
printf("链表为空!\n");
return;
}
p = head;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
/* 主函数 */
int main()
{
int n, key;
struct node *list, *p;
printf("请输入链表中结点的个数:");
scanf("%d", &n);
list = create_list(n); // 创建链表
printf("链表中的元素为:");
display_list(list); // 输出链表
printf("请输入要查找的元素:");
scanf("%d", &key);
p = search_list(list, key); // 在链表中查找指定元素
if (p == NULL) {
printf("元素%d不存在于链表中!\n", key);
} else {
printf("元素%d在链表中的位置为%d。\n", key, p);
}
return 0;
}
create_list
函数创建指定长度的链表。在每次循环中,输入当前结点的值,动态申请内存,将结点插入到链表尾部。search_list
函数在链表中查找指定元素。采用循环遍历链表,查找每个结点中存储的数据是否与指定元素相等。如果找到了,则返回该结点的指针;如果遍历完整个链表仍未找到,则返回NULL
。display_list
函数输出链表中所有结点的值。如果链表为空,则输出相应提示信息。以上 C 程序可供程序员参考,适用于在链表中搜索元素的场景。程序结构清晰,代码简洁易懂,具有一定的通用性,可以为编写链表相关程序提供帮助。