02基础编程知识_c++单链表
时间:2020-05-21
本文章向大家介绍02基础编程知识_c++单链表,主要包括02基础编程知识_c++单链表使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
#include <iostream>
using namespace std;
class Node
{
public:
int _value;
Node* _next;
public:
Node() = default;
Node(int value,Node *next)
:_value(value),_next(next){}
};
class SingleLink
{
public:
SingleLink();
Node* getNode(int index);
Node* insert(int index, int t);
Node* Head_insert(int t);
Node* Last_insert(int t);
Node* Del(int index);
Node* Del_head();
Node* Del_last();
void pirnt();
bool IsEmpty();
int size();
private:
int count;
Node* phead;
};
SingleLink::SingleLink() :count(0), phead(nullptr)
{
phead = new Node();
phead->_next = nullptr;
};
Node *SingleLink::getNode(int index)
{
if (index > count || index < 0) //getNode 函数,当传入0 index时,返回head,传入1 index时,返回链表第一个元素。
return nullptr;
int temp = 0;
Node* preNode = phead;
while (temp<index)
{
temp++;
preNode = preNode->_next;
}
return preNode;
}
Node* SingleLink::insert(int index, int t)
{
Node* preNode = getNode(index);
if (preNode)
{
Node* newNode = new Node(t,preNode->_next);
preNode->_next = newNode;
count++;
return newNode;
}
return nullptr;
}
Node* SingleLink::Head_insert(int t)
{
return insert(0,t);
}
Node* SingleLink::Last_insert(int t)
{
return insert(count, t);
}
Node* SingleLink::Del(int index)
{
if (IsEmpty())
return nullptr;
Node* ptrNode = getNode(index); //例:传入序号0,得到head头节点。
Node* delNode = ptrNode->_next; //通过得到head->next,得到要删除节点的位置
ptrNode->_next = delNode->_next; //将del->next的 位置赋予头节点的下一个位置。
count--;
delete delNode;
return ptrNode;
}
Node* SingleLink::Del_head()
{
return Del(0);
}
Node* SingleLink::Del_last()
{
return Del(count);
}
bool SingleLink::IsEmpty()
{
return count == 0;
}
void SingleLink::pirnt()
{
Node* prt = phead; //定义一个类指针存储phead,
while (prt!=nullptr) // 每次通过prt->next移动指针,直到移动null跳出循环
{
cout << prt->_value<<endl;
prt = prt->_next;
}
}
int SingleLink::size()
{
return count;
}
int main()
{
SingleLink* link = new SingleLink();
int a[] = {20,30,40};
for (int i=0;i<3;i++)
{
link->Head_insert(a[i]);
}
link->pirnt();
link->Del_head();
cout <<"删除头节点"<< endl;
link->pirnt();
cout << "1号位置插入5" << endl;
cout << endl;
link->insert(1,5);
link->pirnt();
}
完整代码
输出结果
Node *SingleLink::getNode(int index)
{
if (index > count || index < 0) //getNode 函数,当传入0 index时,返回head,传入1 index时,返回链表第一个元素。
return nullptr;
int temp = 0;
Node* preNode = phead;
while (temp<index)
{
temp++;
preNode = preNode->_next;
}
return preNode;
}
代码解析
这里的index指:即0为头节点,序号1为第一个节点,
Node* SingleLink::Del(int index)
{
if (IsEmpty())
return nullptr;
Node* ptrNode = getNode(index); //例:传入序号0,得到head头节点。
Node* delNode = ptrNode->_next; //通过得到head->next,得到要删除节点的位置
ptrNode->_next = delNode->_next; //将del->next的 位置赋予头节点的下一个位置。
count--;
delete delNode;
return ptrNode;
}
删除代码:
当传入index 为0时,删除的为链表中除头节点的第一个节点。
如图所示。
头插法:可将一个数组插入后,顺序变为倒叙。
尾插法:为一种动态插入,随着count++的增加,每次插入的位置都为链表的最后一个位置。
原文地址:https://www.cnblogs.com/zsymdbk/p/12930020.html
- PDF.NET数据开发框架实体类操作实例
- 利用Burp Suite对OWASP Juice Shop进行渗透测试
- Java同步问题面试知识学习
- Android UI控件系列:LinearLayout(线性布局)
- 使用操作符重载,生成ORM实体类的SQL条件语句
- Dance In Heap(四):一些堆利用的方法(下)
- Mac系统的Proton恶意软件:卷!土!重!来!
- Erlang语言学习入门
- Android使用Ant进行apk多渠道打包
- Dance In Heap(三):一些堆利用的方法(中)
- Android性能优化篇:使用软引用和弱引用
- 使用泛型委托,构筑最快的通用属性访问器
- 记录容易忘记的方法
- 无需重新编译代码,在线修改表单
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- HashMap详解
- ElementUI使用autocomplete组件输入搜索
- Hacking with iOS: SwiftUI Edition - 愿望清单项目(三)
- 浏览器在线预览offce,vue-pdf预览pdf文件
- vivo商城前端架构升级-总览篇
- 《JSON笔记之三》---postman中传入json串
- Spring源码学习笔记(13)——JDBC
- java系列之注解
- NodeJs初入Http模块和Url模块
- Spring系列之实例化、初始化处理器
- NodeJs安装supervisor实现重载
- MyBatis系列之浅谈SQL执行流程分析
- NodeJs引入自定义模块
- NodeJs引入操作第三方插件
- RocketMQ 环境搭建