全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

C++栈(stack)的模板类实现代码

本文实例为大家分享了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小时内与您取得联系。