C语言——链表专题


乐观学习,乐观生活,才能不断前进啊!!!

我的主页:optimistic_chen
我的专栏:c语言
点击主页:optimistic_chen和专栏:c语言,
创作不易,大佬们点赞鼓励下吧~

前言

通过这些之前的博客:

数据结构——顺表表专题
数据结构——实现通讯录
数据结构——经典链表OJ
数据结构——经典链表OJ(二)

相信我们对链表已经有了一个模糊了认识,这篇博客将详细为你解释数据结构——链表的“身世”

文章目录

  • 前言
  • 1.链表概念
  • 2.链表结构
  • 3.链表的打印
  • 4.链表的分类
  • 5.双向链表的结构
  • 6.两者区别
  • 完结

1.链表概念

链表是一种物理储存结构非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。
类似于火车车厢,可随时增加或者减少,并且不会影响其他车厢,每一个车厢都独立存在,那要顺利通过每一节车厢,就需要我们拥有下一节车厢的钥匙
在这里插入图片描述
那么每节车厢里只存放了🔑吗?当然不是,那样的话,链表的意义在何处体现呢?
在这里插入图片描述
这样的“车厢”看起来可能有点草率,那么我们继续将链表变得更加直观,更加贴近我们程序员。

2.链表结构

在这里插入图片描述
与之前顺序表不同的是,链表里的每节“车厢”都是独立申请下来的空间 ,我们称为**”节点“**
显而易见,每一个节点的主要组成有两个部分:当前节点要保存的数据和保存下⼀个节点的地址(指针变量)
图中指针变量 plist 保存的是第⼀个节点的地址,我们称plist此时“指向”第⼀个节点,如果我们希望 plist“指向”第⼆个节点时,只需要修改plist保存的内容为0x0012FFA0。

指针变量的作用?

链表中每个节点都是独⽴申请的(即需要插⼊数据时才去申请⼀块节点的空间),我们需要通过指针
变量来保存下⼀个节点位置才能从当前节点找到下⼀个节点。(注意:最后一个节点的”钥匙“为NULL)

3.链表的打印

结合前面结构体的知识,在给定的链表结构中,如何实现节点从头到尾的打印?
代码示例:

#include <stdio.h>
#include <stdlib.h>
 
typedef struct node {
    int data;
    struct node *next;
} Node;
 
void printList(Node *head) {
    Node *current = head;//从头节点开始
    while (current != NULL) {
        printf("%d ", current->data);
        current = current->next;
        //每次打印完一个节点,指针都指向下一个节点的地址
    }
    printf("\n");
}
 
int main() {
    Node *head = NULL;//头节点为空
    Node *second = NULL;
    Node *third = NULL;
 
    head = (Node*)malloc(sizeof(Node));//申请空间
    second = (Node*)malloc(sizeof(Node));
    third = (Node*)malloc(sizeof(Node));
 
    head->data = 1;//保存数据
    head->next = second;//保存下一个节点的地址
 
    second->data = 2;
    second->next = third;
 
    third->data = 3;
    third->next = NULL;
 
    printList(head);//打印链表
 
    return 0;
}

注意:
1、链式机构在逻辑上是连续的,在物理结构上不⼀定连续
2、节点⼀般是从堆上申请的
3、从堆上申请来的空间,是按照⼀定策略分配出来的,每次申请的空间可能连续,可能不连续

4.链表的分类

链表的结构有很多种,代表不同的算法。
在这里插入图片描述
4.1单向或双向

在这里插入图片描述
4.2带头或者不带头
在这里插入图片描述
4.3循环或者不循环
在这里插入图片描述
虽然有这么多的链表的结构,但是我们实际中最常⽤还是两种结构:单链表双向带头循环链表

其他的链表我们后续到数据结构部分就会接触到,这里先不提。

5.双向链表的结构

带头双向循环链表
在这里插入图片描述

注意:这里的“带头“和前面单链表所说的”头节点“是两个概念,带头链表里的头节点实际是”哨兵位“,哨兵节点不储存任何有效元素。

”哨兵位“的意义:遍历循环链表避免出现死循环。

6.两者区别

不同点顺序表链表()单链表
存储空间上物理上连续逻辑上连续
随机访问支持不支持
插入或删除元素可能要搬移元素,效率低只需要修改指针指向
插入空间不够需要扩容没有容量概念
应用场景元素高效储存,访问频繁任意位置修改

完结

好了,这期的分享到这里就结束了~
如果这篇博客对你有帮助的话,可以点一个免费的赞并收藏起来哟~
可以点点关注,避免找不到我~
我们下期不见不散~~
这个链表题目还会继续,敬请期待~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/745676.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【算法专题--链表】旋转链表 -- 高频面试题(图文详解,小白一看就懂!!)

目录 一、前言 二、题目描述 三、解题方法 ⭐解题思路---闭合为环 &#x1f34d; 案例图解 四、总结与提炼 五、共勉 一、前言 旋转链表 这道题&#xff0c;可以说是--链表专题--&#xff0c;最经典的一道题&#xff0c;也是在面试中频率最高的一道题目&#x…

Kotlin 中的内联函数

1 inline 内联函数&#xff1a;消除 Lambda 带来的运行时开销。 举例来说&#xff1a; fun main() {val num1 100val num2 80val result num1AndNum2(num1, num2) { n1, n2 ->n1 n2} }fun num1AndNum2(num1: Int, num2: Int, operation: (Int, Int) -> Int): Int …

APT 组织也在利用云存储进行攻击

研究人员发现&#xff0c;各类攻击者都在攻击行动中将恶意脚本、远控木马和诱饵文档等恶意文件上传到云服务器上&#xff0c;各种恶意文件组合起来完成恶意攻击。 某个攻击组织从发送钓鱼邮件到植入远控木马的过程如下所示&#xff1a; 攻击链 多个恶意文件串联起了整个攻击行…

跑路代码已上线,坐等删库中~

前言 或许大家会认为删库跑路都是运维或者DBA的事情&#xff0c;或许认为我没有线上数据库权限就不可能删库跑路。但是事实并非如此&#xff0c;建议大家仔细阅读此文章&#xff0c;赶紧排查下您的代码&#xff0c;很可能隐藏着这种删库程序。还是要呼吁大家&#xff0c;这个案…

三级医院智慧医院信息化规划方案(65页PPT)

方案介绍&#xff1a; 该方案通过信息化手段实现医院信息化全覆盖&#xff0c;优化诊疗流程、提高诊疗效率和准确性&#xff1b;同时实现医疗资源的合理配置和共享&#xff0c;提升医疗服务质量。通过优化患者就医流程、提供便捷的服务和宣传健康知识等方式提高患者满意度。通…

苏州大学气膜综合馆成为师生活动新中心—轻空间

苏州大学应用技术学院的气膜综合馆自建成以来&#xff0c;已成为校园内的热门活动场所。由轻空间&#xff08;江苏&#xff09;膜科技有限公司&#xff08;以下简称“轻空间”&#xff09;全力打造&#xff0c;这座现代化、环保的多功能运动场馆&#xff0c;不仅为师生提供了一…

代码随想录第35天|动态规划

理论基础 动态规划是由前一个状态推导出来的, 而贪心是局部直接选取最优 五部曲: 确定dp数组&#xff08;dp table&#xff09;以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组 debug过程 : dp数组打印查看 509. 斐波那契数 参考 //动态规划的方法 …

Python基础教程——常用的36个经典案例!

Python 的简洁和强大使其成为许多开发者的首选语言。本文将介绍36个常用的Python经典代码案例。这些示例覆盖了基础语法、常见任务、以及一些高级功能。(文末附带精品学习资料) 1. 列表推导式 fizz_buzz_list [ "FizzBuzz" if i % 15 0 else "Fizz&qu…

陪玩系统源码,陪玩平台源码,陪玩app源码搭建

游戏陪玩app开发&#xff0c;软件搭建&#xff0c;程序制作、系统设计 目前&#xff0c;中国约有五到六亿游戏玩家&#xff0c;其中大约有两亿人选择付费游戏。这显示了绝大多数玩家都愿意为他们喜欢的游戏付费。随着游戏体验的不断改善&#xff0c;越来越多的玩家更倾向于找到…

基于Java的汽车租赁系统【附源码】

论文题目 设计&#xff08;论文&#xff09;综述&#xff08;1000字&#xff09; 当今社会&#xff0c;汽车租赁已成为一种受欢迎的出行方式。本文旨在探讨汽车租赁行业的发展趋势、市场规模及其对环境的影响。目前&#xff0c;汽车租赁行业正在经历着快速的发展。随着经济的发…

3D资产爆发,轻量化需求再度冲高,见证下一代3D崛起!

数字经济不断发展&#xff0c;3D资产和实体经济迎来深度融合的窗口期&#xff0c;3D资产应用外延催生大量新场景、新业态&#xff0c;一个3D资产构建的数字世界正出现在我们眼前。 数字经济不断发展&#xff0c;3D资产和实体经济迎来深度融合的窗口期&#xff0c;3D资产应用外…

【TB作品】MSP430,G2533单片机,红外发射,红外接收,红外通信,IR发射

文章目录 题目红外NEC协议介绍基本概述数据帧结构位表示数据传输示例重复码&#xff08;Repeat Code&#xff09;实现细节发送端接收端 典型应用结论 最终效果代码 题目 遥控器 硬件&#xff1a;msp430g2553、oled显示器、ds18b20温度传感器、红外发射器、按键 软件功能&#…

OpenAI用GPT-4o打造癌症筛查AI助手;手机就能检测中风,准确率达 82%!中国气象局发布AI气象大模型...

AI for Science 企业动态速览—— * 皇家墨尔本大学用 AI 检测患者中风&#xff0c;准确率达 82% * OpenAI 用 GPT-4o 模型打造癌症筛查 AI 助手 * 中国气象局发布 AI 气象大模型风清、风雷、风顺 * AI 药企英矽智能&#xff1a;小分子抑制剂已完成中国 IIa 期临床试验全部患者…

Socket——向FTP服务器发送消息并获得响应

1、简介 Socket&#xff08;套接字&#xff09;是网络编程中用于描述IP地址和端口的一个抽象概念&#xff0c;通过它可以实现不同主机间的通信。套接字可以分为几种不同的类型&#xff0c;每种类型对应不同的协议和传输模式。 1.1、基本概念 IP地址&#xff1a;用于标识网络…

厂区滴漏智能识别摄像机

当今&#xff0c;随着智能技术的迅猛发展&#xff0c;智能识别摄像机正逐步应用于各个行业&#xff0c;特别是在工业生产环境中&#xff0c;其作用愈发凸显。其中&#xff0c;厂区滴漏智能识别摄像机的应用成为了保障生产安全和环境保护的重要手段之一。厂区滴漏智能识别摄像机…

简述Java项目中VO,BO,PO,DO,DTO之类的文件概念、易混点

VO&#xff0c;BO&#xff0c;PO&#xff0c;DO&#xff0c;DTO 概念易混点一&#xff1a;VO和DTO- 让我们通过一个实例来阐释DTO和VO的概念及其应用差异&#xff1a;小结&#xff1a;VO专注于展示&#xff0c;而DTO则用于数据的传输和业务逻辑的处理。 二&#xff1a;BO和PO小…

记录 Bonobo Git 服务器 SMTP 设置

Bonobo 使用标准的 .NET SMTP 设置&#xff0c;可以在 web.config 中指定这些设置。 <system.net><mailSettings><smtp deliveryMethod"network" from"bonobobonoserver.your.domain"><network host"accessible.smtp.host"…

用一个暑假|用AlGC-stable diffusion 辅助服装设计及展示,让你在同龄人中脱颖而出!

大家好&#xff0c;我是设计师阿威 Stable Diffusion是一款开源AI绘画工具&#xff0c; 用户输入语言指令&#xff0c;即可自动生成各种风格的绘画图片 Stable Diffusion功能强大&#xff0c;生态完整、使用方便。支持大部分视觉模型上传&#xff0c;且可自己定制模型&#x…

AI X HI:塑造数智时代的人类镜像,网易这场分享不能错过!

2001 年&#xff0c;网易正式成立在线游戏事业部。从那以后&#xff0c;网易孵化了许多出圈的精品游戏&#xff0c;跻身成为全球七大游戏公司之一。这些游戏产品之所以能够广受玩家好评&#xff0c;并保持常青&#xff0c;一方面源于十年磨一剑的精良品质&#xff0c;另一方面则…

基于微信小程序的在线点餐系统【前后台+附源码+LW】

摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 点餐小程序&#xff0c;主要的模块包括实现管理员&#xff1b;管理员用户&#xff0c;可以对整个系统进行基本的增删改查&#xff0c;系统的日…