C语言学习笔记—链表(一)

数据结构-带头节点的单链表(C语言)超详细讲解 前面我们学到线性表的顺序存储结构(顺序表),发现它有着明显的缺点:插入和删除元素时需要频繁的移动元素,运算效率低。必须按事先估计的最大元素个数申请连续的存储空间。存储空间估计大了,造成浪费空间;估计小了,容易产生溢出,空间难以扩大。 采用链式存储结构的线性表(链表)可以克服以上的不足。 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(存放的数据元素)+指针(指示下一个元素存储位置,单、双链表的最后一个节点除外,它们. 阅读详情

在这里插入图片描述

什么是链表?

链表是一种常见而重要的动态存储分布的数据结构。
我们知道数组元素是存储在一段连续地址上的。这样就带来了一线缺点,假如我们要删除或添加一个元素呢?那也就是说一旦增加或者删除元素就要其他相关的元素地址都要进行移动。
我们假设要在一个数组中插入一个元素在其中间位置,因为地址是连续的就需要我们把先读取位置找到对应位置后把该位置之后的元素都要向后偏移腾出位置,然后再插入。这无疑是比较麻烦的且不灵活。
而链表就很好的解决了这一问题,链表的每一项都是个结构体,在结构体里边定义一个指针指向下一个节点的地址,用一个指针指向的方式把数据串起来了。这样的话灵活性就有了。
假设:有A、B、C、D,一组数据,我想要删除C数据,只需吧B结点的指针指向D节点即可。在这里插入图片描述
增加节点数据亦是如此,将B节点指向新添加的节点将新添加的节点指向C节点即可:在这里插入图片描述

链表与数组的比较及实现

首先我们用数组的方式存放数据并输出:

#include <stdio.h>

int main()
{
	int i;
	int arry[] = {1,2,3};
	for(i=0;i<sizeof(arry)/sizeof(arry[0]);i++)
	{
		printf("%d ",arry[i]);
	}
	putchar('\n');

    system("pause");
	return 0;
}

在这里插入图片描述
同样我们用链表的方式存储并输出数据:

#include <stdio.h>
//定义结构体
struct Test 
{
	int data;
	struct Test *next;//链表有一个指向自己的指针
};

int main()
{
	int i;
	int arry[] = {1,2,3};
	for(i=0;i<sizeof(arry)/sizeof(arry[0]);i++)
	{
		printf("%d ",arry[i]);
	}
	putchar('\n');
	//定义结构体变量
	struct Test t1 = {1,NULL};
	struct Test t2 = {2,NULL};
	struct Test t3 = {3,NULL};
	return 0;
}

目前我们知道数组的存储位置是连续的知道其中一个的位置就饿可以知道其他数据的位置,而我们在上边的例子中定义的三结构体变量并不一定连续,并且目前三个变量之间没有任何联系,我们要输出t1就只能输出t1,其他的元素我们便无从下手,那么怎么才能使其产生联系呢,由此就有了链表 。
链表里边有一个指针除了需要存储的数据之外还有一个指针,用来存放其下一个节点的地址。由此:

#include <stdio.h>
//定义结构体
struct Test 
{
	int data;
	struct Test *next;//链表有一个指向自己的指针
};

int main()
{
	int i;
	int arry[] = {1,2,3};
	for(i=0;i<sizeof(arry)/sizeof(arry[0]);i++)
	{
		printf("%d ",arry[i]);
	}
	putchar('\n');
	//定义结构体变量
	struct Test t1 = {1,NULL};
	struct Test t2 = {2,NULL};
	struct Test t3 = {3,NULL};
	//指向对应节点地址形成链表
	t1.next = &t2;
	t2.next = &t3;
	//输出
	printf("%d %d %d\n",t1.data, t1.next->data, t1.next->next->data);
	return 0;
}

由此我们就使得三个数据有了对应的联系:
在这里插入图片描述
程序执行得到同样的结果:
在这里插入图片描述

【C语言学习笔记】算法篇——栈、队列、链表 #学习资料:《啊哈!算法》、《算法图解》 队列 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。 生活实例:排队买票 原则:FIFO 用处:广度优先搜索以及队列优化的BELLMAN-FORD最短算法的核心数据结构 代码展示(取自啊哈!算法中的解密) #include <stdio.h> int main() { int 阅读详情

相关推荐

用C语言实现一个链表(一)

用C语言实现一个链表(一)

Maple_land的博客 1978

C语言之链表详解

链表是一种基本的数据结构,它由一系列节点组成,每个节点包含一个值和指向下一个节点的指针。链表的特点是可以动态添加和删除节点,而不需要预先知道数据的数量。与数组不同,链表中的节点不一定是连续的存储空间,因此可以有效地利用内存空间。int val;

Wang_XB_3434的博客 7948

c语言数据结构线性表-链表----一元多项式相加

c语言数据结构线性表-链表----一元多项式相加 作业 :用链表创建两个一元多项式,并实现两个多项式相加 功能实现 尾插法创建单链表 两式相加 打印 #include<stdio.h> #include<stdlib.h> #define length sizeof(struct Polynode) //定义节点结构 typedef struct Polynode {...

精神病小麦的博客 2525

链表的介绍

链表的认识

V5Jackeylove的博客 327

【C语言】链表

本篇文章将详细讲到有关链表的概念,链表节点,链表分类,链表的基本操作包括初始化链表,遍历链表,插入节点,删除节点,清空链表,销毁链表。

2301_80035097的博客 1055

从安装到出图:一份给振动测试新手的LMS Test.Lab 2021完整避坑手册(含许可证更新和常见弹窗解决)

本文为振动测试新手提供LMS Test.Lab 2021的完整使用指南,涵盖安装配置、许可证更新、数据采集到频域后处理的全流程。特别针对常见弹窗错误提供解决方案,并详细讲解Colormap时频图分析技巧,帮助用户快速掌握振动数据分析核心技能。

weixin_29268331的博客 983

【数据结构与算法 3】单链表

一、链表的特点 1、链表是一种非线性、非顺序的物理结构,是由多个节点组成。 2、链表采用的是“见缝插针”的存储方法,不要求内存连续,靠next指针关联起来。 3、链表的物理存储方式为随机存储,访问方式为顺序访问。 4、查找节点的时间复杂度为O(n),插入、删除节点的时间复杂度为O(1)。 5、链表适用于写操作多,读操作少的场景。 二、单链表 链表是有序的列表,但是它在内存中存储如下: 上图小结: 1、链表是以节点的方式来存储,是链式存储 2、每个节点包含data域,next域:指向下

学Java,找哪吒 9249

CentOS7.9 安装 ImageMagick,图片转换为HEIC图像格式

由于ImageMagick7以下不支持heic等图片格式,所以重新安装了ImageMagick7.1版本支持heic格式,在网上找了很多资料,归纳总结并写此文章记录一下。在Linux(CentOS7.9)上安装ImageMagick7.1.1-38。

shmily_i的博客 1940

C语言 动态链表

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言项目场景:问题描述:原因分析:解决方案:一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 前言 大家好~在学习C语言的过程中,动态链表的创建总是会把我弄得有点晕(思路是有的,但是写完代码之后就很容易出错,于是今天想把我在链表创建过程中出现的问题给大家分享一下,也希望大家以后遇到了相关问题就) 项目场景: 提示:这里简述项目相关背景: 例如:项目场景:示例:通过蓝牙芯片(HC-05)与手机 APP 通信,每隔 5s

张小婷的博客 1万+

若依Vue整合积木报表实战:Token安全校验全流程解析

本文详细解析了在若依Vue后台系统中安全集成积木报表的全流程,重点阐述了Token安全校验的核心机制。通过前端菜单配置、Token传递、后端权限拦截及自定义Token服务实现,构建了一套完整的企业级报表访问安全防线,确保核心业务数据的安全可控。

t8u9v0的博客 578

反激电源反馈环路设计:从TL431+PC817原理到动态补偿实战

本文深入解析了反激电源中由TL431和PC817构成的经典反馈环路设计。从静态工作点计算到动态补偿实战,详细阐述了如何通过Type II补偿网络优化环路稳定性与动态响应,并分享了应对光耦CTR离散性、布局噪声等常见调试难题的实用技巧,帮助工程师设计出高性能、高可靠的开关电源。

moon9的博客 699

C语言学习笔记:链表(一)

有关链表 链表 链表是一种常见的基础数据结构。 链表的构成 1、链表头:指向第一个链表结点的指针; 2、链表结点:链表中的每一个元素, 包括: 1)当前结点的数据 2)下一个结点的地址 3、链表尾:不再指向其他结点的结点 ...

Qiao____的博客 302

图形推理2-四大类六提示

图形推理笔记2

小y的学习笔记 6743

一、C语言学习笔记--链表demo

/链表节点删除函数。

m0_63923574的博客 354

PCL 点云配准-ICP算法(精配准)

ICP(Iterative Closest Point)算法是一种常用的点云精细配准算法。它通过迭代计算将一组点云变换到另一组点云的最佳位置,最终实现精确的对齐。ICP算法在每次迭代中选择与目标点云最接近的点作为对应点,通过计算最小化源点云和目标点云之间的均方误差(MSE)来进行刚性变换(包括平移和旋转)。

纵马踏花向自由 1724

关于 ABAP OPEN SQL 的动态 WHERE 条件和 Dynamic Selections

ABAP动态查询技术解析 本文介绍了ABAP中实现灵活数据库查询的动态选择技术,通过FREE_SELECTIONS函数组实现用户自定义查询条件。核心内容包括: 传统固定WHERE条件的局限性,无法满足业务多变需求 Dynamic Selections机制的工作原理,使用FREE_SELECTIONS_INIT初始化、FREE_SELECTIONS_DIALOG交互 完整Demo程序演示如何构建通用表数据浏览器: 用户输入表名后校验权限 调用动态选择函数生成条件 动态拼接WHERE子句执行查询 使用CL_SA

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 676

C语言学习笔记(一):链表的创建、遍历、插入和删除

结构体定义: struct Node{ int data; struct Node *next; }; 链表的创建: struct Node* initLink() { struct Node *head; struct Node *tail; struct Node *newNode; head=(struct Node*)malloc(sizeof(struct Node)); head-&g...

lzw的博客 179

LAMMPS实例教程—In文件详解

本博文主要介绍专栏 《LAMMPS实例教程—In文件详解》, 针对于 Lammps 可分析的物理过程进行讲解,提供 In 文件以及后处理方法,持续更新。 目前分为8个专题: 1)力学专题、2)传热专题、3)相变专题、4)界面专题、5)吸附专题、6)流动专题、7)物性专题以及8)基础理论专题。

Rockyoung 3万+

C语言学习笔记——链表

C语言学习笔记 链表 创建链表 链表是什么: 其实是多个结构体,里面存有数据和指针,其中上一个结构体的指针成员指向了下一个结构体,如此往复,就可以实现链表。 如果我们想在链表后面加入新的内容,只需要再创建(malloc)一个节点,并使之前尾部的节点中的指针指向他。 链表可以分为两种:有空头和无空头,有空头也就是第一个节点使不储存数据的,其他节点都接在他的后面,无空头的链表第一个节点存有数据...

qq_39079631的博客 829

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

C语言学习记录(13)链表实验题目 && 有序链表

C语言学习记录 前言 一直自己没有学习做笔记的习惯,所以为了加强自己对知识的深入理解,决定将学习笔记写下来,希望向各位大牛们学习交流! 不当之处请斧正!在此感谢!这边就先从学习C语言写起,自己本身对程序语言方面不擅长,所以决定对此从基础开始学习, 大牛们对此文可以忽略! 学校OJ实验 链表实验题目 Problem Description 链表结点的结构定义为: struct node{ int ...

Hyena__的博客 1734

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

C语言——链表

C语言——链表 链表是一种基础的数据结构类型,一种能够动态维护数据的线性数据表。链表的数据以结点形式存储信息,并通过结点之间的指针实现结点之间的衔接。 为什么要用链表? 链表和数组类似,但是功能比数组强大得多,数组的空间是固定的,在定义数组的时候,数组的大小已经被固定,在使用时有可能会造成空间的浪费或者面临空间不够的风险,而链表的空间是动态的,则避免了这一问题。 我们来看最基础的单向链表: 1.首先要定义结构体作为链表的结点: typedef struct node { int data; struct

m0_62386635的博客 2万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

C语言 链表笔记

笔者打算用C语言写一个贪吃蛇,但是还没有学习过链表,所以本文是笔者有关链表学习的笔记。学习链表前,需要掌握结构体和指针的知识参考的是一位大佬的文章C语言链表(单向,双向)//以下图片均来自这篇文章双向链表的大多数操作与单向链表相似,需要注意的是结束条件大多是!=phead而不是!=NULL,记住在操作一个结点是,一定先要用一个临时结点来存储要操作的这个结点continue~

Loving CS ~ 1649

C语言学习笔记

C语言学习笔记

dmq9921的博客 1822

【C语言学习】基于C语言分析链表结构

链表如同一辆火车的车厢,它允许各个元素以自由的规则进行存储,并且理论上无存储上限即根据需求无限挂载车厢。而使用较多的数组如同一辆货车,它只能以定义的大小跟规则进行存储,当需求超载时,现在的解决办法便是更换更大的货车即数组扩容。链表在C和指针这本书中被定义为是一些包含数据的独立数据结构(通常称为节点)的集合。链表中的每个节点通过链或指针连接在一起。程序通过指针访问链表中的节点。简单点说链表节点就是一节一节的火车车厢,它们之间的挂钩就是指针,访问时只要知道第一个挂钩的状态就能依次知道剩下的状态。

SYWG0的博客 1227

C语言学习笔记——链表(单链表)

链表是什么呢,其实就是数据的一种存储方式。相对于线性存储,链表是链式存储。它不像数组,每个元素的物理地址是相邻的。链表中每个元素(通常称为节点)的地址是随机的。每当要添加新节点时,链表就要开辟新的空间。即有多少个节点,就开辟多少空间,不会造成空间浪费,这就是链表的优势所在。

唐学长的博客 1788

C语言学习之链表

双向链表是一种链表结构,其中每个节点不仅包含指向下一个节点的指针 next,还包含指向前一个节点的指针 prev。链表的删除操作是指从链表中移除一个节点,并正确地更新链表结构,以确保链表的连续性。删除节点时,我们需要找到目标节点,并将其前一个节点的指针指向目标节点的下一个节点。查找的过程就是从链表头节点开始,逐个访问节点的数据,并与目标数据进行比较,直到找到相匹配的节点或到达链表的末尾。在双向链表中删除节点时,需要注意更新被删除节点的前后节点的指针。双向链表的插入操作根据插入位置不同,头部、尾部、中间。

zhaozhaoxiyang的博客 1511
上一篇: C语言学习笔记—type关键字
下一篇: C语言学习笔记—链表(二)链表的静态添加及动态遍历
Akzeptieren
博客等级 码龄8年 65粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值