问答题 请使用VC6或使用[答题]菜单打开考生文件夹proj3下的工程pmj3,其中声明了一个单向链表类sList。sList的成员函数Prepend的功能是在链表头部加入一个新的元素。请编写成员函数Prepend。在mmn函数中给出了一组测试数据,此时程序的输出应为: B->A-> ### A-> ### A-> ### exiting inner block exiting outer block 注意:只在函数Prepend的“//********333********”和“//********666********”之间填入若干语句,不要改动程序中的其他内容。 //SList.h struct sListItem { char data; sListItem* next; }; class sList { public: sList() : h(0) {} //0表示空链表 ~sList (); void Prepend (char c); //在链表前端加入元素 void Del (); //删除链表首元素 sListItem* First () const { return h; } void Print() const; void Release (); //销毁链表 private: sListItem* h; //链表头 }; void writeToFile (const char* ); //main. cpp #include <iostream> #include "sList.h" using namespace std; sList:: ~sList () { Release (); } void sList::Prepend (char c) { //********333******** //********666******** } void sList::Del () { sListItem* temp = h; h = h -> next; delete temp; } void sList::Print() const { sListItem* temp = h; while (temp != 0) { cout <<temp -> data << " -> "; temp = temp -> next; } cout << "/n###" << endl; } void sList::Release ( { while (h != 0) Del (); } int main ( ) { sList* ptr; { sList obj; obj.Prepend ('A'); obj.Prepend ('B'); obj.Print (); obj.Del(); obj.Print (); ptr = &obj; ptr -> Print(); cout << "exiting inner block" << endl; } cout << "exiting outer block" << endl; writeToFile (""); return 0; }
【正确答案】sListItem* temp=new sListItem; //动态分配空间给结构体temp的指针 temp->data=c; //把c赋值于结构体temp成员data temp->next=h; //把h赋值于结构temp体成员next h=temp; //把temp赋值给h,即h指向temp指向的空间
【答案解析】[考点] 本题考查的是sList类,其中涉及构造函数、字符指针、析构函数、成员函数和const函数。 [解析] 主要考查考生对链表的掌握,成员函数Prepend的功能是在链表头部加入一个新元素。形参e是一个char型变量,因此要定义一个新的结构体指针temp,并给它分配sListItem类型空间,把形参c中的值赋给temp的数据域,并使temp通过指针链接到链表上。 主要考查考生对链表的掌握,单向链表是指针的一大应用,运用指针对单向链表进行操作有很多优点,如插入和删除元素很方便等。