单向链表添加元素操作
创建单向链表
先创建链表并且初始化
添加元素操作
Size一个都没有的时候
证明是空链表
前插法
意思就是往前添加元素
第一步 : 创建结点
可以用C++ 的 new 创建结点 或者 用面向过程 的 function 来 创建
函数声明
//创建单向链表结点
//创建链表头结点的函数
//参数:LinkNode* where = nullptr
//LinkNode* where目的是给list->next赋值、不初始化数据域
LinkNode* creatorLinkNode(LinkNode* where = nullptr);//创建单向链表结点
//参数:const ElemType &elem
//const ElemType &elem 目的是给 新结点的数据域初始化、不初始化指针域
LinkNode* creatorLinkNode(const ElemType &elem);
函数实现
LinkNode* creatorLinkNode(LinkNode* where){LinkNode* node = new LinkNode;node->next = where;return node;}LinkNode* creatorLinkNode(const ElemType& elem) {return new LinkNode{ elem ,nullptr};
}
创建结点
第二步 : 链接结点
链接结点
参数 LinkNode& node, LinkNode& newnode**
链接思路:
如果(node->next)不是空指针
新结点的下一个结点指向传入结点的下一个结点
否则
结点的下一个结点指向新结点
相当于 3->5
4是新结点
4->5
4链接5
3的下一个结点指向4结点
3->4->5
伪代码::
如果(结点的next!=空指针){//为真
新结点的next指针指向 结点的next指针;;
}
结点的next指针指向 新结点;
函数声明
/*
链接结点
参数 LinkNode*& node, LinkNode*& newnode
链接思路:
如果(node->next)不是空指针
新结点的下一个结点指向传入结点的下一个结点
否则
结点的下一个结点指向新结点相当于 3->54是新结点4->54链接53的下一个结点指向4结点3->4->5if(node->next){newnode->next = node->next;} node->next = newnode;
*/
void Link(LinkNode*& node, LinkNode*& newnode)
函数实现
void Link(LinkNode*& node, LinkNode*& newnode){if (node->next) {newnode->next = node->next;}node->next = newnode;
}
链接 第一步
链接 第二步
第三步 把链表的头结点传递到Link函数
Link(List.list, Newnode);
第四步 链表的个数+1
++List.size;
前插法 代码
//LinkNode* &Newnode 主调函数 分配内存
void LinkListInsert_froot(LinkList& List, LinkNode* &Newnode) {Link(List.list, Newnode);++List.size;
}
尾插法
意思就是靠后添加元素
第一步 : 创建结点
可以用C++ 的 new 创建结点 或者 用面向过程 的 function 来 创建
函数声明
//创建单向链表结点
//创建链表头结点的函数
//参数:LinkNode* where = nullptr
//LinkNode* where目的是给list->next赋值、不初始化数据域
LinkNode* creatorLinkNode(LinkNode* where = nullptr);//创建单向链表结点
//参数:const ElemType &elem
//const ElemType &elem 目的是给 新结点的数据域初始化、不初始化指针域
LinkNode* creatorLinkNode(const ElemType &elem);
函数实现
LinkNode* creatorLinkNode(LinkNode* where){LinkNode* node = new LinkNode;node->next = where;return node;}LinkNode* creatorLinkNode(const ElemType& elem) {return new LinkNode{ elem ,nullptr};
}
创建结点
循环找到末尾结点
while (current->next){current = current->next;}
第二步 : 链接结点
链接结点
参数 LinkNode& node, LinkNode& newnode**
链接思路:
如果(node->next)不是空指针
新结点的下一个结点指向传入结点的下一个结点
否则
结点的下一个结点指向新结点
相当于 3->5
4是新结点
4->5
4链接5
3的下一个结点指向4结点
3->4->5
伪代码::
如果(结点的next!=空指针){//为真
新结点的next指针指向 结点的next指针;;
}
结点的next指针指向 新结点;
函数声明
/*
链接结点
参数 LinkNode*& node, LinkNode*& newnode
链接思路:
如果(node->next)不是空指针
新结点的下一个结点指向传入结点的下一个结点
否则
结点的下一个结点指向新结点相当于 3->54是新结点4->54链接53的下一个结点指向4结点3->4->5if(node->next){newnode->next = node->next;} node->next = newnode;
*/
void Link(LinkNode*& node, LinkNode*& newnode)
函数实现
void Link(LinkNode*& node, LinkNode*& newnode){if (node->next) {newnode->next = node->next;}node->next = newnode;
}
把Current传递到Link函数
链接 第一步
链接 第二步
Link(Current, Newnode);
第四步 链表的个数+1
++List.size;
尾插法 代码
void LinkListInsert_back(LinkList& List, LinkNode*& Newnode) {LinkNode* current = List.list;while (current->next){current = current->next;}Link(current, Newnode);++List.size;
}
``
单向链表添加元素操作相关推荐
- C语言实用算法系列之学生管理系统_单向链表内操作_选择排序
单向链表实现 #include <stdio.h> #include <malloc.h>typedef int DATA;struct SNode {DATA data;SN ...
- C语言实用算法系列之学生管理系统_单向链表内操作_提取排序规则
代码 后续文章的排序均采用速度较快的选择排序算法. #define _CRT_SECURE_NO_WARNINGS#include <stdio.h> #include <strin ...
- Day 62 数据结构(单向链表,单向循环链表,双向链表)
1. 单向链表的设计 例程:创建一个动态单向链表 1.定义链表结点:数据域+指针域 2.定义链表结构体:头结点指针+结点数 3.初始化链表 4.指定位置插入新数据 5.删除指定位置数据 6.获取链表长 ...
- (C++版)链表(一)——实现单向链表创建、插入、删除等相关操作
http://blog.csdn.net/fisherwan/article/details/25557545 前段时间用C语言实现了链表的相关操作,但是发现当时挺清楚的,过了一段时间又忘的差不多了, ...
- 数据结构与算法-单向链表的修改和删除操作
单向链表的修改和删除操作 单向链表的修改 单向链表的删除 单向链表的修改 在上面的代码基础上定义几个英雄 HeroNode hero1 = new HeroNode(1,"宋江", ...
- Golang 操作单向链表的应用实例
代码: /*使用带head头节点的单向链表实现-水浒传英雄排行榜管理:1)完成对英雄人物的增删改查操作.2)第一种方法:在添加英雄时,直接添加到链表的尾部3)第二种方法:在添加英雄时,根据排名将英雄插 ...
- 单向链表的创建和操作
一:链表的基本概况: *以链表为主的链式存储是线性存储的重要方式之一*/ 1.链表是以一个个结点来存储数据的 2.每个节点包含 data (数据域),next (指针域) 3.next 存放下一个结点 ...
- 单向链表的有关操作(链式存储结构)
⑴随机产生或键盘输入一组元素,建立一个带头结点的单向链表(无序). ⑵遍历单向链表. ⑶把单向链表中元素逆置(不允许申请新的结点空间). ⑷在单向链表中删除所有的偶数元素结点. ⑸编写在非递减有序链表 ...
- 单向链表操作详解(二)[The End]
/* 接着讲(测试编译时,请把相应的函数及测试代码放到上一讲代码的相关地方): 排序(选择.插入.冒泡) 插入(有序) */ /* ================================== ...
最新文章
- 使用 Application Developer V7 来创建和部署 JSR 168 协作 portlet
- verilog基础--sign表达式
- SAP CRM WebClient UI的cancel按钮处理
- python实例属性与类属性_Python 面向对象编程:类的创建与初始化、实例属性与方法、类属性与方法...
- linux启动有两个选择,RHEL5 用CentOS源升级,GRUB出现CentOS,RHEL两个启动项,选择哪一个?...
- WCF(一) ---- 简单调用
- 【干货】如何打造一流创业团队-创业者最实用的管理指南.pdf(附下载链接)...
- Android Studio 创建不同分辨率的图标
- Android学习JNI,使用C调用JAVA语言
- AppCode开发,一个智能开发环境
- 创新案例分享 | 一体化政务服务平台运维项目,全力提升平台服务效能
- 加拿大布兰登大学计算机专业,名校大揭底:布兰登大学到底怎么样?
- mysql中的查找算法_7种查找算法解析
- 儿子考上清华大学计算机系视频,儿子考上清华大学,家长忙发朋友圈,但收到的却不是祝福是心寒...
- boos直聘显示服务器繁忙,BOSS 直聘回应服务“崩了”:系统升级已完成,可正常使用...
- PCIe扫盲——TLP Header详解(一)
- HOU211学习总结
- C++语言程序设计第五版 - 郑莉(第九章课后习题)
- 字节跳动后端实习面经,一面+二面+三面(已收到offer)
- —— 约瑟夫环(自杀环)的数学解法
热门文章
- 联想7400打印机如何与手机连到一起_联想打印机力度空前的眼红优惠来袭 这波福利可不能再错过了...
- 【tomcat启动报错】To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
- tree树形控件之循环遍历
- Android中的文件读写操作
- 低代码如何助力石油行业数字化?
- HTML5 解决audio标签不能在iPhone上自动播放的问题
- 悬浮鼠标实现下拉菜单
- Springboot发送Email
- syslog-ng 和syslog-ng tls 服务端配置
- 「女程序员」JAVA面试经验(3年左右工作经验)