C语言对链表的基本操作(1、创建表 2、创建节点 3、表头插入 4、表尾插入 5、打印表)

2023-10-13 05:30

本文主要是介绍C语言对链表的基本操作(1、创建表 2、创建节点 3、表头插入 4、表尾插入 5、打印表),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 链表的结构体定义(结点定义)

链表的一个结点首先肯定包含一个数据域和一个指针域,数据域用来存放结点数据,指针域存放的是指向下一个结点的地址。当然,头节点例外,其实,头结点和普通结点一样,只不过头结点只存放了指向下一个结点的地址(即首结点)。

2、创建节点  为插入做准备,学习数据的时候,一定要把功能划分明确

3、表头插入
//  插在头结点之后  插队插入,不能越过头结点
//  插队插入,不能越过头结点

只需要强调一点,头插法是在头结点尾部,尾插法是在链表尾部插入,这个不要理解错了。其实思想和尾插类似,只要记得插入是和头结点有关,

    newNode->next = headNode->next;

    headNode->next = newNode;

newNode始终是用来接收输入数据,然后插入头结点的尾部,headNode->next是头指针每次插入新节点之前,最近指向一次插入的结点。当新节点排队插入后,需要将新节点的next指向原先插入之前,距离头结点最接的结点  headNode->next

4.尾插法建立链表

这里,尾插法是在链表尾部插入结点的

所以先创建一个头结点,struct Node* newNode = createNode(data);

并提前在 createNode(data)函数中为头节点分配结点空间,

然后 head->next=NULL,此时只有头节点,所以链表下一个结点为空。

尾插法关键代码就是

struct Node* tailNode = headNode;
    while (tailNode->next != NULL)
    {

        tailNode = tailNode->next;
    }
    tailNode->next = newNode;

头插法  依次插入0-9 

尾插法  依次插入 100  1000两个数

// 表头插入  表尾插入  打印链表/*   任务   */
//  1、创建表
//  2、创建节点
//  3、表头插入
//  4、表尾插入
//  5、打印表
//  6、表头删除#include<stdio.h>
#include<stdlib.h>/*  C语言  <1>  什么是链式结构  碎片内存存储*/
/*  创建表:结构体变量和结构体变量  连接在一起  */
//  结构体变量  使用指针去表示----->指针成为变量------->动态内存申请
//  如何去表示一个表:使用第一个节点来表示整个链表
struct Node   //自定义节点
{int data;struct Node *next;
};//  1、创建表
struct Node *createList()
{struct Node *headNode = (struct Node*)malloc(sizeof(struct Node));headNode->next = NULL;//  变量规则:变量需要初始化,才能使用//data  为什么不可以初始化  不初始化 与众不同  有表头的链表//  差异化处理headNode->data = -111;return headNode; //  返回指针变量}//  2、创建节点  为插入做准备,学习数据的时候,一定要把功能划分明确
struct Node *createNode(int data)
{struct Node *newNode = (struct Node *)malloc(sizeof(struct Node));newNode->data = data;newNode->next = NULL;return newNode;  返回指针变量
}//  3、表头插入
//  插在头结点之后  插队插入,不能越过头结点
//  插队插入,不能越过头结点// 函数参数设计是具有含义的:插入那个链表??插入的新节点的定义变量
void insertNodeByHead(struct Node *headNode, int data)  //表头法插入
{// 1、插入的新节点的定义变量struct Node* newNode = createNode(data);// 2、 插在头结点之后  插队插入,不能越过头结点newNode->next = headNode->next;headNode->next = newNode;
}//  4、表尾插入
void insertNodeByTail(struct Node *headNode, int data)
{struct Node* newNode = createNode(data);struct Node* tailNode = headNode;while (tailNode->next != NULL){tailNode = tailNode->next;}tailNode->next = newNode;
}void printList(struct Node *headNode)  //打印,浏览信息
{//  有表头,要从第二个节点开始打印struct Node *pMove = headNode->next;while (pMove != NULL){printf("%d\t", pMove->data);pMove = pMove->next;}printf("\n");
}int main()
{struct Node *list1 = createList();for (int i = 0; i < 10; i++){insertNodeByHead(list1, i);}printList(list1);insertNodeByTail(list1, 100);insertNodeByTail(list1, 1000);printList(list1);system("pause");return 0;
}

头插法  依次插入0-9 

尾插法  插入 100  1000两个数

 

这篇关于C语言对链表的基本操作(1、创建表 2、创建节点 3、表头插入 4、表尾插入 5、打印表)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/201081

相关文章

Python进阶之Excel基本操作介绍

《Python进阶之Excel基本操作介绍》在现实中,很多工作都需要与数据打交道,Excel作为常用的数据处理工具,一直备受人们的青睐,本文主要为大家介绍了一些Python中Excel的基本操作,希望... 目录概述写入使用 xlwt使用 XlsxWriter读取修改概述在现实中,很多工作都需要与数据打交

Window Server创建2台服务器的故障转移群集的图文教程

《WindowServer创建2台服务器的故障转移群集的图文教程》本文主要介绍了在WindowsServer系统上创建一个包含两台成员服务器的故障转移群集,文中通过图文示例介绍的非常详细,对大家的... 目录一、 准备条件二、在ServerB安装故障转移群集三、在ServerC安装故障转移群集,操作与Ser

Window Server2016 AD域的创建的方法步骤

《WindowServer2016AD域的创建的方法步骤》本文主要介绍了WindowServer2016AD域的创建的方法步骤,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一、准备条件二、在ServerA服务器中常见AD域管理器:三、创建AD域,域地址为“test.ly”

使用SQL语言查询多个Excel表格的操作方法

《使用SQL语言查询多个Excel表格的操作方法》本文介绍了如何使用SQL语言查询多个Excel表格,通过将所有Excel表格放入一个.xlsx文件中,并使用pandas和pandasql库进行读取和... 目录如何用SQL语言查询多个Excel表格如何使用sql查询excel内容1. 简介2. 实现思路3

Go语言实现将中文转化为拼音功能

《Go语言实现将中文转化为拼音功能》这篇文章主要为大家详细介绍了Go语言中如何实现将中文转化为拼音功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 有这么一个需求:新用户入职 创建一系列账号比较麻烦,打算通过接口传入姓名进行初始化。想把姓名转化成拼音。因为有些账号即需要中文也需要英

Go语言使用Buffer实现高性能处理字节和字符

《Go语言使用Buffer实现高性能处理字节和字符》在Go中,bytes.Buffer是一个非常高效的类型,用于处理字节数据的读写操作,本文将详细介绍一下如何使用Buffer实现高性能处理字节和... 目录1. bytes.Buffer 的基本用法1.1. 创建和初始化 Buffer1.2. 使用 Writ

深入理解C语言的void*

《深入理解C语言的void*》本文主要介绍了C语言的void*,包括它的任意性、编译器对void*的类型检查以及需要显式类型转换的规则,具有一定的参考价值,感兴趣的可以了解一下... 目录一、void* 的类型任意性二、编译器对 void* 的类型检查三、需要显式类型转换占用的字节四、总结一、void* 的

Python在固定文件夹批量创建固定后缀的文件(方法详解)

《Python在固定文件夹批量创建固定后缀的文件(方法详解)》文章讲述了如何使用Python批量创建后缀为.md的文件夹,生成100个,代码中需要修改的路径、前缀和后缀名,并提供了注意事项和代码示例,... 目录1. python需求的任务2. Python代码的实现3. 代码修改的位置4. 运行结果5.

使用IntelliJ IDEA创建简单的Java Web项目完整步骤

《使用IntelliJIDEA创建简单的JavaWeb项目完整步骤》:本文主要介绍如何使用IntelliJIDEA创建一个简单的JavaWeb项目,实现登录、注册和查看用户列表功能,使用Se... 目录前置准备项目功能实现步骤1. 创建项目2. 配置 Tomcat3. 项目文件结构4. 创建数据库和表5.

使用SpringBoot创建一个RESTful API的详细步骤

《使用SpringBoot创建一个RESTfulAPI的详细步骤》使用Java的SpringBoot创建RESTfulAPI可以满足多种开发场景,它提供了快速开发、易于配置、可扩展、可维护的优点,尤... 目录一、创建 Spring Boot 项目二、创建控制器类(Controller Class)三、运行