使用VC6打开考生文件夹下的工程test34_3。此工程包含一个test34_3.cpp,其中定义了表示栈的类stack。源程序中stack类的定义并不完整,请按要求完成下列操作,将程序补充完整。 (1)定义类stack的私有数据成员sp和size,它们分别为整型的指针和变量,其中sP指向存放栈的数据元素的数组,size为栈中存放最后一个元素的下标值。请在注释“//**1**”之后添加适当的语句。 (2)完成类stack的构造函数,该函数首先从动态存储空间分配含有100个元素的int型数组,并把该数组的首元素地址赋给指针sp,然后将该数组的所有元素赋值为0,并将size赋值为-1(size等于-1表示栈为空)。请在注释“//**2**”之后添加适当的语句。 (3)完成类stack的成员函数push的定义。该函数将传入的整型参数x压入栈中,即在size小于数组的最大下标情况下, size自加1,再给x赋值。请在注释“//**3**”之后添加适当的语句。 (4)完成类stack的成员函数pop的定义,该函数返回栈顶元素的值,即在size不等于-1的情况下,返回数组中下标为size的元素的值,并将size减1。请在注释“//**4**”之后添加适当的语句。 程序输出结果如下: the top elem:1 the pop elem:1 the stack is empty 注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。 源程序文件test34_3.cpp清单如下: #include<iostream.h> class stack { //** 1 ** public:stack ( );bool empty(){return size==-1;}bool full() {return size==99;}void push(int x);void pop();void top(); }; stack::stack() { //** 2 ** for(int i=0; i<100; i++) *(sp+i)=0;size=-1; } void stack::push(int x) { //** 3 ** cout<<"the stack is full"<<end1; else { size++; *(sp+size) = x; } } void stack::pop() { //** 4 ** cout<<"the stack is empty"<<end1; else { cout<<"the pop elem:"<<*(sp+size)<<end1; size--; } } void stack::top() { if iempty() ) cout<<"the stack is empty"<<end1; else { cout<<"the top elem:"<<*(sp+size)<<end1; } } void main ( ) { stack s; s.push(1); s.top(); s.pop(); s.top(); }
参考答案:
解析:(1) int *sp; int size; (2) sp=new int[100]; (3) if(full()) (4) if(empty()) 本题主要考查的是考生利用类、数组、指针和基本控制结构等知识,建立经典数据结构的能力。栈在数据结构中是一应用范围很广的类,在这里实现的只是最核心的部分。在该题中特别注意使用new进行动态空间申请及指针在数组访问中的应用。