使用VC++6.0打开考生文件夹下的源程序文件3.cpp,阅读下列程序说明和代码,功能如下: 从屏幕输入数字,然后由大到小插入指定的链中。当输入0时,表示输出的数据已经输入完成,把数据打印到屏幕,并释放内存。 其中定义的类不完整,按要求完成

admin2020-06-29  37

问题 使用VC++6.0打开考生文件夹下的源程序文件3.cpp,阅读下列程序说明和代码,功能如下:
    从屏幕输入数字,然后由大到小插入指定的链中。当输入0时,表示输出的数据已经输入完成,把数据打印到屏幕,并释放内存。
    其中定义的类不完整,按要求完成下列操作,将类的定义补充完整。
    (1)在父结点的Next中保存新插入的结点的指针,请在注释1后添加适当的语句。
    (2)把pNext的子结点赋给pNext本身,请在注释2后添加适当的语句。
    (3)判定p的子结点不为空,如果不为空,则打印p中的数据到屏幕,请在注释3后添加适当的语句。
    (4)用t1保存动态申请内存结点的链表头,请在注释4后添加适当的语句。
    注意:仅在函数指定位置添加语句,请勿改动主函数main与其他函数中的任何内容。
    试题程序:
  #include
  class TC
  {
      public:
      TC(int data=0)
    {
      this->data=data;
      this->next=NULL;
    }
    int data:
    TC*next:
  };
  void Insert(TC*p,int data)
  {
    TC*temp=new TC(data);
    TC*pParent=p;
    TC*pNext=p->next;
    while(pNext)
{
if(data)pNext->data)
{
//* * * * * * * * 1 * * * * * * * *
    temp->next=pNext:
    return:
}
else
{
  pParent=pNext:
//* * * * * * * * 2 * * * * * * * *
}
}
if(pNext==NULL)
{
pParent->next=temp;
return:
}
}
void printf(TC*p)
{
//* * * * * * * * 3 * * * * * * * *
  while()
  {
cout<p=p->next;
}
cout<end1;
}
void Delete(TC*p)
{
//* * * * * * * * 4 * * * * * * * *
  TC*t1=;
  TC*t2;
  while(t1! =NULL)
  {
  t2=t1->next;
  delete t1;
  t1=t2:
  }
}
void main()
{
int i=0;
TC head;
do
{
  int data;
  cout<<"请输入一个数字:"<  cin>>data;
  if(data==0)break;
  Insert(&head,data);
  }while(1);
  printf(&head);
  Delete(&head);
  return;
}
}

选项

答案(1)应添加“pParent->next=temp;”。 (2)应添加“pNext=pNext->next;”。 (3)将“while()”补充完整为“while(p->next!=NULL)”。 (4)将“TC*t1=;”补充完整为“TC*t1=p->next;”。

解析 本题第1处要求“在父结点的Next中保存新插入的结点的指针”。对于指针的操作,pParent->next为pParent的子结点,在父结点的Next中保存新插入的结点的指针,即“pParent->next=temp;”。
    第2处要求“把pNext的子结点赋给pNext本身”。pNext->next为pNext的子结点,把pNext的子结点赋给pNext本身,即“pNext=pNext->next;”。注释3下是判定p的子结点不为空。p的子结点是p->next。程序中的“while()”缺乏p的子结点不为空的判断条件,所以修改为“while(p->next!=NULL)”。
    第4处要求“用t1保存动态申请内存结点的链表头”。p为链表,p->next为链表头。程序中的语句“TC*t1=:”中t1沿有被赋值,所以修改为“TC*t1=p->next;”
转载请注明原文地址:https://kaotiyun.com/show/1byp777K
0

最新回复(0)