stack类别

题1:

完成Stack类的改造,将其设置为模板类。 使用这个模板Stack类创建两个堆栈对象。 在主程序中创建一个字符堆栈,一个int堆栈,分别压入一个字符串和5个整数,从顶端分别打印出两个堆栈的内容。

【测试数据】 输入: hello 1 2 3 4 5 输出: o l l e h 5 4 3 2 1 说明: 输出行的末尾可以有一个空格

#include <iostream>
#include<cstring>
//stack的意思是堆,想象一堆堆在一起的文件,最上面的是top-1(就像数组一样的),最下面的是0(编号为0)
using namespace std;
const  int  MAX_SIZE=100;     
template <typename T>//typename可以把它替换成int之类的数据类型
//那么之后这个T就表示int数据类型
class  Stack
{
private:T *data; //T类型数据的指针        int size;             int top;              
public:/*这里需要以下的函数构造,析构,把元素弄出去的函数(需要判断是否为空),把元素放进来的函数(需要判断是否为满的函数)显示的函数(正反显示),如果可以的话还可以搞一个返回栈顶元素的函数*/Stack();              Stack(int s);         ~Stack();            void push(T ch);   T pop();  //返回的元素是T类型的       T getTopElement();       bool isEmpty();      bool isFull();       void setNull();       void reverseDisplay();void display();
};
template <typename T>
Stack<T>::Stack()//如果使用template <typename T>的话,函数的声明要变成这个样子{/*析构函数需要包括大小的声明,top值的设置,data的设置*/size = MAX_SIZE;top = -1;//cout << "默认构造函数" << endl;data = new T[size];
}
template <typename T>
Stack<T>::Stack(int s)
{size = s;top = -1;//cout << "构造函数" << endl;data = new T[size];
}
template <typename T>
Stack<T>::~Stack()
{//析构函数中药将data删除delete[] data;
}
template <typename T>
bool Stack<T>::isEmpty()
{if (top ==  -1)return true;elsereturn false;
}
template <typename T>
bool Stack<T>::isFull()
{if (top + 1 == size)//数组的思想return true;elsereturn false;
}
template <typename T>
void Stack<T>::push(T n)
{if (!isFull())data[++top] = n;//数组元素加1elsethrow "堆栈溢出,不能压入。";
}
template <typename T>
T Stack<T>::pop()
{if (!isEmpty())return data[top--];//数组元素减1elsethrow "堆栈为空,无法弹出。";
}
template <typename T>
void Stack<T>::setNull()
{top = -1;//将stack设置为空
}
template <typename T>
void  Stack<T>::reverseDisplay()
{if(!isEmpty()){for (int i=0; i<=top; i++){cout << data[i];}cout << endl;}elsecout << "栈为空"<< endl;//相反显示}
template <typename T>
void Stack<T>::display()//正常显示,但是是和输入顺序相反
{if(!isEmpty()){for (int i=top; i>=0; i--){cout << data[i]<<" ";}cout << endl;}elsecout << "栈为空"<< endl;
}int main(){Stack<char> m1;string h;cin>>h;int len=h.size();//获取字符串长度的函数for(int i=0;i<len;i++){m1.push(h[i]);}Stack<int> m2(5);for(int i=0;i<5;i++){int x;cin>>x;m2.push(x);}m1.display();m2.display();return 0;}

题2:

【题目要求】输入若干串字符,每次遇到换行符’\n’时,则输出本行当前处理结果。输入时以“#”字符作为结束符,当遇到这个符号后,意味着字符串输入结束。 在输入过程中如果输入“<”,则表示回退一格;在输入过程中如果包含了“@”,则表示回退到本行行首。

运行示例如下,其中加粗字体表示是运行中输入的内容,黑色字体表示系统的输出:

测试数据:

输入栈的大小:

80 输入待处理的字符串(输入<代表退一格,输入@代表清除到行首,输入#结束): ret<peatabc<<<

repeat

goo@goodluck

goodluck

re<c@good@excellent

excellent

abc<<<< 堆栈为空,无法弹出。//这里用异常处理codeblocks有输出,头歌没有输出。 栈为空 bye#

bye

 #include <iostream>#include<string.h>
using namespace std;
const  int  MAX_SIZE=100;       //定义栈最大值常量
class  Stack
{
private:char *data;           //属性:线性表int size;             //栈的实际大小int top;              //属性:栈顶
public:Stack();              //构造函数Stack(int s);         //有参构造函数~Stack();             //析构函数//这里定义和声明getter和settervoid push(char ch);   //成员函数:入栈char pop();           //成员函数:出栈并返回栈顶元素char getTopElement();        //成员函数:获得栈顶元素(不出栈)bool isEmpty();       //成员函数:栈是否为空bool isFull();        //成员函数:栈是否满void setNull();       //设置栈为空void reverseDisplay();//以反序显示堆栈的内容void display();     //显示堆栈的内容
};Stack::Stack()
{size = MAX_SIZE;top = -1;//cout << "默认构造函数" << endl;//创建动态数组}
Stack::Stack(int s)
{size = s;top = -1;//cout << "构造函数" << endl;//创建动态数组if (size>0&&size<=100)data = new char[size];else if(size>100){cout<<"堆栈大小超过最大值,创建失败。\n";data=NULL;size=0;}else{cout<<"堆栈大小小于0,创建失败。\n";data=NULL;size=0;}
}Stack::~Stack()
{//cout << "析构函数" << endl;//释放动态数组}bool Stack::isEmpty()
{if (top ==  -1)return true;elsereturn false;
}
bool Stack::isFull()
{if (top + 1 == size)return true;elsereturn false;
}void Stack::push(char n)
{if (!isFull())data[++top] = n;}char Stack::pop()
{if (!isEmpty())return data[top--];//我把throw函数删除了
}void Stack::setNull()
{top = -1;//哦哦,原理如此,当我们将堆栈清空的时候可以讲一个个的数据弹出,或者是将top变成-1
}void  Stack::reverseDisplay()
{if(!isEmpty()){for (int i=0; i<=top; i++){cout << data[i];}cout << endl;}elsecout << "栈为空"<< endl;}void Stack::display()
{if(!isEmpty()){for (int i=top; i>=0; i--){cout << data[i];}cout << endl;}elsecout << "栈为空"<< endl;
}int main()
{int size;cout<<"输入栈的大小:输入待处理的字符串(输入<代表退一格,输入@代表清除到行首,输入#结束):"<<endl;//'<'表示出去一个元素 ,@表示设置为空(因为换行就会输出本行),‘\n'表示显示和设置为空,’#‘表示显示和设置为空还有结束//’#'结束,但是最后一行没有输出cin>>size;cin.ignore();//这个就是吸收换行符Stack stack(size);char ch;while((ch=cin.get())!='#'){if(ch=='<'){stack.pop();}else if(ch=='@'){stack.setNull();}else if(ch=='\n'){stack.reverseDisplay();stack.setNull();}else{stack.push(ch);}}if(ch=='#'){stack.reverseDisplay();stack.setNull();}//几个和字符相关的函数 cin.get()读取单个字符,cin.ignore()表示吸收换行符return 0;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/703244.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Codeforces Round 240 (Div. 1) C. Mashmokh and Reverse Operation(分治+逆序对)

原题链接&#xff1a;C. Mashmokh and Reverse Operation 题目大意&#xff1a; 给出一个长度为 2 n 2^{n} 2n 的正整数数组 a a a &#xff0c;再给出 m m m 次操作。 每次操作给出一个数字 q q q &#xff0c;把数组分为 2 n − q 2^{n-q} 2n−q 个长度为 2 q 2^{q} 2…

2D目标检测正负样本分配集合

一&#xff1a;CenterNet Center point based正负样本分配方式&#xff1a;中心像素分配为当前目标。 如果同类的两个高斯核具有交叠的情况&#xff0c;我们逐元素【像素】的选取最大值。Center point based 正样本分配方式的缺点&#xff1a;如果两个不同的物体完美匹配&…

各中间件数据库默认访问端口总结

说明 在生态丰富的开发环境下&#xff0c;我们常常需要接触很多中间件产品&#xff0c;中间件默认的连接端口以及可视化ui访问端口也时不时的需要用到&#xff0c;这里循序渐进做好登记&#xff0c;以备查阅&#xff01; 中间件/数据库名称默认端口管理台端口默认账号密码rabbi…

vue 实现背景图水印不可删除

原理&#xff1a;利用MutationObserver监听父节点的子节点变化&#xff0c;如果变化&#xff0c;重新创建水印节点并添加到父节点中 代码如下&#xff1a; 父节点中一开始要有我们的水印节点&#xff0c;然后在mounted中执行我们的waterMarkBgObserver&#xff0c;切记在befor…

ubuntu 配置root远程登录shell脚本

以下是一键配置脚本&#xff0c;直接新建rootlogin.sh脚本文件&#xff0c;打开后把以下命令粘贴进去然后&#xff0c;运行脚本文件即可。 #!/bin/bash#set root password sudo passwd root#notes Document content sudo sed -i "s/.*root quiet_success$/#&/" …

CFS的覆灭,Linux新调度器EEVDF详解

本文主要总结了EEVDF论文和Linux内核实现中关键逻辑的推导&#xff0c;着重强调代码逻辑和论文公式之间的关系&#xff0c;它又长又全&#xff0c;像今天的汤圆又大又圆:D Warn&#xff1a;多行的公式编号渲染有点问题&#xff0c;当存在多行公式时&#xff0c;仅对最后一条式…

业绩回暖背后,2024阿里云、华为云、腾讯云AI战拉开帷幕

过去几年&#xff0c;降本增效、高质量增长&#xff0c;已经成为多数云厂商们心照不宣的主题了。曾经的跑马圈地&#xff0c;在经过了激烈的市场竞争之后&#xff0c;逐渐回归商业本质&#xff0c;效益日渐变成了更为优先的选项了。 伴随着去年以来AI大模型的爆发&#xff0c;…

什么是媒体发稿?发稿媒体分类及发稿流程

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 媒体发稿是一种企业推广和宣传的手段&#xff0c;通过媒体渠道传递企业信息和形象。 媒体发稿的含义在于&#xff0c;当企业有新闻、事件或其他消息需要对外公布时&#xff0c;可以选择…

第三节:Vben Admin登录对接后端login接口

系列文章目录 第一节&#xff1a;Vben Admin介绍和初次运行 第二节&#xff1a;Vben Admin 登录逻辑梳理和对接后端准备 文章目录 系列文章目录前言一、Flask项目介绍二、使用步骤1.User模型创建2.迁移模型3. Token创建4. 编写蓝图5. 注册蓝图 三. 测试登录总结 前言 上一节&…

【基于Ubuntu20.04的Autoware.universe安装过程】方案一:虚拟机 | 详细记录 | Vmware | 全过程图文 by.Akaxi

目录 一、Autoware.universe背景 二、虚拟机配置 三、Ubuntu20.04安装 四、GPU显卡安装 五、ROS2-Galactic安装 六、ROS2-dev-tools安装 七、rmw-implementation安装 八、pacmod安装 九、autoware-core安装 十、autoware universe dependencies安装 十一、安装pre-c…

[ai笔记12] chatGPT技术体系梳理+本质探寻

欢迎来到文思源想的ai空间&#xff0c;这是技术老兵重学ai以及成长思考的第12篇分享&#xff01; 这周时间看了两本书&#xff0c;一本是大神斯蒂芬沃尔弗拉姆学的《这就是ChatGPT》,另外一本则是腾讯云生态解决方案高级架构师宋立恒所写的《AI制胜机器学习极简入门》&#xf…

2024最新水果软件FL Studio21版本介绍与功能对比

FL Studio21前身为Fruity Loops&#xff0c;是一款由Image-Line公司开发的数字音频工作站&#xff08;DAW&#xff09;。它广泛用于音乐制作、编曲、混音和录音等领域。随着软件的不断更新迭代&#xff0c;FL Studio推出了多个版本&#xff0c;以满足不同用户的需求。 FL Studi…

数字化转型导师坚鹏:县区级政府数字化转型案例研究

县区级政府数字化转型案例研究 课程背景&#xff1a; 很多县区级政府存在以下问题&#xff1a; 不清楚县区级政府数字化转型的政务服务类成功案例 不清楚县区级政府数字化转型的社会管理类成功案例 不清楚县区级政府数字化转型的智慧城市类成功案例 课程特色&#xff…

【android】android studio生成aar包并在其他工程引用aar包(类/函数/activity)

android studio生成aar包并在其他工程引用aar包 arr引用和jar引用的区别1.ARR实现简单的JAVA/Kotlin类和函数调用过程1.1.新建需要打包成AAR的模块类1.2.新建需要调用的类1.3 创建 AAR 文件&#xff1a;1.4 AAR文件使用1.5 函数调用 2.实现AAR中activity的调用过程2.1 **特别说…

数字化转型导师坚鹏:地市级政府数字化转型案例研究

地市级政府数字化转型案例研究 课程背景&#xff1a; 很多地市级政府存在以下问题&#xff1a; 不清楚地市级政府数字化转型的政务服务类成功案例 不清楚地市级政府数字化转型的社会管理类成功案例 不清楚地市级政府数字化转型的智慧城市类成功案例 课程特色&#xff…

从软硬件以及常见框架思考高并发设计

目录 文章简介 扩展方式 横向扩展 纵向扩展 站在软件的层面上看 站在硬件的层面上看 站在经典的单机服务框架上看 性能提升的思考方向 可用性提升的思考方向 扩展性提升的思考方向 文章简介 先从整体&#xff0c;体系认识&#xff0c;理解高并发的策略&#xff0c;方…

document.all.lbl_value.innerHTML设置失败的问题

2011-5 日志 一个字符的差错&#xff0c;导致数个小时的困惑&#xff0c;编程序不能不小心。 function test() { if (infowindowDistance null) { infowindowDistance new google.maps.InfoWindow( { content: null, …

【DAY04 软考中级备考笔记】数据结构基本结构和算法

数据结构基本结构和算法 2月25日 – 天气&#xff1a;晴 周六玩了一天&#xff0c;周天学习。 1. 什么是数据结构 数据结构研究的内容是一下两点&#xff1a; 如何使用程序代码把现实世界的问题信息化如何用计算机高效地处理这些信息从创造价值 2. 什么是数据 数据是信息的…

win10彻底解决IE浏览器自动跳转edge问题

有时候需要使IE进行一些特殊网页操作&#xff0c;比如网银安装安全助手、政府办公网站等等&#xff0c;但是微软强制跳转edge导致无法进行。 最近一些博客提出的修改edge设置等&#xff0c;在win10更新至19041版本后均无效。但是偶然间发现是系统保护的锅。 步骤如下&#xff1…

css标签及其作用

CSS&#xff08;层叠样式表&#xff09;用于设置和控制HTML元素的样式和布局。下面是一些常用的CSS选择器及其作用&#xff1a; - 标签选择器&#xff1a;通过HTML元素标签名选择元素。例如&#xff0c;p选择所有<p>元素。 - 类选择器&#xff1a;通过类名选择元素。例如…