C语言实现单链表

C语言实现单链表的完整使用攻略

什么是单链表

单链表是一种常见的数据结构,它的每个节点包含两部分内容,一个是存放数据的数据域,另一个是指向下一个节点的指针域。单链表的特点是插入和删除操作非常快,但查询操作相对较慢。

单链表的实现步骤

实现一个单链表需要以下步骤:

  1. 定义节点结构体:定义一个结构体,包含数据域和指针域两个成员。
  2. 创建节点:通过malloc函数动态分配内存,创建一个新节点。
  3. 插入节点:在链表中插入一个新节点,需要遍历链表找到合适的位置,对链表进行指针调整。
  4. 删除节点:在链表中删除一个节点,同样需要遍历链表找到要删除的节点,对链表进行指针调整。
  5. 遍历链表:遍历链表,将链表中的每个节点的数据打印出来。

C语言实现单链表示例

以下示例程序实现了一个单链表,其中节点的数据域是一个整数,程序支持插入、删除和遍历三个操作,具体代码和注释见下:

#include <stdio.h>
#include <stdlib.h>

// 定义链表节点结构体
typedef struct node {
    int data;
    struct node* next;
}Node;

// 插入节点
void insert(Node* head, int i) {
    // 创建一个新节点,将数据赋值为i
    Node* p = (Node*)malloc(sizeof(Node));
    p->data = i;
    p->next = NULL;
    // 找到链表的最后一个节点
    Node* last = head;
    while (last->next) {
        last = last->next;
    }
    // 将新节点插入到链表中
    last->next = p;
}

// 删除节点
void del(Node* head, int i) {
    // 找到要删除的节点的前一个节点
    Node* p = head;
    while (p->next && p->next->data != i) {
        p = p->next;
    }
    if (p->next) {
        // 将要删除的节点从链表中移除
        Node* temp = p->next;
        p->next = p->next->next; 
        free(temp);
    }
}

// 遍历链表
void print(Node* head) {
    Node* p = head->next;
    while (p) {
        printf("%d ", p->data);
        p = p->next;
    }
    printf("\n");
}

int main() {
    // 定义链表头节点
    Node* head = (Node*)malloc(sizeof(Node));
    head->next = NULL;

    // 插入数据
    insert(head, 1);
    insert(head, 2);
    insert(head, 3);

    // 打印链表
    print(head);

    // 删除数据
    del(head, 2);

    // 打印链表
    print(head);

    // 释放内存
    Node* p = head->next;
    while (p) {
        Node* temp = p;
        p = p->next;
        free(temp);
    }
    free(head);

    return 0;
}

单链表的另一个示例

以下示例程序实现了一个链表,其中节点的数据域是一个字符串,程序支持插入、删除和遍历三个操作,具体代码和注释见下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// 定义链表节点结构体
typedef struct node {
    char data[50];
    struct node* next;
}Node;

// 插入节点
void insert(Node* head, char* str) {
    // 创建一个新节点,将数据赋值为str
    Node* p = (Node*)malloc(sizeof(Node));
    strcpy(p->data, str);
    p->next = NULL;
    // 找到链表的最后一个节点
    Node* last = head;
    while (last->next) {
        last = last->next;
    }
    // 将新节点插入到链表中
    last->next = p;
}

// 删除节点
void del(Node* head, char* str) {
    // 找到要删除的节点的前一个节点
    Node* p = head;
    while (p->next && strcmp(p->next->data ,str) != 0) {
        p = p->next;
    }
    if (p->next) {
        // 将要删除的节点从链表中移除
        Node* temp = p->next;
        p->next = p->next->next; 
        free(temp);
    }
}

// 遍历链表
void print(Node* head) {
    Node* p = head->next;
    while (p) {
        printf("%s ", p->data);
        p = p->next;
    }
    printf("\n");
}

int main() {
    // 定义链表头节点
    Node* head = (Node*)malloc(sizeof(Node));
    head->next = NULL;

    // 插入数据
    insert(head, "Hello");
    insert(head, "World");
    insert(head, "C");

    // 打印链表
    print(head);

    // 删除数据
    del(head, "World");

    // 打印链表
    print(head);

    // 释放内存
    Node* p = head->next;
    while (p) {
        Node* temp = p;
        p = p->next;
        free(temp);
    }
    free(head);

    return 0;
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言实现单链表 - Python技术站

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

相关文章

  • 明日之后怎么安装C型窗 C型窗安装版方法介绍

    下面是明日之后怎么安装C型窗的完整攻略。 安装C型窗攻略 安装C型窗的方法分为以下几步: 找到C型窗安装版 下载C型窗安装版并解压 将解压后的文件放入游戏目录中 在游戏中使用命令行安装 接下来将详细介绍每一步。 1. 找到C型窗安装版 首先需要找到C型窗安装版文件,可以在明日之后的论坛或社群中寻找,也可以在百度云、360云盘等网盘中进行下载。建议下载前先阅读…

    C 2023年5月23日
    00
  • go语言搬砖之go jmespath实现查询json数据

    下面是“go语言搬砖之go jmespath实现查询json数据”的完整攻略: 什么是go jmespath go jemspah是一个Go语言实现的JMESPath语法查询工具。JMESPath是一种用于描述如何从JSON文档中提取所需数据的查询语言。 安装go jmespath 在Go语言的环境下使用go get即可安装go jmespath: go g…

    C 2023年5月23日
    00
  • C++实现歌手比赛评分系统

    C++实现歌手比赛评分系统攻略 1. 系统概述 歌手比赛评分系统是通过为参赛歌手评分,来评选出优胜者的系统。系统主要由以下功能模块组成: 参赛选手管理 评委管理 评分操作 成绩计算 排名显示 2. 系统设计 2.1 参赛选手管理 参赛选手信息包含选手编号、选手姓名等字段,可通过键盘输入或从文件中读取。可以使用结构体或类来表示选手信息,并使用数组、链表等数据结…

    C 2023年5月23日
    00
  • 详解c++良好的编程习惯与编程要点

    详解C++良好的编程习惯与编程要点 C++是一门广泛使用的编程语言,它的语法和特性非常丰富,同时也具有很高的灵活性。但是,如果我们没有遵循一些良好的编程习惯和编程要点,将会使我们的代码难以阅读和维护。下面我们将详细讲解C++良好的编程习惯与编程要点。 1. 命名规范 良好的命名规范是写出易读易懂的代码的关键。我们应该遵循以下命名规范: 变量名和函数名应该是有…

    C 2023年5月22日
    00
  • C++计算24点的简单程序

    下面我会详细讲解如何编写一个使用C++语言计算24点的简单程序,攻略分为以下几个步骤: 1. 程序说明 计算24点是一个纸牌游戏,游戏规则如下: 从一副牌中随机选择4张牌,可以是任意花色和面值; 利用加、减、乘、除等基本运算,以及括号等数学符号,计算出24。 例如,给定四张牌5、5、3、2,可以通过以下算式计算出24: (5 + 5) * 3 – 2 = 2…

    C 2023年5月22日
    00
  • 基于C语言实现简单的走迷宫游戏

    基于C语言实现简单的走迷宫游戏攻略 一、准备工作 在实现简单的走迷宫游戏前,我们需要了解以下知识:- C语言基础知识,包括控制语句、函数、数组等;- 迷宫的表示方法,可以使用二维数组实现,其中0代表空白区域,1代表障碍物或墙壁区域;- 搜索算法,如深度优先搜索(DFS)和广度优先搜索(BFS),用于求解迷宫路径。 二、实现步骤 根据以上准备工作,我们可以分为…

    C 2023年5月23日
    00
  • 搭建C语言开发环境(Windows平台)汇总

    搭建C语言开发环境(Windows平台)汇总 简介 本文将介绍如何在Windows平台下搭建C语言开发环境,包括: 安装C语言编译器 安装集成开发环境 配置环境变量 编写并编译第一个C程序 步骤 1. 安装C语言编译器 推荐使用免费的开源GCC编译器,官方网站为 http://gcc.gnu.org/ 。可以前往该网站下载最新版本的GCC编译器安装包,然后按…

    C 2023年5月23日
    00
  • C#使用Clipboard类实现剪贴板功能

    C#使用Clipboard类实现剪贴板功能 导读 剪贴板是电脑生产过程中至关重要的一部分,通过使用剪贴板,我们可以在不同的应用程序和文本之间快速、方便地复制和粘贴数据。在C#中,我们可以使用Clipboard类来实现剪贴板的功能,本文将详细讲解如何在C#应用程序中使用Clipboard类来实现剪贴板功能。 使用Clipboard类 在C#中,Clipboar…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部