VS环境下基于C++的单链表实现
------------恢复内容开始------------
#include<iostream>
using namespace::std; typedef int ElemType;
struct Node
{
ElemType data;
Node* next;
}; class LinkList
{
private:
Node* Head;
public:
LinkList()
{
Head = new Node();
}
~LinkList() {
Node* p;
p = Head->next;
while (p)
{
ListDelete();
p = p->next;
} };
void CreateList_headInsert(int n) //头插入法创建有n个节点的线性表
{
Node* headNode, * newNode; //这里的 headNode 与 Head 不同,Head是为了使逻辑 0 位置存放表头,而 headNode 则是记录当前最后一个节点
headNode = Head;
cout << "请输入" << n << "个数据元素:" << endl;
for (int i = ; i < n; i++)
{
newNode = new Node();
cin >> newNode->data; //输入新节点的数据信息
headNode->next = newNode->next; //将新节点插入原表头之前
headNode->next = newNode; //新的表头是 p 节点
}
} void CreateList_tailInsert(int n) //尾插入法创建有n个节点的线性表
{
Node* headNode, * newNode; //这里的 headNode 与 Head 不同,Head是为了使逻辑 0 位置存放表头,而 headNode 则是记录当前最后一个节点
headNode = Head;
cout << "请输入" << n << "个数据元素:" << endl;
for (int i = ; i < n; i++)
{
newNode = new Node();
cin >> newNode->data;
headNode->next = newNode;
headNode = newNode;
}
} void ListInsert(int i, int e) //在表中i位置插入e
{
int j = ;
Node* p; // p 用来记录当前指针指向的节点
p = Head;
while (j < i - )
{
p = p->next;
j++;
}
if (!p || j > i - ) // !p 表示 i 大于表长, j > i-1 表示 i < 0
{
cout << "位置异常,节点插入失败!" << endl;
return;
}
else
{
Node* newNode = new Node(); // newNode 指要插入的新节点
newNode->data = e;
newNode->next = p->next;
p->next = newNode;
}
} void ListDelete(int i) //删除表中i位置上的元素
{
int j = ;
Node* p; // p 用来记录当前指针指向的节点
p = Head;
while (j < i - )
{
p = p->next;
j++;
}
if (!p || j > i - ) // !p 表示 i 大于表长, j > i-1 表示 i < 0
{
cout << "位置异常,节点删除失败!" << endl;
return ;
}
else
{
p->next = p->next->next;
cout << "删除节点成功" << endl;
}
} void GetElem(int i) //获取第i个位置上的元素
{
int j = ;
Node* p; // p 用来记录当前指针指向的节点
p = Head;
while (j < i)
{
p = p->next;
j++;
}
cout << "第" << i << "个元素为" << p->data << endl;
} int LocateElem(int e) //在链表中查找是否存在元素e,若存在则返回位置,否则返回-1
{
int j = ;
Node* p; // p 用来记录当前指针指向的节点
p = Head->next;
while (p->data != e && p)
{
p = p->next;
j++;
}
if (p == NULL)
{
return -;
}
else
{
return j;
}
} void Listlength() //计算表长
{
int j = ;
Node* p = new Node(); // p 用来记录当前指针指向的节点
p = Head->next;
while (p)
{
if (p->next==NULL)
break;
p = p->next;
j++;
}
cout << "链表长度为:" << j << endl;
}
void TravelList() //遍历整张链表
{
int j = ;
Node* p = new Node(); // p 用来记录当前指针指向的节点
p = Head->next;
while (p)
{
cout << "第 " << j << " 个元素:" << p->data << endl;
p = p->next;
j++;
}
}
}; int main()
{
LinkList L ;
int i;
cout << "请输入想要创建链表的节点个数:" << endl;
cin >> i;
L.CreateList_tailInsert(i);
L.Listlength();
L.TravelList();
L.ListInsert(, );
L.GetElem();
return ;
}
人狠话不多直接上代码先。单链表与线性表相对,是数据存储的两大方式。链表虽然摒弃了线性表可以随机存储以及易于求得表长的优点,但是他插入、删除节点更加快速,对内存的利用率更高(不必硬性要求开辟一块连续长度的内存空间)。
单链表实现的功能主要如下:
#include<iostream>
using namespace::std; typedef int ElemType;
struct Node
{
ElemType data;
Node* next;
}; class LinkList
{
private:
Node* Head;
public:
LinkList()
{
Head = new Node();
}
~LinkList() { };
void CreateList_headInsert(int n) //头插入法创建有n个节点的线性表
{ } void CreateList_tailInsert(int n) //尾插入法创建有n个节点的线性表
{ } void ListDelete(int i) //删除表中i位置上的元素
{ } void GetElem(int i) //获取第i个位置上的元素
{ } int LocateElem(int e) //在链表中查找是否存在元素e,若存在则返回位置,否则返回-1
{ } void Listlength() //计算表长
{ }
void TravelList() //遍历整张链表
{ }
};
其中建立链表时插入节点方式有两种,一种是头插法,一种是尾插法。
头插法:
例如链表中现在有三个元素 a -> b -> c ,新的节点 d 需要插入,则应该让 d -> next = a; 之后 d 变成新的表头,即 headNode = d; //headNode始终表示链表的第一个节点
尾插法:
同样的,例如链表中现在有三个元素 a -> b -> c ,新的节点 d 需要插入,则应该让 c -> next = d; 之后 d 变成新的表尾,即 p = d; //p 始终表示链表最后一个节点
其中需要注意的一点是(可能我C++习惯还没养成,欠缺熟练度)在使用 Node* p = new Node();时,我开始没加(),导致每次运行都显示堆栈溢出,这里强调一下,new后面的一定要加()【但是看的那本书没有加 ---数据结构与算法分析{人民邮电出版社},书山的是在VC6.0环境下运行的,而我用的时VS2019,也没有弄明白,还请大神把个忙解释一下】
不足之处欢迎大家指正哈!
VS环境下基于C++的单链表实现的更多相关文章
- .NET环境下基于RBAC的访问控制
.NET环境下基于RBAC的访问控制 Access Control of Application Based on RBAC model in .NET Environment 摘 要:本文从目前信息 ...
- 【应用笔记】【AN004】VB环境下基于RS-485的4-20mA电流采集
版本:第一版作者:周新稳 杨帅 日期:20160226 =========================== 本资料高清PDF 下载: http://pan.baidu.com/s/1c1uuhLQ ...
- Windows 环境下基于 nginx 的本地 PyPI 源
Windows 环境下基于 nginx 的本地 PyPI 源的搭建: 1.登录 nginx 官网,下载安装包
- eclipse环境下基于已构建struts2项目整合spring+hibernate
本文是基于已构建的struts2项目基础上整合 spring+hibernate,若读者还不熟悉struts2项目,请先阅读 eclipse环境下基于tomcat-7.0.82构建struts2项目 ...
- 【应用笔记】【AN005】Qt开发环境下基于RS485的4-20mA电流采集
简介 4-20mA电流环具有广泛的应用前景,在许多行业中都发挥着重要作用.本文主要介绍在Qt开发环境下基于RS485实现4-20mA电流采集,实现WINDOWS平台对数据的采集.分析及显示. 系统组成 ...
- CentOS 环境下基于 Nginx uwsgi 搭建 Django 站点
因为我的个人网站 restran.net 已经启用,博客园的内容已经不再更新.请访问我的个人网站获取这篇文章的最新内容,CentOS 环境下基于 Nginx uwsgi 搭建 Django 站点 以下 ...
- 【应用笔记】【AN003】VC++环境下基于以太网的4-20mA电流采集
简介 4-20mA电流环具有广泛的应用前景,在许多行业中都发挥着重要作用.本文主要介绍了以太网接口的4-20mA电流采集模块在VC++环境下进行温度采集,实现WINDOWS平台对数据的采集.分析及显示 ...
- 【应用笔记】【AN001】VC#开发环境下基于以太网的4-20mA电流采集(基于modbus tcp 协议)
版本:第一版 作者:毛鹏 杨帅 日期:20151108 简介 4-20mA电流环具有广泛的应用前景,在许多行业中都发挥着重要作用.本文主要介绍了以太网接口的4-20mA电流采集模块在VC#环境下进行温 ...
- [Done]SnowFlake 分布式环境下基于ZK构WorkId
Twitter 的 Snowflake 大家应该都熟悉的,先上个图: 时间戳 序列号一般不会去改造,主要是工作机器id,大家会进行相关改造,我厂对工作机器进行了如下改造(估计大家都差不多吧,囧~~~ ...
随机推荐
- 夯实Java基础系列13:深入理解Java中的泛型
目录 泛型概述 一个栗子 特性 泛型的使用方式 泛型类 泛型接口 泛型通配符 泛型方法 泛型方法的基本用法 类中的泛型方法 泛型方法与可变参数 静态方法与泛型 泛型方法总结 泛型上下边界 泛型常见面试 ...
- 快学Scala 第七课 (类构造函数)
类 主构造器: class Person (var name: String){ } 主构造参数可以不带val或者var,如果没有被其他方法使用,则不保存为字段. 如果被其他方法使用,则被升格为字段, ...
- mac 安装redis及phpredis扩展
下载phpredis扩展安装包.git clone https://github.com/nicolasff/phpredis.git: 解压后,进入该目录: 依次执行以下操作完成安装: /Appli ...
- 低效sql语句执行缓慢引起的大量占用服务器的CPU问题处理 (优化心得)
1> 2> 3> 4> 5>删除不良的执行计划后执行时间仍然有150s,这实在是太慢了,继续查看原sql代码,发现父表的关联条件放在了子查询里,这是应该避免的 调整原sq ...
- Tensorflow-gpu1.13.1 和 Tensorflow-gpu2.0.0共存之安装教程
tf1.13.1 及 tf2.0.0 相关依赖及版本 硬件说明:显卡NVIDIA-GEFORCE-GTX-1060 1.驱动版本检查,并且更新显卡驱动[这一步很重要,你的驱动版本低了,cuda及cu ...
- 杂谈:开发人员如何进行复杂业务的学习?让boss刮目相看
一点小拙见,欢迎指正 一.概述 大型复杂的软件系统,是有许多人共同协作完成的,有些产品的业务是很复杂的,其在需求文档,及开发规范上都做得很好,不然维护的人越多,没有文档和规范去限制,岂不更加乱套. 如 ...
- java并发之CAS详解
前言 在高并发的应用当中,最关键的问题就是对共享变量的安全访问,通常我们都是通过加锁的方式,比如说synchronized.Lock来保证原子性,或者在某些应用当中,用voliate来保证变量的可见性 ...
- js 判断对象是否为空
利用JSON.stringify var objData = {};JSON.stringify(objData) ==="{}" // true 第二种用原声js 方法 Obje ...
- 从键盘录入输入3 个数num1,num2,num3,按从大到小进行输出
本题分别使用嵌套分支语句以及三目运算符来实现,两种方法,可以对比看看. import java.util.Scanner; /** * 从键盘录入输入3 个数a,b,c,按从大到小进行输出 * @au ...
- CVE-2019-0708(非蓝屏poc)远程桌面代码执行漏洞复现
玩了几天 刚回成都 玩电脑复现一下~ 内核漏洞原理暂时 没看懂 别问 ,问就是不懂 0x01 复现环境和Exp准备 漏洞影响范围 Windows 7 Windows Server 2008 R2 W ...