C语言数据结构之单链表的查找和建立

C语言数据结构之单链表的查找和建立

什么是单链表?

单链表是一种常见的数据结构,是由若干个节点(Node)组成的链式结构,每个节点存储着链表中的元素和指向下一个节点的指针。

单链表的优点是插入、删除元素简单,但是查找元素比较困难。

在C语言中,我们可以使用结构体来定义一个节点:

struct ListNode {
    int val;
    struct ListNode *next;
};

其中,val存储着节点的值,next存储着指向下一个节点的指针。当next为NULL时,表示该节点为链表的最后一个节点。

单链表的建立

首先,我们需要定义一个头结点,头结点的作用是方便对链表的操作和遍历。头结点不存储任何值,其next指针指向第一个有效节点。

下面是一个简单的实现:

struct ListNode* createList(int nums[], int size) {
    struct ListNode *head = (struct ListNode *)malloc(sizeof(struct ListNode)); // 创建头结点
    head->next = NULL; // 初始化头结点
    struct ListNode *tail = head; // 定义链表的尾指针,方便链表的添加操作

    for (int i = 0; i < size; i++) {
        struct ListNode *node = (struct ListNode *)malloc(sizeof(struct ListNode)); // 创建一个新节点
        node->val = nums[i];
        node->next = NULL;
        tail->next = node; // 将新节点添加到链表尾部
        tail = node; // 更新链表的尾指针
    }

    return head;
}

示例:我们构建一个单链表1->2->3->4->5:

int nums[] = {1, 2, 3, 4, 5};
int size = sizeof(nums) / sizeof(nums[0]);

struct ListNode *head = createList(nums, size);

单链表的查找

顺序查找

顺序查找是比较简单的一种查找方式,从头结点开始遍历整个链表,直到找到待查找的元素或者遍历至链表末尾。

下面是顺序查找的实现代码:

struct ListNode *search(struct ListNode *head, int target) {
    struct ListNode *p = head->next;

    while (p) {
        if (p->val == target) {
            return p;
        }
        p = p->next;
    }

    return NULL;
}

示例:查找单链表中值为4的节点

struct ListNode *node = search(head, 4);
if (node) {
    printf("the node is %d\n", node->val);
} else {
    printf("the node is not found\n");
}

二分查找

由于单链表不支持随机访问,所以不适合使用二分查找进行查找操作。

总结

单链表是一种基础、常用的数据结构,掌握单链表的建立和查找操作对于进一步了解链表及其他数据结构有着重要的意义。在实现过程中需要留意指针的操作,确保链表的正确性和完整性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言数据结构之单链表的查找和建立 - Python技术站

(0)
上一篇 2023年5月17日
下一篇 2023年5月17日

相关文章

  • java数据结构之实现双向链表的示例

    Java数据结构之实现双向链表的示例 1. 什么是双向链表? 双向链表,英文名为doubly linked list,是一种链表结构。与单向链表不同,双向链表中的每一个节点除了保存了指向下一个节点的指针外,还保存了指向前一个节点的指针。因此,双向链表可双向遍历,可以从前向后或从后向前遍历。 2. 双向链表的实现 2.1 节点类的实现 创建节点类Node,并定…

    数据结构 2023年5月17日
    00
  • 简单讲解哈希表

    哈希表(Hash Table),也被称为散列表,是一种高效的数据结构,它可以在O(1)的时间复杂度下完成插入、删除、查找等基本操作。哈希表是通过将关键字映射到一个固定大小的表中来实现的,这个映射函数被称为哈希函数。 什么是哈希函数 哈希函数是将任意长度的输入值(也称为“键”或“关键字”)映射为固定大小的输出值(也称为“哈希值”或“散列”)。哈希函数必须将不同…

    数据结构 2023年5月17日
    00
  • 8个简单部分开启Java语言学习之路 附java学习书单

    8个简单部分开启Java语言学习之路 如果你想要学习Java语言,但是不知道从何入手,在这里,我们将为你提供一份简单易懂的攻略,分8个步骤带你开启Java语言学习之路。 1. 安装Java开发工具 Java学习的第一步是安装Java开发工具,目前比较流行的Java开发工具有多种,例如Eclipse、Intellij IDEA、NetBeans等。本攻略以In…

    数据结构 2023年5月17日
    00
  • 设要采用CRC编码传送的数据信息x=1001,当生成多项式为G(x)=1101时,请写出它的循环校验码。若接收方收到的数据信息x’ =1101,说明如何定位错误并纠正错误

    题目:设要采用CRC编码传送的数据信息x=1001,当生成多项式为G(x)=1101时,请写出它的循环校验码。若接收方收到的数据信息x’ =1101,说明如何定位错误并纠正错误 根据题目描述,需要采用CRC编码对数据信息x=1001进行编码,生成多项式为G(x)=1101。下面是计算循环冗余校验码的步骤:1.首先将数据信息x乘以x的次数,使得它的位数与G(x…

    算法与数据结构 2023年4月18日
    00
  • C语言实题讲解快速掌握单链表下

    C语言实题讲解快速掌握单链表下 简介 单链表是常见的一种数据结构,可以存储任意数量的数据,并且可以高效的进行插入、删除和查找操作。本篇文章将介绍如何使用C语言实现单链表,以及如何应对在实现单链表时所遇到的常见问题。 实现过程 数据结构设计 为了实现单链表,我们需要设计一个数据结构来存储节点信息,一般包含两个成员,一个是数据域,用来存储实际的数据,另一个是指针…

    数据结构 2023年5月17日
    00
  • JS中的算法与数据结构之二叉查找树(Binary Sort Tree)实例详解

    JS中的算法与数据结构:二叉查找树(Binary Sort Tree) 什么是二叉查找树 二叉查找树(Binary Sort Tree),又称二叉搜索树或二叉排序树,是一种特殊的二叉树结构。它具有以下性质: 每个结点最多只有两个子结点。 左子树中的所有结点的值均小于它的根结点的值。 右子树中的所有结点的值均大于它的根结点的值。 没有相同节点值出现 因为具备以…

    数据结构 2023年5月17日
    00
  • C++数据结构之list详解

    C++数据结构之list详解 什么是list? list是C++ STL库中的一个数据结构,它能够以O(1)的复杂度在任何位置进行插入或删除操作,当然它也支持随机访问指定位置的元素。list属于双向链表,它内部结构为指针连接不同的节点。 如何使用list? 包含头文件 在C++中使用list,需要包含头文件#include <list>。 定义l…

    数据结构 2023年5月17日
    00
  • Python数据结构之Array用法实例

    Python数据结构之Array用法实例 在Python中,Array是一种很有用的数据结构类型。它可以通过简单的方式存储一系列数据,提供快速的索引访问和高效的操作。本文将详细探讨Python中Array的用法,包括创建Array、插入、删除、修改、查找和遍历等。 创建Array 要创建一个Array,需要使用array模块。在调用前,需要首先导入该模块。A…

    数据结构 2023年5月17日
    00
合作推广
合作推广
分享本页
返回顶部