当前位置: 首页 > news >正文

网站展现形式免费企业注册

网站展现形式,免费企业注册,高校网站建设需求单,成都网站设计优秀柚v米科技1. 指针变量的本质:存储内存地址​在 C 语言中,​指针变量(如 head、temp、newNode->next)的本质是存储内存地址的变量。它们的值是一个“地址编号”(比如 0x1000、0x2000),表示它们指向的内…

1. 指针变量的本质:存储内存地址

在 C 语言中,​指针变量(如 headtempnewNode->next)的本质是存储内存地址的变量。它们的值是一个“地址编号”(比如 0x10000x2000),表示它们指向的内存位置。

Node* head = NULL;  // head 存储的地址是 NULL(0x0)
Node* temp;         // temp 未初始化(存储随机地址)

当执行 Node* temp = head; 时:

  • temp 被赋值为 head 的当前值(即 NULL)。
  • 此时 temp 和 head 存储的地址相同(都是 0x0),但它们是 ​两个不同的指针变量​(内存中占用不同的空间)。

2. 链表节点的结构:数据 + 指针

单链表的每个节点(struct Node)包含两部分:

  • 数据域(data)​​:存储实际数据(如 int 类型的值)。
  • 指针域(next)​​:存储 ​下一个节点的内存地址​(类型是 Node*)。

例如,一个节点 A 的结构可能如下:

节点 A 的内存地址:0x1000
节点 A 的 data 域:存储值 10(假设是 int 类型)
节点 A 的 next 域:存储下一个节点 B 的地址 0x2000

此时,head 指针变量存储的地址是 0x1000(指向节点 A),因此 head 被称为“头指针”(指向链表的第一个节点)。

3. Node* temp = head 的含义:复制头指针的地址

Node* temp = head; 这行代码的作用是:
让临时指针 temp 存储头指针 head 当前的地址值​(即 temp 和 head 指向同一个内存位置)。

示例​:

假设原链表头指针 head 存储的地址是 0x1000(指向节点 A):

Node* head = (Node*)0x1000;  // head 指向节点 A(地址 0x1000)
Node* temp = head;           // temp 存储的地址也是 0x1000(和 head 相同)

此时:

  • head 和 temp 是两个不同的指针变量(内存中占用不同空间)。
  • 但它们的值相同(都是 0x1000),因此都指向节点 A。

4. newNode->next = head 的含义:连接新节点到原链表头部

newNode->next = head 这行代码的作用是:
将新节点 newNode 的 next 指针域(存储下一个节点地址的位置)设置为头指针 head 当前的地址值​(即让新节点的下一个节点是原链表的头节点)

示例​:

假设我们要插入新节点 X(地址 0x3000),原链表头指针 head 存储的地址是 0x1000(指向节点 A):

Node* newNode = (Node*)0x3000;  // 新节点 X 的地址是 0x3000
newNode->data = 20;             // X 的数据域存储 20
newNode->next = head;           // X 的 next 域设置为 head 的值(0x1000)

此时:

  • 新节点 X 的 next 域存储的地址是 0x1000(指向原头节点 A)。
  • 因此,X 的下一个节点是 A,链表结构变为:X → A → ...

5. 头插法的完整逻辑:移动头指针

头插法的最终目标是将新节点 X 变为链表的新头节点。因此,在 newNode->next = head 之后,需要更新头指针 head 的值为新节点 X 的地址

示例​:
void insertAtHead(int data) {Node* newNode = createNode(data);  // 创建新节点 X(地址 0x3000)newNode->next = head;              // X 的 next 指向原头节点 A(地址 0x1000)head = newNode;                    // 头指针更新为 X 的地址(0x3000)
}

执行后:

  • 头指针 head 存储的地址变为 0x3000(指向新节点 X)。
  • 链表结构变为:head → X → A → ...(X 是新的头节点)。

6. 关键总结:指针的“指向”是地址的复制

  • Node* temp = headtemp 复制了 head 的地址值(两者指向同一个节点)。
  • newNode->next = headnewNode 的 next 域复制了 head 的地址值(新节点的下一个节点是原头节点)。
  • head = newNodehead 复制了 newNode 的地址值(头指针指向新节点,新节点成为新头)。

用图示更直观理解

假设原链表结构为:

head(地址 0x4000) → A(地址 0x1000,data=10) → B(地址 0x2000,data=20) → NULL

步骤 1:创建新节点 X
Node* newNode = createNode(30);  // X 的地址是 0x3000,next 初始化为 NULL

此时内存结构:

head → 0x4000 → A → 0x1000 → B → 0x2000 → NULL
newNode → 0x3000 → next → NULL
步骤 2:执行 newNode->next = head

head 的值是 0x4000(指向 A),因此 newNode->next 被设置为 0x4000
此时内存结构:

newNode → 0x3000 → next → 0x4000(指向 A)

步骤 3:执行 head = newNode

head 被更新为 0x3000(指向 X)。
最终链表结构:

head → 0x3000 → X(data=30) → next → 0x4000 → A(data=10) → next → 0x2000 → B(data=20) → NULL

总结

  • Node* temp = head​:临时指针 temp 复制头指针 head 的地址,用于后续操作(如遍历或删除头节点时保留原头节点)。
  • newNode->next = head*:新节点的 next 指针复制头指针 head 的地址,使新节点连接到原链表的头部位置。
  • head = newNode​:头指针更新为新节点的地址,使新节点成为链表的新头节点。
http://www.dtcms.com/a/457993.html

相关文章:

  • [工作流节点17] 数据校验与错误处理机制:为自动化流程建立安全阀门
  • ESP32-S3 入门第十天:图像识别基础与 NPU 应用
  • 视频重新照明新突破!北大中科大浙大等提出重照明方法Lumen:一句话让视频秒变电影级光影。
  • 亚马逊商标备案是否必须做网站新手做电商怎么起步
  • 邢台集团网站建设报价网站定制哪家正规
  • 57.Nginx重写,if,基于浏览器分离,防盗链
  • 【多线程】死锁
  • 自学阿里云认证,能救一个是一个!
  • 买域名做网站跳转网新科技集团有限公司
  • 关于网站维护的书籍商务网站规划建设与管理答案
  • 【C语言基础详细版】03. 函数详解:从概念到高级应用
  • 涿州做网站公司阿里云网站怎么备案域名
  • 网站制作设计机构贵阳企业网站建设
  • wordpress快速仿站教程建立一个网站需要哪些
  • Linux 进程分身术:fork() 函数的深度解析
  • 小程序建站公司app开发需要多少费用
  • 贪心算法详解:从入门到精通(C++实现)
  • 颜群JVM【04】助记符
  • 网站优化 推广重庆教育建设集团有限公司网站
  • Manjaro 系统下 PCManFM 挂载 NTFS 分区报错:从踩坑到彻底解决
  • 单片机使用串口(usart) , 封装( print )函数 .
  • 外贸网站建设和优化做网站要不要学ps
  • 福建省建设厅网站 企业三网一体网站建设
  • 湖南做网站大连凯杰建设有限公司网站
  • 吴恩达机器学习课程(PyTorch适配)学习笔记:2.4 激活函数与多类别处理
  • 【PAG】PAG简介
  • hutool交并集
  • 赣州建设公司网站权威网站有哪些
  • Python制作12306查票工具:从零构建铁路购票信息查询系统
  • 《道德经》第十三章