c语言 链表学习笔记

1:基础知识点

a:链表是由一系列独立的节点串联组成的线性数据结构,每个节点固定包含两个核心域:数据域与指针域。

数据域:专门用来存放节点要存储的实际数据

指针域:一个和节点同类型的指针变量,专门存放下一个节点的内存地址

在内存中是非连续存储的。和数组完全不同,数组的所有元素在内存中是一块连续、相邻的地址空间;而链表的每个节点可以分散在内存的不同位置,节点之间没有地址上的相邻要求,全靠指针域的地址来维系关联。

b:链表在指定位置插入、删除元素,不需要移动其他元素,仅需修改对应节点的指针指向即可。如果在数组中间插入 / 删除元素,需要移动插入位置之后的所有元素,数据量越大效率越低。

c:链表随机查找,访问速度远低于数组

d:没头结点的链表:头指针直接指向第一个存数据的节点。

复制代码
头指针 -> 第1个数据节点 -> 第2个数据节点 -> ... -> NULL

当你插入新节点时,由于它是新的"第一名",你必须强制修改头指针的指向,否则你找不到新的链表开头。

第一步:新节点的 next 指向当前的第一个节点。

第二步:头指针指向新节点。

有头结点链表:头指针指向头结点。

复制代码
头指针 -> 头结点 -> 第1个数据节点 -> 第2个数据节点 -> ... -> NULL

这是最推荐的做法。此时,头指针永远指向那个不动的"头结点"。在第一个位置插入,其实就是在头结点后面加塞。

插入数据10演示:

具体例子:静态链表

cs 复制代码
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct linknode
{
    int data;
    struct linknode* next;
};
void test()
{
//创建结构体
    struct linknode node1 = { 10,NULL };
    struct linknode node2 = { 20,NULL };
    struct linknode node3 = { 30,NULL };
    struct linknode node4 = { 40,NULL };
    struct linknode node5 = { 50,NULL };
//链表连接
    node1.next = &node2;
    node2.next = &node3;
    node3.next = &node4;
    node4.next = &node5;
    node5.next = NULL;

    struct linknode* pcurrent = &node1;
    while (pcurrent != NULL)
    {
        printf("%d\n", pcurrent->data);
        pcurrent = pcurrent->next;
    }
}
int main()
{
    test();
    std::cout << "Hello World!\n";
}
相关推荐
Xudde.4 分钟前
HackMe 靶机渗透测试(Vulnhub Writeup)
笔记·学习·安全·web安全
wdfk_prog1 小时前
LWIP教程 16:从 MTU 到 `ip4_frag()` / `ip4_reass()`——IPv4 分片、重组、超时与内存压力
运维·服务器·网络·笔记·学习
Xudde.1 小时前
AI-Web1 靶机渗透测试(Vulnhub Writeup)
笔记·学习·安全·web安全
额额额对了2 小时前
Linux 驱动学习笔记(部分)
linux·笔记·学习
老花眼猫2 小时前
曼陀罗2-曼陀罗图案自由创制App
c语言·经验分享·青少年编程·课程设计
我命由我123452 小时前
ReAct 循环
学习·ai·产品运营·学习方法·ai编程·ai写作·产品
for_ever_love__2 小时前
LangGraph Checkpointer:持久化、断点续跑与多轮记忆
服务器·数据库·学习·持久化·langgraph·checkpointer·断点续跑
学电子她就能回来吗3 小时前
LeetCode Hot 100|滑动窗口专题零基础学习笔记
笔记·学习·leetcode
小雪崩3 小时前
嵌入式学习 day68:驱动——SPI总线
学习
爱读书的小胖3 小时前
Codewars: A Brave New Wordle(C)解题分析
c语言·数据结构·算法