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

题目描述

【id:35】【20分】E. Stack(类与构造)_第1张图片

 

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

堆栈类的说明如下:

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

你可能感兴趣的:(oj,c++,数据结构)