本文实例为大家分享了C++栈(stack)的模板类实现代码,供大家参考,具体内容如下

1.基本概念
栈中的元素遵守“先进后出”的原则(LIFO,Last In First Out)
只能在栈顶进行插入和删除操作
压栈(或推入、进栈)即push,将数据放入栈顶并将栈顶指针加一
出栈(或弹出)即pop,将数据从栈顶删除并将栈顶指针减一
栈的基本操作有:pop,push,判断空,获取栈顶元素,求栈大小
2.构造栈
可以使用数组构造栈,也可以使用单向链表构造,我觉得使用单向链表更加灵活方便,下面的例子我使用单向链表来构造栈。
单向链表的头插法比较适合,链表头作为栈顶:
节点的数据结构:
template<class T>
struct node
{
T value; //储存的值
node<T>* next;
node() :next(nullptr){} //构造函数
node(T t) :value(t), next(nullptr){}
};
用模板类构造一个简单的stack类:
template<class T>
class myStack
{
int cnts; //入栈数量
node<T> *head; //栈的头部
public:
myStack(){ cnts = 0; head = new node<T>; }
void stackPush(T arg); //入栈
T stackPop(); //出栈
T stackTop(); //获取栈顶元素
void printStack(); //打印栈
int counts(); //获取栈内元素个数
bool isEmpty(); //判断空
};
template<class T>
void myStack<T>::stackPush(T arg)
{
node<T> *pnode = new node<T>(arg); //申请入栈元素的空间
pnode->next = head->next;
head->next = pnode;
cnts++;
}
template<class T>
T myStack<T>::stackPop()
{
if (head->next!=nullptr)
{
node<T>* temp = head->next;
head->next = head->next->next;
T popVal = temp->value;
delete temp;
return popVal;
}
}
template<class T>
T myStack<T>::stackTop()
{
if (head->next!=nullptr)
{
return head->next->value;
}
}
template<class T>
void myStack<T>::printStack()
{
if (head->next != nullptr)
{
node<T>* temp = head;
while (temp->next != nullptr)
{
temp = temp->next;
cout << temp->value << endl;
}
}
}
template<class T>
int myStack<T>::counts()
{
return cnts;
}
template<class T>
bool myStack<T>::isEmpty()
{
if (cnts)
return false;
else
return true;
}
GitHub:https://github.com/whlook/stackTemplate
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# C++
# 栈
# stack
# 模板类
# C++中用两个标准容器stack
# 实现一个队列的方法详解
# C++中Stack(栈)的使用方法与基本操作详解
# C++详解实现Stack方法
# C++Stack栈类模版实例详解
# c++ stack容器适配器的使用
# C++中stack容器的使用
# C++之stack类的代码及其逻辑举例详解
# 链表
# 并将
# 可以使用
# 我觉得
# 数据结构
# 弹出
# 大家分享
# 具体内容
# 大家多多
# 基本概念
# 只能在
# center
# style
# text
# align
# GitHub
# endl
# pre
# class
# true
相关文章:
公司网站制作费用多少,为公司建立一个网站需要哪些费用?
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
云南网站制作公司有哪些,云南最好的招聘网站是哪个?
javascript基本数据类型及类型检测常用方法小结
建站10G流量真的够用吗?如何应对访问高峰?
,在苏州找工作,上哪个网站比较好?
电商网站制作公司有哪些,1688网是什么意思?
如何快速搭建响应式可视化网站?
大学网站设计制作软件有哪些,如何将网站制作成自己app?
网站建设制作、微信公众号,公明人民医院怎么在网上预约?
如何快速生成可下载的建站源码工具?
小型网站制作HTML,*游戏网站怎么搭建?
如何快速生成高效建站系统源代码?
网站企业制作流程,用什么语言做企业网站比较好?
建站之星×万网:智能建站系统+自助建站平台一键生成
网站制作员失业,怎样查看自己网站的注册者?
网站制作报价单模板图片,小松挖机官方网站报价?
历史网站制作软件,华为如何找回被删除的网站?
如何在Golang中指定模块版本_使用go.mod控制版本号
建站之星与建站宝盒如何选择最佳方案?
如何通过多用户协作模板快速搭建高效企业网站?
建站中国官网:模板定制+SEO优化+建站流程一站式指南
C++如何编写函数模板?(泛型编程入门)
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
天津个人网站制作公司,天津网约车驾驶员从业资格证官网?
定制建站价位费用解析与套餐推荐全攻略
网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?
建站主机选虚拟主机还是云服务器更好?
自助网站制作软件,个人如何自助建网站?
建站之星如何优化SEO以实现高效排名?
常州自助建站:操作简便模板丰富,企业个人快速搭建网站
如何正确选择百度移动适配建站域名?
电视网站制作tvbox接口,云海电视怎样自定义添加电视源?
如何选择高效响应式自助建站源码系统?
活动邀请函制作网站有哪些,活动邀请函文案?
青岛网站建设如何选择本地服务器?
免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?
建站之星如何助力网站排名飙升?揭秘高效技巧
网站制作说明怎么写,简述网页设计的流程并说明原因?
专业网站制作服务公司,有哪些网站可以免费发布招聘信息?
建站之星安全性能如何?防护体系能否抵御黑客入侵?
定制建站方案优化指南:企业官网开发与建站费用解析
*服务器网站为何频现安全漏洞?
nginx修改上传文件大小限制的方法
手机网站制作与建设方案,手机网站如何建设?
建站之星CMS建站配置指南:模板选择与SEO优化技巧
美食网站链接制作教程视频,哪个教做美食的网站比较专业点?
建站之星安装模板失败:服务器环境不兼容?
在线教育网站制作平台,山西立德教育官网?
一键网站制作软件,义乌购一件代发流程?
*请认真填写需求信息,我们会在24小时内与您取得联系。