【id:35】【20分】E. Stack(类与构造)

news2025/1/20 3:50:25

题目描述

 

上面是栈类的定义,栈是一种具有先进后出特点的线性表,请根据注释,完成类中所有方法的实现,并在主函数中测试之。

堆栈类的说明如下:

1. 堆栈的数据实际上是保存在数组a中,而a开始是一个指针,在初始化时,根据实际需求将a动态创建为数组,数组长度根据构造函数的参数决定。

2.size实际上就是数组的长度,当使用无参构造则size为10,当使用有参构造则size为s、

3.top表示数组下标,也表示数组中下一个存放数据的空白位置。

4.push操作表示堆栈的数组存放一个数据,例如一开始数组为空,则top为0,当有数据要入栈时,把数据存放在a[top]的位置,然后top加1指向下一个空白位置、数据进栈只能从栈顶进。

5.pop操作表示一个数据要出栈,数据出栈只能从栈顶出,先把top减1指向栈顶数据,然后把数据返回。

6.判断堆栈空的条件是top是否等于0,判断堆栈满的条件是top是否等于size

输入

测试数据的组数 t

第一个栈的大小

第一个栈的元素列表,将该列表的元素依次进栈

..........

输出

将栈元素依次出栈


输入样例

2
5
1 2 3 4 5
7
-1 2 8 0 -3 1 3
 


输出样例

Constructor.
5 4 3 2 1
Destructor.
Constructor.
3 1 -3 0 8 2 -1
Destructor.
 


#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
#include <iomanip>
#include<cmath>
#include<cstring>
#include<cctype>
#include<queue>
#include<set>
using namespace std;
class cstack
{
private:
	int* a;//栈的数组
	int size;//栈中元素的数量
	int top;//
public:
	cstack();
	cstack(int s);
	cstack(cstack& r_s);
	int get(int index);
	void push(int n);
	int isempty();
	int isfull();
	int pop();
	~cstack();

};

//初始化对象
cstack::cstack()
{
	top = 0;
	size = 10;
	cout << "Constructor." << endl;
	a = new int[10];//初始化动态数组
}
//初始化对象 对栈内存赋值 
cstack::cstack(int n)
{
	top = 0;
	size = n;
	cout << "Constructor." << endl;
	a = new int[n];//对栈内存赋值  数组有n个元素
}

int cstack::get(int index)
{
	return a[index];
}

//push栈中添加元素
void cstack::push(int n)
{
	a[top] = n;//存入数据
	top++;
}

//判断栈是否为空
int cstack::isempty()
{
	if (top <= 0)
	{
		return 1;
	}
	else
	{
		return 0;
	}
}

int cstack::isfull()
{
	if (top == size)
	{
		return 1;
	}
	else
	{
		return 0;
	}
}

//删除栈最外面的元素 并将其返回
int cstack::pop()
{
	top--;
	return a[top];
}

//析构函数 执行到最后的时候调用
cstack::~cstack()
{
	cout << "Destructor." << endl;
	delete[]a;//结束数组
}
int main()
{
	int t, n, num, sign = 1;
	cin >> t;
	while (t--)
	{
		sign = 1;//记得重新初始化
		cin >> n;//n个元素
		cstack st1(n);//创建一个st1对象 并给其赋值size=n  表示这个栈可以装n个元素
		for (int i = 0; i < n; i++)
		{
			cin >> num;
			st1.push(num);//存入数据
		}
		while (!st1.isempty())//栈 不为空 执行
		{
			//搞个sign变量目的是 保证答案结构正确
			if (sign)
			{
				cout << st1.pop();//输出最后一个元素
				sign = 0;
			}
			else
			{
				cout << ' ' << st1.pop();
			}
		}
		cout << endl;
		
	}
	return 0;
}

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

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

相关文章

Linux操作基础(进程和计划任务管理)

文章目录一 、程序和进程的关系1.1程序1.2进程1.3进程和线程的关系二 、查看进程的命令2.1 ps命令2.11 ps aux2.12 ps -elf2.3 top 命令2.4 pgrep命令2.5 进程的启动方式2.51 手工启动2.52 调度启用进程的前后台调度终止进程的运行2.6 kill命令三 、计划任务管理3.1使用at命令&…

Java面试技巧之每天一个Tip——SpringBean生命周期和作用域?

Spring Bean是个「古老的」问题&#xff0c;似乎面试中已经不常见了。 但是&#xff0c;偶尔&#xff0c;面试者还是会遭遇到这个问题&#xff0c;以至于被打了个措手不及&#xff0c;一脸懵。 为了防止出现类似的情况&#xff0c;Tip一下大家&#xff0c;很简单的Tip&#x…

nginx (uos)

安装nginx apt install nginx php php-fpm -y 切换目录 cd /etc/nginx vim /etc/nginx/conf.d/proxy.conf server { listen 80; ssl_certificate "/etc/nginx/nginx.crt"; ssl_certificate_key "/etc/nginx/nginx.key"; …

项目1实现login登录功能方案设计第三版

需求优化点:MySQL表常用功能模块实现方案index页面home页面需求 实现一个登录功能 实现的功能 注册(邮箱注册)登录(邮箱密码)重置密码查看操作记录(登录, 注册, 重置密码, 登出. 都算操作)登出在第2版的基础上进行优化:\ 优化点: VerificationCode(验证码储存库): 增加时间字段…

LAMP框架的架构与环境配置

1.LAMP架构的相关知识 1.1 LAMP架构的概述 LAMP架构是目前成熟的企业网站应用模式之一&#xff0c;指的是协同工作的一整套系统和相关软件&#xff0c;能够提供动态Web站点服务及其应用开发环境。LAMP是一个缩写词&#xff0c;具体包括Linux操作系统、Apache网站服务器、MySQ…

追梦之旅【数据结构篇】——详解小白如何使用C语言实现堆数据结构

详解小白如何使用C语言实现堆数据结构 “痛”撕堆排序~&#x1f60e;前言&#x1f64c;什么是堆&#xff1f;堆的概念及结构堆的性质&#xff1a;堆的实现堆向下调整算法画图分析&#xff1a;堆向下调整算法源代码分享&#xff1a;向下调整建小堆向下调整建大堆堆向上调整算法…

矩阵求逆_高斯消元法

高斯消元法流程 首先必须要判断矩阵是不是一个方阵&#xff0c;其方法是对于一个矩阵AnnA_{n \times n}Ann​&#xff0c;先构造一个增广矩阵W[A∣E]W[A \mid E]W[A∣E]&#xff0c;其中EEE是一个nnn \times nnn的单位矩阵&#xff0c;这样WWW就成了一个n2nn \times 2nn2n的矩…

说说你对Event Loop(事件循环)的理解?

目录标题一、是什么二、事件循环三、宏任务和微任务微任务宏任务四、async与awaitasyncawait一、是什么 Javascript在设计之初便是单线程&#xff0c;即指程序运行时&#xff0c;只要一个线程存在&#xff0c;同一时间只能做一件事。 为了解决单线程运行阻塞问题&#xff0c;J…

【jvm系列-07】深入理解执行引擎,解释器、JIT即时编译器

JVM系列整体栏目 内容链接地址【一】初识虚拟机与java虚拟机https://blog.csdn.net/zhenghuishengq/article/details/129544460【二】jvm的类加载子系统以及jclasslib的基本使用https://blog.csdn.net/zhenghuishengq/article/details/129610963【三】运行时私有区域之虚拟机栈…

消息中间件Kafka分布式数据处理平台+ZooKeeper

目录 一.消息队列基本介绍 1.为什么需要消息队列&#xff08;MQ&#xff09; 2.使用消息队列的好处 2.1 解耦 2.2 可恢复性 2.3 缓冲 2.4 灵活性 & 峰值处理能力 2.5 异步通信 3.消息队列的两种模式 3.1 点对点模式 3.2 发布/订阅模式 二.Kafka基本介绍 1.Kaf…

【http】 get方法和Post方法区别;http和https

get方法和Post方法 get方法&#xff1a;通过url传参&#xff0c;回显输入的私密信息&#xff0c;不够私密 Post方法&#xff1a;通过正文传参&#xff0c;不会回显&#xff0c;一般私密性有保证。 一般如果上传的图片&#xff0c;音频比较大&#xff0c;推荐Post方法&#x…

Android中的AsyncTask

近期写了一个项目&#xff0c;在前台刷新界面的时候需要操作数据库&#xff0c;进行数据操作&#xff0c;在UI线程更新数据会导致ANR&#xff0c;程序十分卡&#xff0c;因此用了AsyncTask进行后台数据处理。 介绍 AsyncTask是一个用于在后台线程执行异步任务并在主线程更新U…

springboot+vue论坛管理系统(源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的论坛管理系统。项目源码请联系风歌&#xff0c;文末附上联系信息 。 目前有各类成品java毕设&#xff0c;需要请看文末联系方式 。ja…

1.分布式电源接入对配电网影响分析

说明书 相关代码资源地址&#xff1a;风、光、负荷场景生成&#xff1b;风电出力各场景及概率&#xff1b;光伏出力各场景及概率&#xff1b;负荷各场景及概率&#xff1b;场景的削减&#xff1b;样本概率初始化&#xff1b;样本削减 基于多目标算法的冷热电联供型综合能源系…

Android 自定义View 之 圆环进度条

圆环进度条前言正文一、XML样式二、构造方法三、测量四、绘制① 绘制进度条背景② 绘制进度③ 绘制文字五、API方法六、使用七、源码前言 很多时候我们会使用进度条&#xff0c;而Android默认的进度条是长条的&#xff0c;从左至右。而在日常开发中&#xff0c;有时候UI为了让页…

亚马逊云科技为游戏全生命周期提供保障,降低游戏整体运营成本

开发一个“爆款”游戏总共需要几步&#xff1f;Marvel Snap可能会告诉你&#xff1a;第一步&#xff0c;专心致志把游戏做好、提高可玩性&#xff1b;第二步&#xff0c;把其他工作交给亚马逊云科技。 相关数据显示&#xff0c;自2022年10月18日正式发行以来&#xff0c;在不…

L2-044 大众情人分数 25分

人与人之间总有一点距离感。我们假定两个人之间的亲密程度跟他们之间的距离感成反比&#xff0c;并且距离感是单向的。例如小蓝对小红患了单相思&#xff0c;从小蓝的眼中看去&#xff0c;他和小红之间的距离为 1&#xff0c;只差一层窗户纸&#xff1b;但在小红的眼里&#xf…

【Hello Linux】信号量

作者&#xff1a;小萌新 专栏&#xff1a;Linux 作者简介&#xff1a;大二学生 希望能和大家一起进步&#xff01; 本篇博客简介&#xff1a;简单介绍linux中信号量的概念 信号量信号量的概念信号量的使用信号量函数二元信号量模拟互斥功能基于环形队列的生产者消费者模型空间资…

CSS快速入门-选择器和优先级

文章目录CSS简介选择器CSS样式优先级CSS简介 CSS是一种用于样式化网页的语言&#xff0c;全称为“层叠样式表”&#xff08;Cascading Style Sheets&#xff09;。 它可以控制网页中元素的外观和布局&#xff0c;例如颜色、字体、大小、边距、对齐等&#xff0c;让网页变得更…

消费回暖:别总想着“报复”,而该想想怎么“修复”

01 是报复性消费吗&#xff1f;「报复性消费」一词最早是在2020年武汉疫情解封之后被大家熟知。之后的三年里&#xff0c;各路机构总是预测“等到常态化防疫结束之后&#xff0c;必将迎来真正的报复性消费”&#xff0c;事实果真如此吗&#xff1f;A面&#xff1a;涨自去年年底…