问答题
请使用VC6或使用【答题】菜单打开
proj3下的工程proj3,其中声明了一个单向链表类sList。sList的成员函数Prepend的功能是在链表头部加入一个新的元素。请编写成员函数Prepend。在main函数中给出了一组测试数据,此时程序的输出应为:
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的功能是在链表头部加入一个新元素。形参c是一个char型变量,因此要定义一个新的结构体指针temp,并给它分配sListItem类型空间,把形参c中的值赋给temp的数据域,并使temp通过指针链接到链表上。
主要考查考生对链表的掌握,单向链表是指针的一大应用,运用指针对单向链表进行操作有很多优点,如插入和删除元素很方便等。