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

做微整去那个网站找好的医院开发公司 工程管理中存在问题

做微整去那个网站找好的医院,开发公司 工程管理中存在问题,织梦网站建设博客,统计网站访问量带头结点的单链表插入方法(头插法与尾插法) 在单链表的操作中,插入是最常见的操作之一,本文介绍 带头结点的单链表 如何实现 后插法 和 前插法(包括 插入法 和 后插数据交换法),并提供完整的 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/wzjs/570990.html

相关文章:

  • 用wix做网站需要备案吗无锡网站推广优化
  • 八角网站建设淮北住房和城乡建设局门户网站
  • 网站点击按钮排序用什么做响应式网站
  • 做网站用什么语言制作最安全无锡哪里有建设网站
  • 制冷设备东莞网站建设代做百度收录排名
  • 垫江网站建设报价网站建设 朝阳区
  • 杭州移动网站建设wordpress滑动
  • 旅游网站设计与建设论文建网站pc版
  • 微信推广网站怎么做青岛网站建设哪个好
  • 云南网站制作案例程序开发语言有哪些
  • 怎么做谷歌收录的网站seo宣传网站
  • 被国家禁止访问的网站怎么打开贵阳公司网站
  • 网站建设什么因素最重要性建设银行唐山分行网站
  • 刷网站关键词排名原理广州做seo整站优化公司
  • 网站开发公司交易流程做网站页面过大好
  • ps做 网站标准尺寸是多少合适wordpress这么卡
  • 制作网站账号系统应用宝aso优化
  • 网站模块介绍wordpress主页图片不显示图片
  • 学习网站建设培训网站建 设方案说明书
  • 行业网站建设运营昭阳区住房和城乡建设管理局网站
  • 慕课网站建设开题报告社交网站页面设计
  • 可以自己做课程的网站网站策划书基本项目
  • 广西住房城乡建设厅官网站素锦wordpress
  • 网站建设403国企网站的建设
  • 网吧网站怎么做的三明做网站公司
  • 宜春网站开发中国建设工程招标网官网
  • 商丘建网站数据网站建设哪家好
  • flash 做ppt的模板下载网站有哪些营销型手机网站建设
  • 网站建设通知做外贸都用什么网站
  • 家居网站建设定位分析论文西宁整站优化