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日

相关文章

  • 数据结构 C语言实现循环单链表的实例

    首先,在开始讲解数据结构中循环单链表的实现前,需要明确循环单链表的概念以及其与单链表的区别。 循环单链表是一种链式存储结构,与单链表不同的是,在循环单链表的尾部也可以指向链表的头部,形成一个环。因此,我们可以通过尾部的指针来遍历整个循环单链表。 接下来,为了方便理解和学习,我们将使用C语言来实现循环单链表的实例。下面分几个步骤来讲解。 1. 定义结构体和创建…

    数据结构 2023年5月17日
    00
  • MySQL底层数据结构选用B+树的原因

    MySQL底层数据结构选用B+树的原因主要是因为B+树具有以下优点: 能够快速查找B+树的查找速度非常快,时间复杂度为O(log n),在海量数据的环境中,能够快速定位目标数据。因为B+树每次查找只需要遍历树高度的次数,即使数据量很大,树的高度也很小。 能够高效地进行增删改操作B+树的平衡性能够保证树的高度非常小,大部分操作只需要遍历树的高度,而不是整颗树,…

    数据结构 2023年5月17日
    00
  • C#数据结构之队列(Quene)实例详解

    C#数据结构之队列(Quene)实例详解 什么是队列? 队列是一种线性数据结构,只允许在队列的两端进行操作。队列是一种FIFO(First in First Out)的数据结构,即先进先出,类似于排队买票的场景。 C#中的队列(Quene) C#中队列(Quene)是System.Collections命名空间中的一个类,可以通过引入System.Colle…

    数据结构 2023年5月17日
    00
  • Codeforces Round 866 (Div. 2)

    A. Yura’s New Name 题意: 给出一个仅由_或^组成的字符串,你可以在任意位置添加_或^字符,使得字符串满足:任意字符要么属于^_^的一部分,要么属于^^的一部分。求最少添加的字符数量。 分析: 对于_我们只需处理没有组成^_^的_: ①如果_在首位置且左边没有^则添加^ ②如果_在尾位置且右边没有^则添加^ ③如果_在中间部分且右边没有^则…

    算法与数据结构 2023年4月25日
    00
  • C语言数据结构之队列算法详解

    C语言数据结构之队列算法详解 什么是队列? 在计算机科学中,队列是一种抽象数据类型或线性数据结构。它具有先进先出(FIFO)的特性,即先进入队列的元素先被处理或先被移除。队列通常用于解决先到先服务的问题(如请求处理),但也常用于广泛的异步编程中。 队列的特点 队列通常具有以下特点: 队列可以为空; 队列从队首插入元素,从队尾移除元素; 队列只允许从队尾插入元…

    数据结构 2023年5月17日
    00
  • C#数据结构揭秘一

    C#数据结构揭秘一攻略 C#数据结构是每个C#程序员必须熟练掌握的技能之一。本攻略将介绍常见的C#数据结构,包括数组、列表、栈、队列、散列表和字典。我们将会深入了解它们的特点、使用场景和使用方法,并附带代码示例加深理解。 数组 数组是存储单一类型元素的固定大小的集合结构。在C#中,可以使用以下方式声明和初始化一个数组: int[] nums1 = new i…

    数据结构 2023年5月17日
    00
  • 数据结构C语言链表的实现介绍

    数据结构C语言链表的实现介绍 1. 什么是链表? 链表是一种常见的数据结构,它由一系列的节点(Node)通过链接(Link)组成,每个节点包含两个部分:数据域(Data)和指针(Pointer),数据域用来存储数据,指针用来链接下一个节点。链表最重要的优点就是支持动态扩展,占用内存比较灵活,相比于数组,链表在增加和删除元素时更加高效。 2. 链表的实现 链表…

    数据结构 2023年5月17日
    00
  • C++数据结构AVL树全面分析

    C++数据结构AVL树全面分析 简介 AVL树是一种二叉搜索树,它通过使树保持高度平衡来提高搜索、插入和删除操作的效率。AVL树本质上是通过在插入和删除节点时旋转子树来保持平衡的。AVL树被认为是最早的自平衡二元搜索树。 AVL树的定义 AVL树是一种满足以下特性的BST: 每个节点都有一个左子树和一个右子树,并且左子树、右子树也是AVL树。 左子树高度和右…

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