首页 > 其他分享 >数据结构——单向链表(C语言版)

数据结构——单向链表(C语言版)

时间:2024-03-22 20:32:29浏览次数:27  
标签:Node current head NULL C语言 链表 数据结构 节点

在数据结构和算法中,链表是一种常见的数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。在C语言中,我们可以使用指针来实现单向链表。下面将详细介绍如何用C语言实现单向链表。

目录

1. 定义节点结构体

2. 初始化链表

3. 插入节点

4. 删除节点

5. 遍历链表

6. 主函数


1. 定义节点结构体

首先,我们需要定义表示链表节点的结构体。每个节点包含一个数据域和一个指向下一个节点的指针域。

typedef struct Node {
    int data;
    struct Node* next;
} Node;
2. 初始化链表

接下来,我们需要编写函数来初始化链表。初始化链表时,我们将头指针指向NULL,表示链表为空。

Node* head = NULL;
3. 插入节点

实现在链表的头部插入节点的函数:

Node* insertNode(Node* head, int data) {
    Node* newNode = (Node*)malloc(sizeof(Node));
    newNode->data = data;
    newNode->next = head;
    return newNode;
}
4. 删除节点

实现删除指定数值节点的函数:

Node* deleteNode(Node* head, int data) {
    Node* current = head;
    Node* prev = NULL;

    while (current != NULL) {
        if (current->data == data) {
            if (prev == NULL) {
                head = current->next;
            } else {
                prev->next = current->next;
            }
            free(current);
            break;
        }
        prev = current;
        current = current->next;
    }

    return head;
}
5. 遍历链表

实现遍历链表并打印节点数据的函数:

void printList(Node* head) {
    Node* current = head;

    while (current != NULL) {
        printf("%d -> ", current->data);
        current = current->next;
    }
    printf("NULL\\n");
}
6. 主函数

在主函数中测试链表操作:

int main() {
    Node* head = NULL;

    head = insertNode(head, 1);
    head = insertNode(head, 2);
    head = insertNode(head, 3);

    printf("Initial List: ");
    printList(head);

    head = deleteNode(head, 2);

    printf("List after deleting 2: ");
    printList(head);

    return 0;
}

通过以上步骤,我们实现了用C语言创建、插入、删除和遍历单向链表的基本操作。在实陧过程中,要注意内存分配和释放,避免内存泄漏。链表是一种重要的数据结构,掌握链表的实现原理对于理解其他数据结构和算法也非常有帮助。

在接下来我们也将学习双向链表等更有意思的东西,如果本篇有不理解的地方,欢迎私信我或在评论区指出,期待与你们共同进步。

标签:Node,current,head,NULL,C语言,链表,数据结构,节点
From: https://blog.csdn.net/2301_80220607/article/details/136950908

相关文章

  • C语言概述(理论)
    1.什么是c语言?1.1 c语言是一种用于和计算机交流的高级语言,它即具有高级语言的特点,又具有汇编语言特点非常接近自然语言程序的执行效率非常高1.2c语言是所有编程语言中的经典很多高级语言和著名的系统软件都是c语言繁衍与编写的高级语言列如:c++,c#,java,go,object-c等等......
  • 【C语言】空心正方形图案
    思路:1,两行两列打印*:第一行和最后一行,第一列和最后一列。2,其他地方打印空格。代码如下:#include<stdio.h>intmain(){  intn=0;  inti=0;  intj=0;  while(scanf("%d",&n)!=EOF)    for(i=0;i<n;i++)    {......
  • c语言编程题
    1.密码破译要将"China"译成密码,译码规律是:用原来字母后面的第4个字母代替原来的字母。例如,字母"A"后面第4个字母是"E"."E"代替"A"。因此,"China"应译为"Glmre"。请编一程序,用赋初值的方法使cl、c2、c3、c4、c5五个变量的值分别为,’C’、’h’、’i’、’n’、’a’,经过运算,使c1、......
  • 【C语言】结构体详解
    文章目录1、前言2、结构体变量的创建和初始3、结构体的特殊声明3、结构体的自引用5、结构体的内存对齐5.1对齐规则5.2为什么存在内存对齐?5.3修改对齐数6、结构体实现位段6.1什么是位段6.2位段的内存分配6.3位段的跨平台问题6.4位段的应用6.5位段使用的注意事项......
  • 幸运儿(C语言)
    前期做了1篇循环数循环数(模拟(C语言))-CSDN博客的题解,虽然看的人不是很多,但觉得能帮到一部分编程初学者和爱好者也非常不错本次做的这篇文章也是一道模拟题(难易区别不好说,感觉因人而异)问题描述n个人围成一圈,并依次编号1~n,。从编号为1的人开始,按顺时针方向每隔一人选出一个,剩......
  • 深入了解C语言中浮点数的存储方式
    因为这期可能对你们来说太简单了,所以我用一个字来概括吧好了,结束了,我们下期再见喽,不会有人真的走了吧,好了,砸门多的不说少的不闹好吧,直接上主食。1.浮点数和整数在内存中存储的区别浮点数和整数在内存中存储的区别主要体现在数据表示和存储方式上:1.数据类型:  -整数(in......
  • 数据结构链表交换
    把一个长度为n的数组转换成链表并把链表前两个节点交换位置和把链表最后两个节点交换位置。输入描述:第一行输入一个正整数n表示数组的长度第二行输入n个正整数,表示数组中各个元素的值输出描述:把数组转换成链表后输出交换位置后的链表输入:42345输出:3254#......
  • #include<初见C语言之指针(3)>
    目录一、字符指针变量二、数组指针变量1.什么是数组指针变量?2.数组指针怎么初始化?三、二组数组传参的本质四、函数指针变量1.什么是函数指针变量?2.函数指针变量使用  3.有趣代码 3.1typedef关键字五、函数指针数组六、转移表总结一、字符指针变量字符指针......
  • leetcode148. 排序链表-归并法
    148.排序链表题干给你链表的头结点head,请将其按升序排列并返回排序后的链表。示例1:输入:head=[4,2,1,3]输出:[1,2,3,4]示例2:输入:head=[-1,5,3,4,0]输出:[-1,0,3,4,5]示例3:输入:head=[]输出:[]提示:链表中节点的数目在范围[0,5*104]内-105<=N......
  • C语言中,四则运算导致数据类型的转换
    在C语言中,四则运算可能导致数据类型的转换,这种转换称为隐式类型转换。以下是一些常见的数据类型转换情况:1.整数提升:当不同大小的整数类型(如`char`、`short`、`int`、`long`)进行混合运算时,较小的操作数会被提升为较大的类型,以便进行运算。例如,`char`类型的操作数会被提升为`......