题目描述
上面是栈类的定义,栈是一种具有先进后出特点的线性表,请根据注释,完成类中所有方法的实现,并在主函数中测试之。
堆栈类的说明如下:
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
第一个栈的大小
第一个栈的元素列表,将该列表的元素依次进栈
..........
输出
将栈元素依次出栈
样例查看模式
正常显示查看格式
输入样例1 <-复制
输出样例1
#include<iostream>
using namespace std;
class CStack
{
public:
CStack();
CStack(int s);
int get(int index);
void push(int n);
int isempty();
int isfull();
int pop();
~CStack();
private:
int* a;
int size;
int top;//表示数组下表
};
CStack::CStack()
{
size = 10;
top = 0;
a = new int[10];
cout << "Constructor." << endl;
}
CStack::CStack(int s)
{
size = s;
top = 0;
a = new int[s];
cout << "Constructor." << endl;
}
CStack::~CStack()
{
delete[]a;
cout << "Destructor." << endl;
}
int CStack::get(int index)
{
return *(a + index);
}
void CStack::push(int n)
{
a[top] = n;
top++;
}
int CStack::isempty()
{
if (top == 0)
{
return 0;//表示空
}
}
int CStack::isfull()
{
if (top == size)
{
return 1;
}
}
int CStack::pop()
{
return a[--top];
}
int main()
{
int i, t, size1, j, m;
cin >> t;
for (i = 0; i < t; i++)
{
cin >> size1;
CStack CStack1(size1);
for (j = 0; j < size1; j++)
{
cin >> m;
CStack1.push(m);
}
for (j = 0; j < size1 - 1; j++)
{
cout << CStack1.pop() << " ";
}
cout << CStack1.pop() << endl;
}
return 0;
}