应用题   使用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进行动态空间申请及指针在数组访问中的应用。