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

相关文章

使用Go语言开发一个命令行文件管理工具

《使用Go语言开发一个命令行文件管理工具》这篇文章主要为大家详细介绍了如何使用Go语言开发一款命令行文件管理工具,支持批量重命名,删除,创建,移动文件,需要的小伙伴可以了解下... 目录一、工具功能一览二、核心代码解析1. 主程序结构2. 批量重命名3. 批量删除4. 创建文件/目录5. 批量移动三、如何安

Java中对象的创建和销毁过程详析

《Java中对象的创建和销毁过程详析》:本文主要介绍Java中对象的创建和销毁过程,对象的创建过程包括类加载检查、内存分配、初始化零值内存、设置对象头和执行init方法,对象的销毁过程由垃圾回收机... 目录前言对象的创建过程1. 类加载检查2China编程. 分配内存3. 初始化零值4. 设置对象头5. 执行

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

Go语言中三种容器类型的数据结构详解

《Go语言中三种容器类型的数据结构详解》在Go语言中,有三种主要的容器类型用于存储和操作集合数据:本文主要介绍三者的使用与区别,感兴趣的小伙伴可以跟随小编一起学习一下... 目录基本概念1. 数组(Array)2. 切片(Slice)3. 映射(Map)对比总结注意事项基本概念在 Go 语言中,有三种主要

Python创建Excel的4种方式小结

《Python创建Excel的4种方式小结》这篇文章主要为大家详细介绍了Python中创建Excel的4种常见方式,文中的示例代码简洁易懂,具有一定的参考价值,感兴趣的小伙伴可以学习一下... 目录库的安装代码1——pandas代码2——openpyxl代码3——xlsxwriterwww.cppcns.c

C语言中自动与强制转换全解析

《C语言中自动与强制转换全解析》在编写C程序时,类型转换是确保数据正确性和一致性的关键环节,无论是隐式转换还是显式转换,都各有特点和应用场景,本文将详细探讨C语言中的类型转换机制,帮助您更好地理解并在... 目录类型转换的重要性自动类型转换(隐式转换)强制类型转换(显式转换)常见错误与注意事项总结与建议类型

使用Python在Excel中创建和取消数据分组

《使用Python在Excel中创建和取消数据分组》Excel中的分组是一种通过添加层级结构将相邻行或列组织在一起的功能,当分组完成后,用户可以通过折叠或展开数据组来简化数据视图,这篇博客将介绍如何使... 目录引言使用工具python在Excel中创建行和列分组Python在Excel中创建嵌套分组Pyt

使用Python在Excel中插入、修改、提取和删除超链接

《使用Python在Excel中插入、修改、提取和删除超链接》超链接是Excel中的常用功能,通过点击超链接可以快速跳转到外部网站、本地文件或工作表中的特定单元格,有效提升数据访问的效率和用户体验,这... 目录引言使用工具python在Excel中插入超链接Python修改Excel中的超链接Python