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

相关文章

JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)

《JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)》:本文主要介绍如何在IntelliJIDEA2020.1中创建和部署一个JavaWeb项目,包括创建项目、配置Tomcat服务... 目录简介:一、创建项目二、tomcat部署1、将tomcat解压在一个自己找得到路径2、在idea中添加

Java使用Spire.Doc for Java实现Word自动化插入图片

《Java使用Spire.DocforJava实现Word自动化插入图片》在日常工作中,Word文档是不可或缺的工具,而图片作为信息传达的重要载体,其在文档中的插入与布局显得尤为关键,下面我们就来... 目录1. Spire.Doc for Java库介绍与安装2. 使用特定的环绕方式插入图片3. 在指定位

Java利用Spire.Doc for Java实现在模板的基础上创建Word文档

《Java利用Spire.DocforJava实现在模板的基础上创建Word文档》在日常开发中,我们经常需要根据特定数据动态生成Word文档,本文将深入探讨如何利用强大的Java库Spire.Do... 目录1. Spire.Doc for Java 库介绍与安装特点与优势Maven 依赖配置2. 通过替换

C++打印 vector的几种方法小结

《C++打印vector的几种方法小结》本文介绍了C++中遍历vector的几种方法,包括使用迭代器、auto关键字、typedef、计数器以及C++11引入的范围基础循环,具有一定的参考价值,感兴... 目录1. 使用迭代器2. 使用 auto (C++11) / typedef / type alias

C语言逗号运算符和逗号表达式的使用小结

《C语言逗号运算符和逗号表达式的使用小结》本文详细介绍了C语言中的逗号运算符和逗号表达式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习... 在C语言中逗号“,”也是一种运算符,称为逗号运算符。 其功能是把两个表达式连接其一般形式为:表达

Go语言实现桥接模式

《Go语言实现桥接模式》桥接模式是一种结构型设计模式,它将抽象部分与实现部分分离,使它们可以独立地变化,本文就来介绍一下了Go语言实现桥接模式,感兴趣的可以了解一下... 目录简介核心概念为什么使用桥接模式?应用场景案例分析步骤一:定义实现接口步骤二:创建具体实现类步骤三:定义抽象类步骤四:创建扩展抽象类步

GO语言实现串口简单通讯

《GO语言实现串口简单通讯》本文分享了使用Go语言进行串口通讯的实践过程,详细介绍了串口配置、数据发送与接收的代码实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目录背景串口通讯代码代码块分解解析完整代码运行结果背景最近再学习 go 语言,在某宝用5块钱买了个

C#实现插入与删除Word文档目录的完整指南

《C#实现插入与删除Word文档目录的完整指南》在日常的办公自动化或文档处理场景中,Word文档的目录扮演着至关重要的角色,本文将深入探讨如何利用强大的第三方库Spire.Docfor.NET,在C#... 目录Spire.Doc for .NET 库:Word 文档处理利器自动化生成:C# 插入 Word

java创建xls文件放到指定文件夹中实现方式

《java创建xls文件放到指定文件夹中实现方式》本文介绍了如何在Java中使用ApachePOI库创建和操作Excel文件,重点是如何创建一个XLS文件并将其放置到指定文件夹中... 目录Java创建XLS文件并放到指定文件夹中步骤一:引入依赖步骤二:创建XLS文件总结Java创建XLS文件并放到指定文件

前端Visual Studio Code安装配置教程之下载、汉化、常用组件及基本操作

《前端VisualStudioCode安装配置教程之下载、汉化、常用组件及基本操作》VisualStudioCode是微软推出的一个强大的代码编辑器,功能强大,操作简单便捷,还有着良好的用户界面,... 目录一、Visual Studio Code下载二、汉化三、常用组件1、Auto Rename Tag2