主观题:3. 动态数组模拟堆栈操作

用一个动态数组模拟堆栈操作,如上图所示。初始时堆栈为空,将下标为 0 的元素看成栈底,一般栈底是固定的。对堆栈的常规操作有:①入栈,即向堆栈中压人数据(即将数据加入到数组中),加人数据时栈顶升高。②出栈,从栈顶取出一个数据。一个数据出栈后,栈顶降低。
上图中 size 表示堆栈的大小,n 表示当前栈中已有的元素个数。在进行入栈操作时,要考虑若堆栈已满,需要动态申请另一个新的栈空间( 一次比原来多10 个元素 ),将原栈内容拷入新栈, 然后释放原栈空间。在进行出栈操作时,要考虑若栈中无元素,则给出警告信息。
定义一个类 Stack,实现堆栈及相关操作。 其中数据成员有:① “ int *Stack;”, 栈底指针。② “ int n;”,堆栈中已有元素的个数。③ “ int size;”,堆栈的大小。成员函数有:①构造函数, 参数为堆栈的初始大小,缺省值为 10。需动态申请栈空间。② “ void push(int x);”,将 x 人栈。③ “ int pop();”,栈顶元素出栈。④ “ int stacksize();”, 返回堆栈的大小。⑤ “ int stacknum();” ,返回堆栈中实际元素的个数。⑥析构函数,释放堆栈空间。在主函数中定义一个 Stack 类对象,测试类的所有成员函数。
答案: