news 2026/7/18 18:16:52

[数据结构入门]用c++实现单链表

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
[数据结构入门]用c++实现单链表

这学期开始学数据结构了,然而学校教材都是写的伪代码,真的要掌握还是需要课后自己用c++复现。看到有大神平常会把学习的内容以博客的形式记录下来,从而帮助自己总结和归纳知识点,我也打算尝试一下这种方法。今后会把自己常用的数据结构实现方法记录在这里,也当是对自己的学习做回顾和总结。

新手入门 请多指教 有错轻喷


规范名称

节点:Node

链表:LinkedList


头文件

#include<iostream> using namespace std;

定义结点

//定义结点 struct Node { public: int val;//存储数据 Node* next;//指针域 //构造函数 Node(int v = 0) :val(v), next(NULL) {} };

定义单链表类

(本帖中单链表均有头结点)

class LinkedList { public: Node* head;//头结点 int size; LinkedList()//构造函数 { head = new Node; size = 0; } //以下部分可插入更多功能函数 };

不同功能的实现

(所有功能都以内置在LinkedList内的函数实现,函数的插入位置已在上方注解标明)

初始化

前插法实现逆序输入初始化

//已知插入个数len,前插法实现逆序输入初始化。 //如果未知插入个数,那么while条件为(cin>>v),函数参数列表为空,while下方的cin>>v删去 void Init_R(int len) { int v; while (len--) { cin >> v; Node* p = new Node(v); p->next = head->next; head->next = p; size++; } return; }

后插法实现顺序输入初始化

//已知插入个数len,后插法实现顺序输入初始化。 //如果未知插入个数,那么while条件为(cin>>v),函数参数列表为空,while下方的cin>>v删去 void Init(int len) { int v; Node* tail = head;//tail指向当前链表末尾,从头结点开始 while (len--) { cin >> v; Node* p = new Node(v); tail->next = p; tail = p; size++; } return; }

插入结点

//在下标为i的地方插入元素e bool insert(int i, int e) { if (i<0 || i>size) return 0;//判断下标i是否合法 Node* p = head;//p指向插入的前一个位置 while (i--) { p = p->next;//移动p } Node* newnode = new Node(e); newnode->next = p->next; p->next = newnode; size++; return 1; }

删除结点

//删除下标为i的元素 bool remove(int i) { if (i<0 || i>size - 1) return 0;//注意这里的i最大只能到size-1,而插入可以到size Node* p = head;//p指向删除的前一个位置 while (i--) { p = p->next; } Node* temp = p->next;//temp用于过渡,让p能跳过下一个指向下下个结点 p->next = temp->next; size--; return 1; }

取值

//返回下标为i的结点的值,存入e中 bool getval(int i, int& e) { if (i<0 || i>size - 1) return 0;//判断下标i是否合法 Node* p = head; for (int j = 0; j <= i; j++)//因为p从头结点开始遍历链表,所以需要移动i+1次才能移动到下标i处 { p = p->next; } e = p->val; return 1; }

查找

//查找第一个等于e的元素的下标,-1表示没有找到 int find_first(int e) { Node* p = head->next;//p从下标0开始遍历链表 int index = 0; while (p) { if (p->val == e) { return index; } else { p = p->next; index++; } } if (!p) return -1; }

遍历

//从头开始遍历链表(以输出为例) void Print() { Node* p = head->next; while (p) { cout << p->val << " "; p = p->next; } cout << endl; return; }

销毁链表

//销毁链表 void deletelist() { Node* p = head; while (p) { Node* temp = p->next;//temp存放下一个结点; delete p; p = temp; } head = NULL; size = 0; return; }

在主函数中新建链表

int main() { LinkedList L; return 0; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/14 14:11:05

用遗传算法求解带充电桩的电动汽车路径规划VRPTW问题

遗传算法求解带充电桩的电动汽车路径规划VRPTW问题 具有的功能 软时间窗&#xff0c;时间窗惩罚&#xff0c;多目标点&#xff0c;充电&#xff0c;遗传算法 生成运输成本 车辆 路线 带时间窗&#xff0c;注释多,matlab程序 代码有详细注释&#xff0c;可快速上手。在当今的物流…

作者头像 李华
网站建设 2026/7/14 14:11:06

tkinter绘制组件(50)——高级树状图

tkinter绘制组件&#xff08;50&#xff09;——高级树状图引言节点元素高级树状图控件获取当前选中元素添加节点删除节点重命名节点折叠、展开所有事件绑定面板布局效果github项目pip下载引言 在tkinter绘制组件&#xff08;36&#xff09;——树状图_tkinter树形结构-CSDN博…

作者头像 李华
网站建设 2026/7/14 14:11:06

文脉定序部署案例:高校图书馆数字资源平台语义增强检索落地

文脉定序部署案例&#xff1a;高校图书馆数字资源平台语义增强检索落地 1. 项目背景与需求分析 高校图书馆数字资源平台面临着海量学术资源的检索挑战。传统关键词匹配方式虽然能够快速返回大量结果&#xff0c;但在排序精准度上存在明显不足。读者经常遇到"搜得到但排不…

作者头像 李华
网站建设 2026/7/14 14:11:07

中国土地利用30年变迁可视化指南:基于CLCD数据的Python分析全流程

中国土地利用30年变迁可视化指南&#xff1a;基于CLCD数据的Python分析全流程 过去三十年&#xff0c;中国经历了人类历史上规模最大、速度最快的城市化进程。从沿海经济特区的崛起到西部大开发的推进&#xff0c;每一寸土地的变迁都承载着经济发展的密码。对于数据爱好者和城市…

作者头像 李华
网站建设 2026/7/14 14:11:04

Gemma-3-270m参数详解:270M规模下模型结构、tokenizer与量化选项说明

Gemma-3-270m参数详解&#xff1a;270M规模下模型结构、tokenizer与量化选项说明 1. 模型架构深度解析 Gemma-3-270m作为谷歌Gemma 3系列中最轻量级的模型&#xff0c;虽然只有2.7亿参数&#xff0c;但在架构设计上却体现了现代Transformer的精髓。 1.1 核心架构特点 Gemma…

作者头像 李华