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

wordpress一键采集文章seo数据分析哪些方面

wordpress一键采集文章,seo数据分析哪些方面,公司logo图案大全,怎么使用微信公众号C 链表的创建:头插法与尾插法详解 链表(Linked List)是一种重要的数据结构,适用于插入和删除操作频繁的场景。本文介绍 两种常见的链表构建方法: 尾插法(Append / Tail Insertion):…

C++ 链表的创建:头插法与尾插法详解

在这里插入图片描述

链表(Linked List)是一种重要的数据结构,适用于插入和删除操作频繁的场景。本文介绍 两种常见的链表构建方法

  • 尾插法(Append / Tail Insertion):适合顺序存储,插入顺序与输入顺序一致。
  • 头插法(Prepend / Head Insertion):适合逆序存储,输入的元素会被倒序存入链表。

本文提供详细的代码实现、解析以及常见错误分析,帮助初学者理解链表的构建方式。


一、链表的基本结构

在 C++ 语言中,我们通常使用结构体(struct)定义链表节点:

#include <iostream>typedef struct Node {int data;      // 数据域struct Node* next;  // 指针域,指向下一个节点
} Node, *LinkList;
  • data:存储节点数据。
  • next:存储指向下一个节点的指针。
  • LinkListNode* 的别名,表示指向链表头部的指针。

二、尾插法(顺序存储)

尾插法按照输入顺序 依次插入新节点,适用于按 自然顺序 存储数据。
核心思路

  1. 创建头节点 作为链表的起点。
  2. 维护一个尾指针 r,用于记录链表末尾,以便快速添加新节点。
  3. 每次创建一个新节点,将其链接到尾指针 r,然后更新 r 指向新节点。

✅ 尾插法代码实现

#include <iostream>
#include <cstdlib>  // malloc 需要包含此头文件typedef struct Node {int data;struct Node* next;
} Node, *LinkList;// 初始化链表(带头结点)
void Init(LinkList &L) {L = (Node*)malloc(sizeof(Node));L->next = NULL;
}// 尾插法插入元素
void InsertTail(LinkList &L, int e) {Node* r = L; // 记录链表尾部Node* s;while (e != -1) {  // 以 -1 作为输入结束标志s = (Node*)malloc(sizeof(Node));s->data = e;s->next = NULL;r->next = s; // 连接新结点r = s; // 更新尾指针std::cin >> e; // 读取下一个数据}
}// 打印链表
void PrintL(LinkList &L) {Node* p = L->next; // 跳过头结点if (!p) {std::cout << "Empty List\n";return;}while (p) {std::cout << p->data << " -> ";p = p->next;}std::cout << "NULL\n";
}// 释放链表
void FreeList(LinkList &L) {Node* p = L;while (p) {Node* temp = p;p = p->next;free(temp);}L = NULL;
}int main() {LinkList L;Init(L);int e;std::cin >> e;InsertTail(L, e);PrintL(L);FreeList(L);return 0;
}

📌 示例输入

1 2 3 4 -1

📌 示例输出

1 -> 2 -> 3 -> 4 -> NULL

三、头插法(逆序存储)

头插法逆序存储输入数据,新节点总是插入到链表头部,适用于从后往前访问数据的场景。
核心思路

  1. 创建头节点 作为链表的起点。
  2. 每次创建一个新节点,让其 next 指向头节点 Lnext,然后 L->next 指向新节点。
  3. 这样每次新插入的节点都位于链表头部,最终形成逆序链表

✅ 头插法代码实现

#include <iostream>
#include <cstdlib>typedef struct Node {int data;struct Node* next;
} Node, *LinkList;// 初始化链表(带头结点)
Node* InitL(LinkList &L) {L = (Node*)malloc(sizeof(Node));L->next = NULL;return L;
}// 头插法插入元素
void InsertNext(LinkList &L, int e) {while (e != 9999) {  // 以 9999 作为输入结束标志Node* p = (Node*)malloc(sizeof(Node));p->data = e;p->next = L->next;  // 让新节点指向头结点的下一个节点L->next = p;        // 头结点指向新插入的节点std::cin >> e; // 读取下一个数据}
}// 打印链表
void PrintL(LinkList &L) {Node* p = L->next;if (!p) {std::cout << "Empty List\n";return;}while (p) {std::cout << p->data << " -> ";p = p->next;}std::cout << "NULL\n";
}// 释放链表
void FreeList(LinkList &L) {Node* p = L;while (p) {Node* temp = p;p = p->next;free(temp);}L = NULL;
}int main() {LinkList L;InitL(L);int e;std::cin >> e;InsertNext(L, e);PrintL(L);FreeList(L);return 0;
}

📌 示例输入

1 2 3 4 5 6 9999

📌 示例输出

6 -> 5 -> 4 -> 3 -> 2 -> 1 -> NULL

四、尾插法 vs. 头插法

方法适用场景特点代码复杂度
尾插法顺序存储 数据- 适用于队列、链表等结构。
- 插入顺序与输入顺序一致。
- 插入操作需要维护尾指针 r
适中
头插法逆序存储 数据- 适用于栈、回溯等结构。
- 输入数据被倒序存储。
- 插入操作比尾插法简单,始终修改 L->next
更简单

🔹 总结

  1. 尾插法:适合 顺序存储,需要维护 r 指针,但顺序符合直觉。
  2. 头插法:适合 逆序存储,插入操作更简单,但最终数据顺序颠倒。
  3. 二者的选择 取决于数据使用的需求,如:
    • 队列(FIFO) 适合尾插法
    • 栈(LIFO) 适合头插法

如果你是初学者,建议多尝试不同方法,以便深入理解链表的操作方式! 🎯

http://www.dtcms.com/wzjs/130440.html

相关文章:

  • 网站建设接活做推广的软件有哪些
  • 沈阳市城市建设管理局网站2345浏览器导航页
  • 做互动电影的网站外贸网站推广
  • 疫情最新数据消息浙江长沙优化网站厂家
  • 用电脑怎么做原创视频网站福州seo网站排名
  • 佛山有那几家做网站企业关键词优化价格
  • 上海网站建设技术指导公司营销策划书格式及范文
  • 网站设计制作服务热线yoast seo教程
  • 会员网站开发淘宝关键词指数
  • 怎么用 c文件做网站模板建站
  • 中文网站建设技术解决方案怎样和政府交换友链
  • 学校网站建设团队台州网络推广
  • 做网站第三方友链交换网站
  • 给人做赌博网站犯法嘛网页自助建站
  • 网站漏洞 在线扫描商丘网络推广哪家好
  • 增城做网站做销售怎样去寻找客户
  • 互联网设计师是干什么的太原seo公司
  • 西安建设工程网上交易平台最好的seo外包
  • 平面设计公司简介杭州排名优化公司电话
  • 怎么选择营销型网站建设公司爱站网站长seo综合查询工具
  • 佛山顺德网站制作公司哪家好平台网站开发公司
  • 做网站的上市公司加盟培训机构
  • 游戏网站建设方案书短视频怎么赚钱
  • 销售网站建设常遇到的问题阳江网站建设
  • 郑州大学现代远程教育 《网页设计与网站建设》个人主页注册安全工程师
  • wp做图网站营销的三个基本概念是什么
  • 句容市建设局网站土地挂牌公示丽水百度seo
  • 区块链网站用vue.js做怎么样整合营销案例
  • 奇迹建站模板seo的搜索排名影响因素主要有
  • 网站优化报告上海seo优化外包公司