利用C++简单实现顺序表和单链表的示例代码
发布时间 - 2026-01-11 02:35:33 点击率:次本文主要给大家介绍了关于C++实现顺序表和单链表的相关内容,分享出来供大家参考学习,话不多说,来一起看看详细的介绍:

一、顺序表示例代码:
#include <assert.h>
#include <iostream>
using namespace std;
typedef int Datatype;
class SeqList
{
public:
SeqList()
:_array(NULL)
,_size(0)
,_capacity(0)
{
}
SeqList(const SeqList& s)
{
_array = (Datatype*)malloc(s._size*(sizeof(Datatype)));
memcpy(_array, s._array, s._size*(sizeof(Datatype)));
_size = _capacity = s._size;
}
SeqList& operator=(SeqList& s)
{
free(_array);
Swap(s);
return *this;
}
void Swap(SeqList& s)
{
_array = s._array;
_size = s._size;
_capacity = s._capacity;
}
~SeqList()
{
if (_array)
{
free(_array);
_array = NULL;
_size = _capacity = 0;
}
}
void Print()
{
for (size_t i = 0; i < _size; i++)
{
cout << _array[i] << " ";
}
cout << endl;
}
void CheckCapcacity()
{
if (_size == _capacity)
{
_capacity = 2 * _capacity + 3;
_array = (Datatype*)realloc(_array, _capacity*sizeof(Datatype));
assert(_array);
}
}
//后插
void PushBack(Datatype x)
{
Insert(_size, x);
}
//前插
void PushFront(Datatype x)
{
Insert(0, x);
}
//删除最后一个
void PopBack()
{
Erase(_size);
}
//删除第一个
void PopFront()
{
Erase(0);
}
//[]运算符重载
Datatype& operator[](size_t pos)
{
assert(pos < _size);
return _array[pos];
}
//pos位置前插入x
void Insert(size_t pos, Datatype x)
{
assert(pos <= _size);
CheckCapcacity();
int end = (int)_size - 1;
if (pos == 0)
{
while (end >= 0)
{
_array[end + 1] = _array[end];
end--;
}
_array[0] = x;
}
else
{
while (end >= (int)pos)
{
_array[end + 1] = _array[end];
end--;
}
_array[pos] = x;
}
_size++;
}
//删除pos位置的元素
void Erase(size_t pos)
{
assert(pos < _size);
//popfront的实现
if (_size > 0)
{
if (pos == 0)
{
int end = 0;
while (end < (int)_size - 1)
{
_array[end] = _array[end + 1];
end++;
}
_size--;
}
//popback的实现
else if (pos == _size)
{
_size--;
}
//erase
else
{
int end = pos;
while (end < (int)_size - 1)
{
_array[end] = _array[end + 1];
end++;
}
_size--;
}
}
return;
}
private:
Datatype* _array;
size_t _size;
size_t _capacity;
};
二、单链表(不含头结点)示例代码
#include <iostream>
#include <assert.h>
using namespace std;
typedef int DataType;
struct SListNode
{
SListNode* _next;
DataType _data;
SListNode(DataType x)
:_data(x)
, _next(NULL)
{}
};
typedef SListNode Node;
class SList
{
public:
SList()
:_head(NULL)
, _tail(NULL)
{}
SList(const SList& s)
:_head(NULL)
,_tail(NULL)
{
Copy(s);
}
SList& operator=(const SList& s)
{
Destroy();
Copy(s);
return *this;
}
~SList()
{
Destroy();
}
void Copy(const SList& s)
{
Node* cur = s._head;
while (cur)
{
PushBack(cur->_data);
cur = cur->_next;
}
}
void Destroy()
{
Node* cur = _head;
while (_head != NULL)
{
cur = _head;
_head = cur->_next;
delete cur;
}
_head = _tail = NULL;
}
void PushBack(DataType x)
{
if ((_head == NULL)&&(_tail == NULL))
{
_head = _tail = new Node(x);
}
else
{
_tail->_next = new Node(x);
_tail = _tail->_next;
}
}
void PopBack()
{
if (_head == NULL)
{
return;
}
else if (_head ->_next == NULL)
{
delete _head;
_head = _tail = NULL;
}
else
{
Node* tmp = _head;
while (tmp->_next->_next != NULL)
{
tmp = tmp->_next;
}
_tail = tmp;
tmp->_next = NULL;
}
}
void PushFront(DataType x)
{
if ((_head == NULL) && (_tail == NULL))
{
_head = _tail = new Node(x);
}
else
{
Node* tmp = new Node(x);
tmp->_next = _head;
_head = tmp;
}
}
void PopFront()
{
if (_head == NULL)
{
return;
}
Node* cur = _head;
_head = _head->_next;
delete cur;
}
Node* Find(DataType x)
{
Node* tmp = _head;
while (tmp)
{
if (tmp->_data == x)
return tmp;
tmp = tmp->_next;
}
return NULL;
}
// 插入一个节点在pos的前面
void Insert(Node* pos, DataType x)
{
assert(pos);
if (pos == 0)
{
PushFront(x);
}
else
{
Node* cur = _head;
while (cur->_next != pos)
{
cur = cur->_next;
}
Node* tmp = new Node(x);
tmp->_next = pos;
cur->_next = tmp;
}
}
void Erase(Node* pos)
{
assert(pos);
if (pos == 0)
{
PopFront();
}
else if (pos->_next == NULL)
{
PopBack();
}
else
{
Node* cur = _head;
while (cur->_next != pos)
{
cur = cur->_next;
}
Node* tmp = cur->_next;
cur->_next = tmp->_next;
delete tmp;
}
}
void Print()
{
Node* tmp = _head;
while (tmp != NULL)
{
cout <<tmp->_data << "->";
tmp= tmp->_next;
}
cout <<"NULL"<<endl;
}
private:
Node* _head;
Node* _tail;
};
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持
# c
# 单链表
# 实现顺序表
# c语言单链表
# C++顺序表的基本操作实现
# C++实现数据结构的顺序表详解
# C++顺序表实现图书管理系统
# C++实现基于静态数组的顺序表
# C++实现动态顺序表(vector)
# C++实现动态顺序表
# C++实现顺序表的常用操作(插入删出查找输出)
# C++实现顺序表的方法
# C++超详细分析顺序表
# 链表
# 相关内容
# 第一个
# 给大家
# 不含
# 这篇文章
# 谢谢大家
# 多说
# 运算符
# 有疑问
# operator
# public
# SeqList
# Datatype
# const
# typedef
# int
# amp
# memcpy
# sizeof
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
专业商城网站制作公司有哪些,pi商城官网是哪个?
香港服务器部署网站为何提示未备案?
Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门
php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
android nfc常用标签读取总结
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?
Thinkphp 中 distinct 的用法解析
如何在云主机快速搭建网站站点?
大型企业网站制作流程,做网站需要注册公司吗?
如何在Windows虚拟主机上快速搭建网站?
详解Android——蓝牙技术 带你实现终端间数据传输
Laravel如何使用Collections进行数据处理?(实用方法示例)
Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理
lovemo网页版地址 lovemo官网手机登录
焦点电影公司作品,电影焦点结局是什么?
Python并发异常传播_错误处理解析【教程】
英语简历制作免费网站推荐,如何将简历翻译成英文?
重庆市网站制作公司,重庆招聘网站哪个好?
高防服务器租用如何选择配置与防御等级?
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
C++用Dijkstra(迪杰斯特拉)算法求最短路径
软银砸40亿美元收购DigitalBridge 强化AI资料中心布局
实例解析Array和String方法
如何撰写建站申请书?关键要点有哪些?
Laravel如何使用Service Container和依赖注入?(代码示例)
如何用AI帮你把自己的生活经历写成一个有趣的故事?
如何打造高效商业网站?建站目的决定转化率
Python自动化办公教程_ExcelWordPDF批量处理案例
JavaScript实现Fly Bird小游戏
手机软键盘弹出时影响布局的解决方法
如何在不使用负向后查找的情况下匹配特定条件前的换行符
如何在IIS中配置站点IP、端口及主机头?
实例解析angularjs的filter过滤器
Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制
linux写shell需要注意的问题(必看)
Python自然语言搜索引擎项目教程_倒排索引查询优化案例
如何利用DOS批处理实现定时关机操作详解
公司网站制作价格怎么算,公司办个官网需要多少钱?
如何在宝塔面板中修改默认建站目录?
Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解
如何在万网ECS上快速搭建专属网站?
Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境
微信h5制作网站有哪些,免费微信H5页面制作工具?
如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程
实现点击下箭头变上箭头来回切换的两种方法【推荐】
jQuery validate插件功能与用法详解
怎么用AI帮你设计一套个性化的手机App图标?
PythonWeb开发入门教程_Flask快速构建Web应用
网站制作企业,网站的banner和导航栏是指什么?
上一篇:docker怎么创建基础镜像
下一篇:docker怎么用镜像
上一篇:docker怎么创建基础镜像
下一篇:docker怎么用镜像

