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

嘉兴网站建设方案外包查网址是否安全

嘉兴网站建设方案外包,查网址是否安全,推广引流方法有哪些推广方法,大连做网站 选领超科技带头结点的单链表插入方法(头插法与尾插法) 在单链表的操作中,插入是最常见的操作之一,本文介绍 带头结点的单链表 如何实现 后插法 和 前插法(包括 插入法 和 后插数据交换法),并提供完整的 C …

带头结点的单链表插入方法(头插法与尾插法)

在这里插入图片描述

在单链表的操作中,插入是最常见的操作之一,本文介绍 带头结点的单链表 如何实现 后插法前插法(包括 插入法后插数据交换法),并提供完整的 C++ 代码示例。


1. 链表的基本结构

带头结点 的单链表中,头结点 L 仅作为占位符,不存储数据,链表的数据从 L->next 开始。

#include <stdio.h>
#include <stdlib.h>typedef struct Node {int data;struct Node* next;
} Node, *List;
  • data:存储节点数据。
  • next:指向下一个节点的指针。
  • List:定义指向 Node 的指针类型,表示链表。

2. 链表初始化

bool Init(List &L) {L = (Node *)malloc(sizeof(Node));  // 创建头结点L->next = NULL;return true;
}
  • L 作为头结点,仅占位,不存储数据。
  • L->next = NULL 表示链表为空。

3. 后插法(在指定位置后插入)

3.1 后插法介绍

后插法 是指在 某个指定位置 i 之后 插入新的节点,即:

原链表: A -> B -> C -> NULL
插入后: A -> B -> X -> C -> NULL (X 插入到 B 之后)

3.2 后插法代码

bool Insert(List &L, int i, int value) {Node *p = L;  // p 指向头节点int j = 0;// 找到 i-1 位置的节点while (p != NULL && j < i - 1) {  p = p->next;  j++;}if (p == NULL) { // 如果 i 超出链表长度,插入失败return false;}// 创建新节点Node *s = (Node *)malloc(sizeof(Node));s->data = value;// 插入s->next = p->next;p->next = s;return true;
}

3.3 代码解析

  1. 找到 i-1 位置的节点
    • 通过 while 循环找到第 i-1 个节点 p,使 p->next 指向新节点。
  2. 创建新节点 s
    • 分配内存,存入 value
  3. 新节点 s 指向 p->next
    • s->next = p->next,让新节点连接到 p 的下一个节点。
  4. p 连接到 s
    • p->next = s,完成插入。

3.4 运行示例

void PrintList(List L) {Node *p = L->next;  // 跳过头节点while (p != NULL) {printf("%d -> ", p->data);p = p->next;}printf("NULL\n");
}int main() {List L;Init(L);Insert(L, 1, 10);Insert(L, 2, 20);Insert(L, 3, 30);PrintList(L);return 0;
}
运行结果
10 -> 20 -> 30 -> NULL

4. 后插法实现前插法(交换数据法)

4.1 介绍

前插法 是指在 某个指定位置 i 之前 插入新节点:

原链表: A -> B -> C -> NULL
插入后: A -> X -> B -> C -> NULL (X 插入到 B 之前)

如果我们仍然使用后插法,可以通过 交换数据 来模拟前插效果:

  1. 找到 i 位置的节点 p
  2. 使用后插法p 后面 插入一个新节点 s
  3. 交换 psdata,这样 p 的数据变成新插入的数据,而 s 变成原 p 的数据。

当然 这里也可以使用 直接插入法 不过 需要从头 遍历链表 至其前驱结点 ,这里没有实现

4.2 代码

bool Insert(List &L, int i, int value) {if (i < 1) return false;Node *p = L;int j = 0;// 找到第 i 个位置的节点 pwhile (p->next != NULL && j < i - 1) {  p = p->next;j++;}if (p == NULL) return false;// 使用后插法创建新节点 sNode *s = (Node *)malloc(sizeof(Node));s->data = value;s->next = p->next;p->next = s;// **交换数据**,实现前插效果int temp = p->data;p->data = s->data;s->data = temp;return true;
}

4.3 运行示例

int main() {List L;Init(L);Insert(L, 1, 10);Insert(L, 2, 20);Insert(L, 3, 30);Insert(L, 2, 15); // 插入 15 到第 2 个位置PrintList(L);return 0;
}
输出
10 -> 15 -> 20 -> 30 -> NULL

15 被正确插入到了 20 之前,达到了前插的效果


5. 总结

后插法前插法(交换数据法)
插入方式i 个节点 之后插入i 个节点 之前插入
链表变化A -> B -> X -> CA -> X -> B -> C
i=1 时的情况头结点不变,只插入到 L->next 之后头结点改变,新节点变成 L
适用场景常用于 顺序插入,如尾插法适用于 倒序插入,如头插法
优点逻辑清晰,适用于大多数情况结构不变,适用于数据交换优化

两种插入方式的使用场景不同,在 动态链表管理 中,后插法适合 正常数据流,前插法适合 逆序处理


6. 参考代码完整示例

#include <stdio.h>
#include <stdlib.h>typedef struct Node {int data;struct Node* next;
} Node, *List;bool Init(List &L) {L = (Node *)malloc(sizeof(Node));L->next = NULL;return true;
}bool Insert(List &L, int i, int value) {if (i < 1) return false;Node *p = L;int j = 0;while (p->next != NULL && j < i - 1) {  p = p->next;j++;}if (p == NULL) return false;Node *s = (Node *)malloc(sizeof(Node));s->data = value;s->next = p->next;p->next = s;int temp = p->data;p->data = s->data;s->data = temp;return true;
}

希望本文能帮助新手更好地学习C++链表的学习!

http://www.dtcms.com/a/534157.html

相关文章:

  • 个人做网站可以盈利么咔咔做受视频网站
  • 阿里云做网站需要些什么条件中国会展公司排名前十的公司
  • 南京网站推广营销公司哪家好wordpress 商户插件
  • 【AI论文】注意力照亮大语言模型(LLM)推理:预规划-锚定节奏助力细粒度策略优化
  • 网站开发包括什么成都网站设计网站
  • 门户网站建设方案百度公司
  • 利搜网站排名软件wordpress视频教程 电驴
  • 网站运营专员月薪多少企业网站托管电话
  • 提供网站建设收费标准怎么给领导做网站分析
  • 国内做网站好的公司站长
  • 电子电力技术的软开关变换器学习记录分享1
  • 婚纱摄影东莞网站建设技术支持天津网站建设方案书
  • 建设银行国管公积金管理中心网站济南网站建设 unzz
  • 北京建设网站网站怎么知道公司网站是哪个公司做的
  • 2008服务器做网站开发一个游戏软件需要多少钱
  • 怎么看到网站开发时间郑州市政务公开
  • 时序图 —— 讲清“对象之间怎么互动”
  • 制作网站的心得购物网站线下推广方案
  • 做本地网站赚钱吗南京 外贸网站建设
  • 沐风模板WordPressseo关键词布局技巧
  • 骆驼有没有做网站的公司wordpress 常数函数
  • 代码模版 网站北京正规网站建设公司哪家好
  • 网站设计中级大龄网站开发人员
  • 微信公众号关联网站收银系统一套多少钱
  • 南通 网站建设电子商务网站推广策略主要内容
  • 网站规划与设计大作业怎么做国内产品网站w源码1688
  • 2018做网站 工具深圳微网站
  • 网站建设系统 招标广州网站营销推广
  • 顺企网网站建设贵阳网站建设宏思锐达
  • 辅助购卡网站怎么做北京网站优化哪家好