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

发布时间 - 2026-01-11 01:50:57    点击率:

本文实例为大家分享了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 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】  javascript基于原型链的继承及call和apply函数用法分析  三星、SK海力士获美批准:可向中国出口芯片制造设备  js代码实现下拉菜单【推荐】  html5audio标签播放结束怎么触发事件_onended回调方法【教程】  三星网站视频制作教程下载,三星w23网页如何全屏?  Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑  Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议  Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】  Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】  Python并发异常传播_错误处理解析【教程】  ChatGPT 4.0官网入口地址 ChatGPT在线体验官网  如何在IIS7中新建站点?详细步骤解析  微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】  如何快速上传建站程序避免常见错误?  Python企业级消息系统教程_KafkaRabbitMQ高并发应用  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  Laravel如何与Docker(Sail)协同开发?(环境搭建教程)  Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程  详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南  Laravel怎么在Blade中安全地输出原始HTML内容  laravel怎么配置Redis作为缓存驱动_laravel Redis缓存配置教程  html5如何设置样式_HTML5样式设置方法与CSS应用技巧【教程】  Laravel怎么导出Excel文件_Laravel Excel插件使用教程  网站制作价目表怎么做,珍爱网婚介费用多少?  如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  济南网站建设制作公司,室内设计网站一般都有哪些功能?  微信小程序 wx.uploadFile无法上传解决办法  如何用已有域名快速搭建网站?  如何快速生成橙子建站落地页链接?  如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框  如何正确下载安装西数主机建站助手?  Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全  免费视频制作网站,更新又快又好的免费电影网站?  如何在腾讯云免费申请建站?  简历没回改:利用AI润色让你的文字更专业  网站制作软件有哪些,制图软件有哪些?  Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】  制作企业网站建设方案,怎样建设一个公司网站?  利用 Google AI 进行 YouTube 视频 SEO 描述优化  laravel怎么配置和使用PHP-FPM来优化性能_laravel PHP-FPM配置与性能优化方法  Angular 表单中正确绑定输入值以确保提交与验证正常工作  大学网站设计制作软件有哪些,如何将网站制作成自己app?  Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案  网页设计与网站制作内容,怎样注册网站?