C语言实现链表创建

article/2025/10/5 19:44:07

C语言实现链表的创建

链表:是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。

从链表的概念中不难得出,链表是由一系列结点组成的。
结点又包含有数据域和指针域,数据域存储数据元素,指针域则用来指向别的结点或者存储下一个结点地址,起到链接作用。


一.从百度百科的这副图片来简单理解一下链表的结构在这里插入图片描述

1.创建头结点head
2.在创建一个结点用来保存每次插入的结点p1
3.循环创建一般结点p2、p3…
4.将创建的结点与已有的结点链接起来
5.遍历链表并输出数据
注意!
我们需要使用malloc函数给结点分配内存,malloc用完最好free,防止造成内存泄漏

  • 链表的优点:灵活性。插入和删除操作时,只需修改被删节点上一节点的链接地址,不需要移动元素,从而改进了在顺序存储结构中的插入和删除操作需要移动大量元素的缺点。
  • 链表的缺点: 随机访问。链表的访问取决于结点的位置,当需要随机访问结点时,在顺序存储结构中的效率低。

二.链表的相关操作

1.创建链表(前插法、尾插法、序插法、定位法)

  • 前插法:将新生成的结点依次插入头结点之后创建链表。
  • 尾插法:将新生成的结点依次插入到链表的最后面,作为新链表的最后一个结点。
  • 序插法:将新生成的结点依次插入后保证结点域数据的有序性。
  • 定位法:新生成的结点依次插入到链表中指定的位置中。

2.遍历链表:就是对于某一个数据结构中所有元素按照一定的顺序依次访问。对链表来说,就是从链表的头结点一直访问到链表的尾结点。

3.清空链表:把所有存有数据的结点清空释放出去(除了头结点以外)。

4.销毁链表: 把链表的东西全部清空,就不存在这个链表了,把包括头结点在内的所有节点释放掉。

5.链表逆序:把每一个节点指向的下一个节点的next的指针倒过来进而指向它的前面的那个节点。

三、代码示例

  • 我用尾插法来展示我对链表的理解,尾插法也是最容易理解的。
 /*尾插法建立链表*/#include <stdio.h>#include <stdlib.h>struct list     //创建链表的结构体{int    data;                //创建数据域struct list *next;          //创建指针域};int main(int argc,char *argv[]){int n;                      //设置结点的个数int i;                      //设置创建的结点的个数struct list *head = (struct list *)malloc(sizeof(struct list));//创建头结点用malloc分配内存head->next = NULL;          //头结点指针初始化struct list *p;             //创建p结点,p结点用于记录链表尾结点p = head;                   //p结点指针赋值为头结点printf("从键盘输入链表长度是:\n");                                                                                                                                 scanf("%d",&n);printf("输入数据为:\n");/* 链表的创建*/ for(i=0;i<n;i++)            //循环创建结点{   struct list *p1=(struct list *)malloc(sizeof(struct list)); //创建p1结点,并分配内存scanf("%d",&p1->data);  //给p1结点赋值p->next = p1;           p1->next = NULL;        //让插在尾部的p1结点的指针指向NULLp = p1;}/*链表的遍历*/p = head;                   //从头结点开始遍历while(p->next != NULL)      //只要p结点下一个结点不为空,证明还有结点存在,打印p后面结点的数据{printf("%d",p->next->data);p = p->next;            //p结点移动到下一个结点}printf("\n");/*清空链表*/p=head->next;               //让p结点指向头结点下一位while(head->next!=NULL)     //当头结点下一位一直不为空时{head->next=p;           //将头结点下一位赋予pp=p->next;              //新的p结点=头结点下一位的下一位 直到尾结点=头结点free(head->next);head->next=NULL;        //确保头结点下一位为空}printf("clean the list sucessfuly!\n");return 0;}

运行得到结果显示如下:
在这里插入图片描述


http://chatgpt.dhexx.cn/article/bN0uwk4W.shtml

相关文章

链表(c语言实现)

1.链表的分类 实际中链表的结构非常多样&#xff0c;以下情况组合起来就有8种链表结构&#xff1a; &#xff08;1&#xff09;单向或者双向 &#xff08;2&#xff09;带头或者不带头 &#xff08;3&#xff09;循环或者非循环 虽然有这么多的链表的结构&#xff0c;但是我们…

用c语言写链表

链表是数据结构的一种&#xff0c;是其他三个数据结构栈&#xff0c;树&#xff0c;图的基础&#xff0c;只有将链表这一数据结构弄懂&#xff0c;才能理解其他三种数据结构。 举一个例子&#xff0c;老师让你设计一个联系人系统&#xff0c;其中包括姓名&#xff0c;电话号&am…

C语言链表超详解

✅作者简介&#xff1a;嵌入式入坑者&#xff0c;与大家一起加油&#xff0c;希望文章能够帮助各位&#xff01;&#xff01;&#xff01;&#xff01; &#x1f4c3;个人主页&#xff1a;rivencode的个人主页 &#x1f525;系列专栏&#xff1a;玩转数据结构 &#x1f4ac;保持…

C语言——链表简单介绍

一、链表的引入 我们至少可以通过两种结构存储数据。 数组&#xff1a;数组是一个固定长度的存储相同数据类型的数据结构&#xff0c;数组中的元素被存储在一段连续的内存空间中。 优点&#xff1a;存取速度快。 缺点&#xff1a;需要一个连续的很大的内存&#xff1b; 插入和…

c语言链表示例

链表是一种常见的基础数据结构&#xff0c;结构体指针在这里得到了充分的利用。链表可以动态的进行存储分配&#xff0c;也就是说&#xff0c;链表是一个功能极为强大的数组&#xff0c;他可以在节点中定义多种数据类型&#xff0c;还可以根据需要随意增添&#xff0c;删除&…

反转链表c语言

反转链表 初始化三个指针 循环执行 temp cur→next cur→next pre pre cur ; cur temp 对于单链表&#xff0c;所有操作都是从头指针开始 // An highlighted block struct ListNode* ReverseList(struct ListNode* pHead ) {// 三指针法struct ListNode* pre pHead;s…

链表C语言实现--单向链表

线性结构的链式存储也称为链表&#xff0c;相比于顺序表&#xff0c;链表能够解决顺序表中空间资源浪费问题以及空间不足的问题。链表的每一个结点包含数据域和指针域&#xff0c;而每一个结点在内存中的地址是不连续的&#xff0c;且能适应动态变化。在数据插入和数据删除操作…

循环链表C语言实现

本文介绍循环链表中的单向循环链表&#xff0c;双向循环链表两种 第一种&#xff1a;单向循环链表&#xff0c;是在单向链表的基础上&#xff0c;尾结点不再指向NULL&#xff0c;而是指向头结点从而构成循环。如下图&#xff1a; 所以相比单向链表最大的特点就是可以从尾快速循…

C语言基础入门:链表详解篇

链表概述 链表是一种常见的重要的数据结构。它是动态地进行存储分配的一种结构。它可以根据需要开辟内存单元。链表有一个“头指针”变量&#xff0c;以head表示&#xff0c;它存放一个地址。该地址指向一个元素。链表中每一个元素称为“结点”&#xff0c;每个结点都应包括两个…

C语言——基础链表详解

敢于向黑暗宣战的人&#xff0c;心里必须充满光明。 一、链表的构成 1.构成 链表是由一连串的结构&#xff08;称为结点&#xff09;组成的。 (1)结点的构成&#xff1a; 数据&#xff08;要储存的数据&#xff09;指针&#xff08;指向下一个结点的指针&#xff09; (2)关…

C语言数据结构——链表

目录 前言 一、什么是链表 1.1链表的结构和概念 1.2 链表的分类 二、无头单向非循环链表 2.1 创建结构体 2.2 动态申请一个节点 2.3 单链表打印 2.4 单链表尾插/尾删 2.4.1 单链表尾插 2.4.2 单链表尾删 2.5 单链表头插/头删 2.5.1 头插 2.5.2 头删 2.6 单链表查…

C语言链表详解(通俗易懂)

文章目录 前言一、什么是线性表&#xff1f;二、顺序表&#xff1a;三、链表&#xff1a;四、顺序表和链表对比&#xff1a;总结 前言 线性表是实际中广泛应用的重要数据结构&#xff0c;本文用通俗易懂的方法讲解它。 一、什么是线性表&#xff1f; 首先&#xff0c;我们了解…

C语言——链表

C语言——链表 链表是一种基础的数据结构类型&#xff0c;一种能够动态维护数据的线性数据表。链表的数据以结点形式存储信息&#xff0c;并通过结点之间的指针实现结点之间的衔接。 为什么要用链表&#xff1f; 链表和数组类似&#xff0c;但是功能比数组强大得多&#xff0c…

在?您的rsyslog日志管理手册到了,请查收

rsyslog日志管理和logrotate日志存储轮转 前言&#xff1a; 系统日志是记录服务器系统运行和软件运行状况的记录程序&#xff0c;如果系统和软件在运行中出错&#xff0c;我们就可以在日志中获取到问题发生时的记录&#xff0c;并以此寻求解决问题的方法。 一.rsyslog 系统日…

日志审计与分析实验三(rsyslog服务器端和客户端配置)(Linux日志收集)

文章目录 Linux日志收集一、实验目的&#xff1a;1、掌握rsyslog配置方法2、配置rsyslog服务收集其他Linux服务器日志: 二、实验步骤&#xff1a;1、前期配置2. rsyslog的三种传输协议1、udp传输方式2、tcp传输方式3、relp传输方式 Linux日志收集 一、实验目的&#xff1a; 1…

Linux系统之rsyslog配置

目录 Rsyslog简介 Linux配置rsyslog 配置实验&#xff1a; 实验环境&#xff1a; 实验步骤&#xff1a; 实验准备&#xff1a; 针对UDP&#xff1a; 针对TCP&#xff1a; 针对RELP&#xff1a; 结果验证&#xff1a; 1、UDP&#xff1a; 2、TCP&#xff1a; 3、RE…

rSyslog日志

日志服务管理 系统日志管理 系统日志介绍 日志的作用&#xff1a; 软件的运行记录软件运行排错运行分析 日志记录的内容包括&#xff1a; 历史事件&#xff1a;时间&#xff0c;地点&#xff0c;人物&#xff0c;事件日志级别&#xff1a;事件的关键性程度&#xff0c;Lo…

Linux rsyslog详细介绍

转自&#xff1a;http://llei623.blog.163.com/blog/static/852075042010111482731766/ 作者&#xff1a;llei WEB服务器多的时候检查日志是一件痛苦的事情&#xff0c;用 perl 脚本登录到服务器上grep一些错误信息两次之后就觉得是纯体力活&#xff0c;想办法偷懒。 准备弄…

Linux系统日志rsyslogd

Linux系统日志rsyslogd Linux系统日志 Linux上使用rsyslogd守护进程接收用户进程输出的日志和接收内核日志。 用户进程是通过syslogd函数生成系统日志。该函数将日志输出到一个UNIX本地域socket类型(AF_UNIX&#xff09;的文件/dev/log中&#xff0c;rsyslogd则监听该文件以…

Linux之 rsyslog、日志轮转

1.rsyslog 1.1rsyslog介绍 Rsyslog的全称是 rocket-fast system for log&#xff0c;它提供了高性能&#xff0c;高安全功能和模块化设计。rsyslog能够接受从各种各样的来源&#xff0c;将其输入&#xff0c;输出的结果到不同的目的地。rsyslog可以提供超过每秒一百万条消息给…