零九号 2023-06-03 08:15 采纳率: 60%
浏览 34
已结题

c++线性表类 出错求解决!!

想用c++实现线性表,把线性表作为一个类,进行类的插入删除查找等功能,写了一个头文件和源文件,虽然能运行,但不会显示东西好像没成功,请问哪些地方错了,如何改进
下面是头文件

  1. #ifndef _LINEAR_H
  2. #define _LINEAR_H
  3. #include<iostream>
  4. using namespace std;
  5. class linear
  6. {
  7. class Node
  8. {
  9. public:/*这两个设置为私有的无法访问 为什么 都写到类里面了 或者这个写到类外面要怎么处理*/
  10. int value;
  11. Node *next;
  12. Node(int x=0)
  13. {
  14. value=x;
  15. next=0;
  16. }
  17. } *head;
  18. public:
  19. void Insert(int pos,int value);//pos位置,value值
  20. int Delete(int pos,int *value);
  21. int Find(int value);
  22. linear()//构造函数
  23. {
  24. head=new Node;
  25. if(!head)
  26. throw -1;
  27. }
  28. ~linear()//析构函数
  29. {
  30. delete head;
  31. }
  32. };
  33. void linear::Insert(int pos,int value)
  34. {
  35. Node *p=head;
  36. int c=1;
  37. while(c<pos||!p->next)
  38. {
  39. p=p->next;
  40. c++;
  41. }
  42. Node *q=new Node(value);
  43. if(!q) throw -1;
  44. q=p->next;
  45. p->next=q;
  46. cout<<"已插入"<<value;
  47. }
  48. int linear::Delete(int pos,int *value)
  49. {
  50. Node *p=head;
  51. int c=1;
  52. while(c<pos||!p->next)
  53. {
  54. p=p->next;
  55. c++;
  56. }
  57. if(p->next)
  58. {
  59. Node *q=p->next;
  60. *value=q->value;
  61. p->next=q->next;
  62. delete q;
  63. }
  64. }
  65. int linear::Find(int value)
  66. {
  67. Node *p=head->next;
  68. int c=1;
  69. while(!p)
  70. {
  71. if(p->value==value)
  72. {
  73. cout<<"找到";
  74. c=0;
  75. return c;
  76. }
  77. p=p->next;
  78. c++;
  79. }
  80. if(c==1)
  81. cout<<"未找到";
  82. return -1;
  83. }
  84. #endif

下面是源文件

  1. #include"linear.h"
  2. int main()
  3. {
  4. linear biao;
  5. biao.Insert(1,3);
  6. biao.Insert(2,0);
  7. biao.Insert(3,7);
  8. biao.Insert(4,9);
  9. biao.Find(3);
  10. int value=3;
  11. biao.Delete(2,&value);
  12. return 0;
  13. }

展开全部

  • 写回答

1条回答 默认 最新

  • Loup&卡普 2023-06-03 13:51
    关注
    • while 的查找 条件应该为与
    while (!p->next &&c< pos)
    

    或有短路,如果给一个特别大的 pos 这里会出问题。

    • Insert 里边 插入那部分应该是
    1. q->next = p->next;
    2. p->next = q;
    • Find 那里 不应该判断 c 为 1的时候没找到,应该是 走出循环就是没找到
    本回答被专家选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
    零九号 2023-06-04 01:55

    你好 我发现改成&&之后程序确实可以运行了,但是好像while循环里面的没有执行,我试着输出c, c一直等于1,并没有遍历,我觉得应该是p等于初始化头指针后,p->next本来就是空的,无法进入循环另外,Find里面我修改后,可能由于始终没有遍历的原因,一直都是未找到

    回复
    Loup&卡普 回复 零九号 2023-06-04 05:47

    如果第一个能插入,之后的应该没有问题,new是不用判断空的,因为如果分配失败内部是会自己抛出 bad_alloc的异常的

    回复
    Loup&卡普 回复 零九号 2023-06-04 05:48

    插入那里你改了吗? 如果按我写的应该能插入

    回复
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 6月14日
  • 专家已采纳回答 6月7日
  • 创建了问题 6月3日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部