C++栈类的实现

C++栈(stack)详解 C++栈详解 阅读详情
 
#ifndef _CStack
#define _CStack
#include<iostream.h>
template<class T>
class CStack{
// LIFO 对象
public :
CStack(int MaxStackSize = 10);
~CStack () {delete [] stack;}
bool IsEmpty() const {return top == -1;}
bool IsFull() const {return top == MaxTop ; }
T Top() const;
CStack<T>& Add(const T& x);
CStack<T>& Delete(T& x);
friend ostream& operator<<(ostream& out, const CStack<T>& w);  

private :
int top; // 栈顶
int MaxTop; // 最大的栈顶值
T *stack; // 堆栈元素数组
};

template<class T>
CStack<T>::CStack(int MaxStackSize)
{// CStack 类构造函数
MaxTop = MaxStackSize - 1;
stack = new T[MaxStackSize];
top = -1;
}
template<class T>
T CStack<T>::Top() const
{// 返回栈顶元素
if (!IsEmpty())  
 return stack[top];
}
template<class T>
CStack<T>& CStack<T>::Add(const T& x)
{ //添加元素x
if (!IsFull())  
{
stack[++top] = x;
return *this;
}
}

template<class T>
CStack<T>& CStack<T>::Delete(T& x)
{// 删除栈顶元素,并将其送入x
if (!IsEmpty()) 
{
x = stack[top--];
return *this;
}
}
template <class T>  
ostream& operator<<(ostream& out, const CStack<T>& w)  
{  
	 for(int i=w.top;i>-1;i--)
	  out<<w.stack[i]<<" ";
      return out;

}  

/*采用链表来定义栈*/

template<class T>class LinkedStack;
template <class T>
class Node{
friend LinkedStack<T>;
private :
T data;
Node<T> *link;
};
template<class T>
class LinkedStack {
public :
LinkedStack () {top = 0;}
~LinkedStack();
bool IsEmpty() const {return top==0;}
bool IsFull() const;
T Top() const;
LinkedStack<T>& Add(const T& x);
LinkedStack<T>& Delete(T& x);
private :
Node<T> *top; // 指向栈顶节点
};

template<class T>
LinkedStack<T>:: ~ LinkedStack( )
{
// 析构函数
Node<T> *next;
while (top) {
next =top->link;
delete top;
top = next;
}
}
template<class T>
bool LinkedStack<T>::IsFull() const
{// 堆栈是否满?
try {
Node<T> *p = new Node<T>;
delete p;
return false;
}
catch (...) {return true;}
}
template<class T>
LinkedStack<T>& LinkedStack<T>::Add(const T& x)
{// 添加元素x
Node<T> *p = new Node<T>;
p->data = x;
p->link = top;
top = p;
return *this;
}
template<class T>
T LinkedStack<T>::Top() const
{// 返回栈顶元素
if (!IsEmpty())
return top->data;
}
template<class T>
LinkedStack<T>& LinkedStack<T>::Delete(T& x)
{// 删除栈顶元素,并将其送入x
if (!IsEmpty()) 
{

x = top->data;
Node<T> *p = top;
top = top->link;
delete p;
return *this;
}
}
#endif

 

 

在主函数的调用如下:

#include "Stack.h"
void main()
{
  CStack<int> S(20);
    for(int i=0;i<20;i++)
		S.Add(i);
	  cout<<"栈顶元素为:"<<S.Top()<<endl;
	  cout<<"所有栈元素为:"<<S<<endl;
}



 

C++ 类实现栈 #include &lt;iostream&gt; using namespace std; class Stack{ private: int* data_;//存放栈中的数据 int max_size_;//栈最大空间 int top_;//栈顶 //初始化栈 void initStack() { data_ = new int(max_... 阅读详情

相关推荐

【C++】5-1.13 实现栈Stack的class类

【C++】5-1.13 实现栈Stack的class类1、栈Stack2、实现stack类 1、栈Stack 栈:一种后进先出的数据结构; 关于栈的函数调用: 函数调用时,首先需要传递参数给被调用函数,这些参数先由编译器先存储进栈; 进入被调用函数后,函数里面的局部变量,也由编译器在栈中创建相应的存储; 函数返回时,局部变量出栈、参数出栈; 2、实现stack类 stack类封装了栈的数据成员并提供了操作栈的函数接口,如下图: ...

jn10010537的博客 733

堆栈(Stack)实现(C++)

一. 堆栈(Stack) 堆栈(Stack) 是一种可以存取的数据结构,其主要特征是先进后出(Last-in-first-out, LIFO) 栈顶(Top) 是最后入栈的数据 堆栈可分为静态堆栈(Static Stack)和动态堆栈(Dynamic Stack)两类: Static Stack: 栈的大小固定,可以用数组实现; Dynamic Stack: 栈的大小随需要改变,可以用链表实现 二. 基本操作(Basic Operation) 入栈(Push):Equivalent to an in

weixin_43361652的博客 7922

C++在类中实现栈功能

C++在类中实现栈功能。

321

栈的类实现(C++)

#include<iostream> using namespace std; template<class T> class Stack { private: int top; T *elements; int MaxSize; public: Stack(int Maxsize); ~Stack(){ delete []elements; } int Push(const T& x); int Size(); T Pop().

m0_62466789的博客 456

Python环境搭建和LabVIEW中的调用

本文主要介绍Python相关的环境搭建、Anaconda的使用以及在LabVIEW中调用Python的方法。

lvxisi的博客 6390

实测有效防止colab自动断开连接

实测有效防止colab自动断开连接

Thebest_jack的博客 1万+

C++数据结构之栈

栈的应用场景非常广泛,包括代码中的解析、数据结构中的树和图的遍历以及计算机系统中的内存分配等等。本文会介绍栈。

现役 OIer。 1万+

HX720/HX711 数据采集实战:从硬件配置到姿态解析(附源码详解)

本文详细解析了HX720/HX711数据采集传感器的硬件配置与姿态解析实战技巧,包括选型指南、电路设计避坑、抗干扰方案及源码实现。通过优化驱动代码和数据处理算法,提升采样率与精度,适用于动态称重和工业检测等场景。附源码详解,助力开发者快速掌握高精度数据采集技术。

weixin_30752699的博客 655

【C++】栈~~(很详细哦)

【C++】栈~~(很详细哦)

weixin_71138261的博客 7974

手把手教你用TUSB2E22中继器实现eUSB2与USB 2.0互转(附实测数据对比)

本文详细介绍了如何利用TUSB2E22中继器实现eUSB2与USB 2.0的高效互转,包括技术背景、硬件设计要点、信号完整性测试方法及故障排查策略。通过实测数据对比,展示了TUSB2E22在信号延迟、功耗和眼图性能上的显著优势,为工程师提供了实用的工程方案。

weixin_29199873的博客 283

【控制模块算法】控制理论的进修之路

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、(经典)自动控制理论【本科阶段】二、现代控制理论【本科阶段】三、最优控制理论【硕士阶段】总结 前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 本文先对对控制理论的理解做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章 提示:以下是本篇文章正文内容 一、(经典)自动控制理论【本科阶段】 一般控制工程、自动化相关的考研专业课就是自动

qq_35635374的博客 1447

c++类实现栈

自己设计的类实现栈; 类的声明: class stack { private: char* p;//开辟空间的指针; char* top; char* base; //栈顶栈底指针; int stack_size;//记录栈的大小; int space_used;//记录已用空间大小; public: stack() { p = new char[1]; base = top = p; stack_size = 1; space_used = 0; *top = '

m0_61776876的博客 720

【数字孪生与仿真技术】07:焊装生产线虚拟调试与PLC代码生成全流程实战:从数字孪生到智能优化

摘要:本文系统阐述焊装生产线虚拟调试与PLC代码自动化生成的完整技术体系,结合工业4.0背景下的智能制造需求,构建从离散事件仿真、机器人运动规划到PLC控制逻辑生成的全流程解决方案。通过MATLAB/Simulink平台实现焊装线物流仿真优化,采用遗传算法进行缓冲区容量配置,结合Stateflow状态机设计PLC控制逻辑,并利用PLC Coder生成西门子S7-1500兼容的ST代码。某车企焊装线应用案例显示,虚拟调试技术使调试周期缩短75%,OEE提升13.4%,年节约成本超$420万。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1829

C++ 类 实现栈

这个是类的实现“`includeusing namespace std; typedef int Item;typedef struct node{ Item data; struct node *pNext; } Node, *pNode; class STACK{ public: int size; pNode T

fasterry 6031

【VS Code插件开发】通用功能(二)

本篇主要从command(命令)、menus(菜单)、快捷键三个方面讲解,都归于通用功能。

编码世界 1万+

2026.3.21:Ubuntu26.04 apt换国内源 清华源 阿里源 中科大源 163源

作为 LTS 版本,它会有 5 年的常规维护和安全更新。如果订阅 Ubuntu Pro,还能享受额外7年的支持。也就是说, Ubuntu Pro将享有长达 12 年的系统更新保障!接下来,我们将重点介绍 Ubuntu 24.04 LTS 中那些值得关注的新特性,以方便你决定是否进行升级。Ubuntu 24.04 LTS,代号 「Noble Numbat」,即将与我们见面!Canonical 已经宣布, Ubuntu 24.04 LTS。源文件地址 已经更换为。

拥抱具身智能,昇腾Ascend C 9071

栈类C++实现

头文件: #pragma once //用数组实现栈,数组索引为0的位置为栈底,索引top指向栈顶 template class Stack { public: Stack(int capcity=20); ~Stack(); void ClearStack(); bool isEmpty(); bool isFull(); int StackLength(); T GetTo

2872

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

用C++中的类来实现链式栈

用C语言

u014627536的专栏 709

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

c++如何实现一个栈类

/往下递减,满足只访问栈顶的要求。///往上递增,原栈顶不访问。//没有元素,错误返回。//没有元素,错误返回。return *t;

hongyinhao的博客 229

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

7.C++ Stack栈类模版实现

1.栈的介绍 栈的实现方式分为3种 基于静态数组实现,内部预设一个很大的数组对象, 实现简单,缺点是空间受限。 基于动态数组实现,内部预设一个容量值,然后分配一段内存空间数组,如果入栈大于默认容量值时,则再次扩大分配新的内存数组,并将旧数组拷贝至新数组及释放旧数组. 基于双向循环链表实现 栈的函数需要实现如下所示: T pop() : 出栈并返回栈顶元素 const T & pop() const : 出栈并返回const类型栈顶元素 void push(const T &a.

抵抗时间扭曲,坚持做一件有意义的事 2561

C++ 类模版实现栈

#include <iostream> using namespace std; #define MAX 50 //类模版实现栈 template<typename T> class Stack{ protected: T data[MAX]; int top; public: //初始化 void init(); //大小 int getSi...

WGS. 716

用C++类实现整型栈

用C++类实现整型栈

IT_涛涛 166

运用栈stack类实现简单计算机,C++栈(stack)的模板类实现代码

本文实例为大家分享了C++栈(stack)的模板类实现代码,供大家参考,具体内容如下1.基本概念栈中的元素遵守“先进后出”的原则(LIFO,Last In First Out)只能在栈顶进行插入和删除操作压栈(或推入、进栈)即push,将数据放入栈顶并将栈顶指针加一出栈(或弹出)即pop,将数据从栈顶删除并将栈顶指针减一栈的基本操作有:pop,push,判断空,获取栈顶元素,求栈大小2.构造栈可以...

weixin_29057695的博客 713
上一篇: C++矩阵类的实现
下一篇: matlab中dos命令的应用
xiaoding133
博客等级 码龄19年 415粉丝 159原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值