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日

相关文章

  • sublime text3搭建配置c语言编译环境的详细图解教程(小白级)

    下面是“sublime text3搭建配置c语言编译环境的详细图解教程(小白级)”的完整攻略。 1. 安装Sublime Text3 首先需要在Sublime Text3官网上下载安装Sublime Text3,下载地址为:https://www.sublimetext.com/3 2. 安装Package Control插件 Sublime Text3安装…

    C 2023年5月23日
    00
  • vscode中launch.json和task.json配置教程(重要参数详解)

    接下来我会详细讲解“vscode中launch.json和task.json配置教程(重要参数详解)”的完整攻略,分为以下几部分: 一、 launch.json 1.1 什么是launch.json launch.json是Visual Studio Code配置文件之一,用于设置VS Code的调试器。 1.2 如何创建launch.json文件 在打开的…

    C 2023年5月23日
    00
  • C语言 if-else语句

    下面详细讲解一下C语言中if-else语句的完整使用攻略。 一、if-else语句 if-else语句是C语言中最基本的条件判断语句,用来根据条件来决定执行不同的语句。if语句用于判断条件是否成立,如果成立则执行if后面的语句,否则执行else后面的语句。 语法格式: if (condition) { // 如果条件成立,执行这里的语句 } else { /…

    C 2023年5月9日
    00
  • C语言实现学生管理系统总结

    C语言实现学生管理系统总结 本文将介绍使用C语言实现学生管理系统的完整攻略。学生管理系统是一个常见的管理系统的应用之一。通过它,我们可以对学生的信息进行管理和查询,提高管理效率。下面将详细介绍如何使用C语言实现学生管理系统。 1.需求分析 在开始实现学生管理系统之前,我们需要进行需求分析,明确系统的功能和需求。下面是该系统需要完成的功能和需求: 添加学生信息…

    C 2023年5月23日
    00
  • php中json_decode()和json_encode()的使用方法

    关于 PHP 中 JSON 数据的编码和解码,通常会使用两个函数 json_encode() 和 json_decode()。 json_encode() 的使用方法 json_encode() 函数是将 PHP 中的数据转为 JSON 字符串的方法。它的语法如下: json_encode($value, $options = 0, $depth = 512…

    C 2023年5月23日
    00
  • php json_encode()函数返回json数据实例代码

    下面是关于php json_encode()函数返回json数据实例代码的详细攻略: 1. json_encode()函数简介 json_encode()函数是PHP内置的一个函数,是将PHP变量转换为JSON格式的字符串的常用方法。在实际开发中,通过该函数将PHP数组、对象等数据类型转换为JSON格式后,可以通过Ajax技术在前端页面实现异步数据传输。 2…

    C 2023年5月23日
    00
  • office2003怎么设置R1C1样式?

    当你使用Microsoft Office 2003时,可以选择使用相对参照样式,也就是R1C1样式,而不使用A1样式。下面将为你详细讲解如何设置R1C1样式。 步骤1:进入选项设置 首先打开Microsoft Excel 2003,然后单击工具栏上的“选项”按钮。在弹出的“选项”窗口中,单击“工作表”选项卡。 步骤2:启用R1C1样式选项 在“工作表”选项卡…

    C 2023年5月23日
    00
  • C/C++ 引用作为函数的返回值方式

    C/C++ 中引用是一种特别的数据类型,其本质是指向其他变量地址的别名。引用作为函数的返回值方式,可以避免拷贝对象造成的性能浪费,并且使代码更加简洁易懂。 返回值为左值引用 当函数的返回值声明为左值引用时,我们可以在函数内返回对象的引用,由于返回值是一个引用,因此可以对该对象进行修改。下面是一个简单的例子: #include <iostream>…

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