C++ 实现静态单链表的实例

利用数组实现的静态单链表,与严蔚敏书实现略有不同,不另设回收空间。有任何BUG或错误,希望各位朋友多多反馈~~感激不尽
/* Author : Moyiii
* Mail: lc09@vip.qq.com
* 静态链表实现,仅作学习之用,当然如果
* 你想拿去用,随你好啦。
*/
#include <iostream>
using namespace std;
#define MAX_LIST_SIZE 100
class Node
{
public:
int data;
int cur;
};
class SLinkList
{
public:
SLinkList();
//和普通的线性链表区别不是很大。除了两个分配
//和回收节点空间的函数,具体算法请参考课本或
//网络资料
int newNode();
bool deleteNode(int pos);
bool insertElem(int pos, int elem);
bool deleteElem(int pos);
int& getElem(int pos);
int getLength();
bool isEmpty();
void print();
void clear();
private:
int head;//这个可以不要,默认等于0
int space;
int length;
Node *elems;
};
SLinkList :: SLinkList()
{
// 0号位置为头几点,不可以更改,初始指向自己
// 从1~MAXLENGTH为可分配节点,最初由space管理
elems = new Node[MAX_LIST_SIZE];
if(!elems)
{
cout << "Malloc failed!" << endl;
}
head = space = length = 0;
for(int i = 0; i < MAX_LIST_SIZE; ++i)
{
elems[i].data = i;
elems[i].cur = i + 1;
}
elems[MAX_LIST_SIZE - 1].cur = 0;
elems[0].cur = 0;
space = 1;
}
//从space指向的备用节点链表中取下一个节点
int SLinkList :: newNode()
{
if(space == 0)
{
cout << "Space is full!" << endl;
return 0;
}
int pos = space;
space = elems[space].cur;
elems[pos].cur = 0;
return pos;
}
//回收节点空间
bool SLinkList :: deleteNode(int pos)
{
if(pos == 0)
{
cout << "Free space Error!" << endl;
return false;
}
elems[pos].cur = space;
space = pos;
return true;
}
//插入节点,思路类似,找到被删除节点的前一个节点
//然后更改指向
bool SLinkList :: insertElem(int pos, int elem)
{
if(length == MAX_LIST_SIZE)
{
cout << "Space is Full" << endl;
return false;
}
if(pos < 1 || pos > length + 1)
{
cout << "Insert Over Bound" << endl;
return false;
}
int index = head;
for(int i = 1; i <= pos - 1; ++i)
{
index = elems[index].cur;
}
int node = newNode();
if(node == 0)
{
cout << "Space malloc failed" << endl;
return false;
}
elems[node].data = elem;
elems[node].cur = elems[index].cur;
elems[index].cur = node;
length++;
return true;
}
//一回事,注意把删除的节点回收给space
bool SLinkList :: deleteElem(int pos)
{
if(pos < 1 || pos > length)
{
cout << "Delete Node over Bound!" << endl;
return false;
}
int index = head;
for(int i = 1; i <= pos - 1; ++i)
{
index = elems[index].cur;
}
int node = elems[index].cur;
elems[index].cur = elems[node].cur;
deleteNode(node);
length--;
return true;
}
void SLinkList :: print()
{
int index = elems[head].cur;
while(index != 0)
{
cout << elems[index].data << " ";
index = elems[index].cur;
}
cout << endl;
return;
}
int SLinkList :: getLength()
{
return length;
}
bool SLinkList :: isEmpty()
{
if(length == 0)
{
return true;
}
else
{
return false;
}
}
int& SLinkList :: getElem(int pos)
{
int index = head;
for(int i = 1; i <= pos; ++i)
{
index = elems[index].cur;
}
return elems[index].data;
}
void SLinkList :: clear()
{
for(int i = 0; i < MAX_LIST_SIZE; ++i)
{
elems[i].data = i;
elems[i].cur = i + 1;
}
elems[MAX_LIST_SIZE - 1].cur = 0;
elems[0].cur = 0;
space = 1;
}
int main()
{
//测试数据,测试插入删除空间是否溢出
SLinkList myList;
for(int i = 1; i <= 105; ++i)
{
myList.insertElem(1,i);
}
//myList.print();
for(int i = 1; i <= 105; ++i)
{
myList.deleteElem(1);
}
//myList.print();
//普通测试
for(int i = 1; i <= 10; ++i)
{
myList.insertElem(1,i);
}
myList.print();
cout << "Length= " << myList.getLength() <<endl;
myList.deleteElem(5);
myList.print();
cout << "Length= " << myList.getLength() <<endl;
cout << myList.isEmpty() << endl;
int &elem = myList.getElem(3);
elem = 99;
myList.print();
myList.clear();
myList.print();
return 0;
}
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# C++
# 实现静态单链表
# 静态单链表
# C++实现LeetCode(141.单链表中的环)
# C++实现LeetCode(142.单链表中的环之二)
# C++单链表实现大数加法
# C++实现单链表的构造
# C++使用模板实现单链表(类外实现)
# C++使用模板实现单链表
# 利用C++简单实现顺序表和单链表的示例代码
# C++中单链表的建立与基本操作
# C++编程语言实现单链表详情
# 链表
# 不可以
# 你想
# 感激不尽
# 希望能
# 几点
# 谢谢大家
# 之用
# 好啦
# 拿去
# 仅作
# 随你
# 请参考
# 中取
# 有任何
# 最初
# 测试数据
# namespace
# std
# bool
相关文章:
长沙做网站要多少钱,长沙国安网络怎么样?
c++ stringstream用法详解_c++字符串与数字转换利器
免费制作小说封面的网站有哪些,怎么接网站批量的封面单?
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
宁波免费建站如何选择可靠模板与平台?
简易网站制作视频教程,使用记事本编写一个简单的网页html文件?
专业网站制作服务公司,有哪些网站可以免费发布招聘信息?
建站主机与服务器功能差异如何区分?
如何选择高效便捷的WAP商城建站系统?
PHP正则匹配日期和时间(时间戳转换)的实例代码
宝盒自助建站智能生成技巧:SEO优化与关键词设置指南
高端智能建站公司优选:品牌定制与SEO优化一站式服务
如何用免费手机建站系统零基础打造专业网站?
如何在腾讯云免费申请建站?
智能起名网站制作软件有哪些,制作logo的软件?
ui设计制作网站有哪些,手机UI设计网址吗?
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
如何通过cPanel快速搭建网站?
建站之星安装步骤有哪些常见问题?
微信h5制作网站有哪些,免费微信H5页面制作工具?
python的本地网站制作,如何创建本地站点?
西安专业网站制作公司有哪些,陕西省建行官方网站?
c++怎么用jemalloc c++替换默认内存分配器【性能】
如何选择PHP开源工具快速搭建网站?
商务网站制作工程师,从哪几个方面把握电子商务网站主页和页面的特色设计?
香港服务器租用费用高吗?如何避免常见误区?
如何通过VPS建站实现广告与增值服务盈利?
北京企业网站设计制作公司,北京铁路集团官方网站?
非常酷的网站设计制作软件,酷培ai教育官方网站?
小型网站建站如何选择虚拟主机?
红河网站制作公司,红河事业单位身份证如何上传?
建站之星如何快速更换网站模板?
如何选择域名并搭建高效网站?
,石家庄四十八中学官网?
购物网站制作公司有哪些,哪个购物网站比较好?
如何用VPS主机快速搭建个人网站?
定制建站是什么?如何实现个性化需求?
安徽网站建设与外贸建站服务专业定制方案
SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?
北京建设网站制作公司,北京古代建筑博物馆预约官网?
寿县云建站:智能SEO优化与多行业模板快速上线指南
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
C++用Dijkstra(迪杰斯特拉)算法求最短路径
建站主机是什么?如何选择适合的建站主机?
网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?
建站主机选购指南与交易推荐:核心配置解析
建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南
c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】
c# Task.ConfigureAwait(true) 在什么场景下是必须的
如何高效利用200m空间完成建站?
*请认真填写需求信息,我们会在24小时内与您取得联系。