> 文章列表 > 【id:35】【20分】E. Stack(类与构造)

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

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

题目描述

 

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

堆栈类的说明如下:

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;
}