📌  相关文章
📜  用于在链表中搜索元素的 C 程序(1)

📅  最后修改于: 2023-12-03 14:56:20.235000             🧑  作者: Mango

用于在链表中搜索元素的 C 程序

在链表中搜索元素是编写链表相关程序时经常进行的操作。下面是一个用于在链表中搜索元素的 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;
}
代码解释
  1. 创建链表:使用create_list函数创建指定长度的链表。在每次循环中,输入当前结点的值,动态申请内存,将结点插入到链表尾部。
  2. 搜索链表:使用search_list函数在链表中查找指定元素。采用循环遍历链表,查找每个结点中存储的数据是否与指定元素相等。如果找到了,则返回该结点的指针;如果遍历完整个链表仍未找到,则返回NULL
  3. 输出链表:使用display_list函数输出链表中所有结点的值。如果链表为空,则输出相应提示信息。
总结

以上 C 程序可供程序员参考,适用于在链表中搜索元素的场景。程序结构清晰,代码简洁易懂,具有一定的通用性,可以为编写链表相关程序提供帮助。