鱼C论坛

 找回密码
 立即注册
查看: 3447|回复: 2

有没有大神可以帮我看看这个代码啊

[复制链接]
发表于 2017-7-14 13:06:37 | 显示全部楼层
本帖最后由 BngThea 于 2017-7-14 13:49 编辑

首先,建议把错误信息也贴出来
可能存在以下问题:
1 基类没有定义默认构造函数,这时调用子类的默认构造函数会出错
2 子链表类缺少析构函数,这样当其对象在作用域消亡时,会导致内存泄漏
3 创建单列表的Create函数逻辑不对,而且 int a的定义请放到循环外,cin语句可能需要输入格式判定,最后的delete语句使用明显不对
4 同样的,在ShowNode函数中的delete使用也存在问题,请注意delete和new配对使用

以下是我修改过可以正确执行的代码:
  1. #include<iostream>
  2. using namespace std;

  3. struct D_Node
  4. {
  5.         double data;
  6.         D_Node *next;
  7. };

  8. class Link_List
  9. {
  10. public:
  11.         Link_List(){}//默认构造
  12.         Link_List(int num){ this->num = num;}
  13.         virtual void Create(D_Node *pHead) = 0;          //创建单链表
  14.         virtual void showNode(D_Node *pHead) = 0;        //显示链表

  15. protected:
  16.         D_Node node;
  17.         int num;
  18. };


  19. class S_Link_List:public Link_List
  20. {   
  21. public:
  22.         S_Link_List(){}
  23.         S_Link_List(int num);
  24.         ~S_Link_List();//析构函数,用来释放内存
  25.         D_Node *getHead(){return pHead;} //获取头节点
  26.         virtual void Create(D_Node *pHead);
  27.         virtual void showNode(D_Node *pHead);
  28. private:
  29.         D_Node *pHead;
  30. };

  31. S_Link_List::S_Link_List(int num):Link_List(num)
  32. {
  33.         pHead = new D_Node;
  34.         pHead->next = NULL;
  35. };

  36. S_Link_List::~S_Link_List()
  37. {
  38.         D_Node * temp = pHead;
  39.         while (temp->next != NULL)
  40.         {
  41.                 pHead = temp->next;
  42.                 delete temp;
  43.                 temp = pHead;
  44.         }        
  45. }

  46. void S_Link_List::Create(D_Node *pHead)
  47. {
  48.         D_Node *temp;
  49.         D_Node *p;
  50.         temp = pHead;

  51.         cout << "请输入第1个节点的数据:";
  52.         cin >> pHead->data;

  53.         for(int i = 2;i < num + 1; i++)
  54.         {
  55.                 p = new D_Node;
  56.                 cout << "请输入第 " << i << "个节点的数据:";
  57.                 cin >> p->data;
  58.                 pHead->next = p;
  59.                 pHead = p;
  60.         }
  61.         pHead->next = NULL;        
  62.         p = NULL;
  63.         pHead = temp;
  64. }

  65. void S_Link_List::showNode(D_Node *pHead)
  66. {
  67.         cout << "头部\t->\t";
  68.         D_Node *temp = pHead;
  69.         while(pHead)
  70.         {               
  71.                 cout << pHead->data << "\t->\t";
  72.                 pHead = pHead->next;
  73.                 if (!pHead)
  74.                      cout << "尾部" << endl;                              
  75.         }
  76.         pHead = temp;
  77.         cout << endl;
  78. }


  79. int main()
复制代码


上述代码还可以完善,比如对输入的链表数值进行判定,对每次输入的节点数据进行判定等。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-4-1 14:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表