书上要求一个链表类,一个结点类,不会写。
在别人的博客上看到有四种方式:
- 复合类:在Node类中定义友元的方式,使List类可以访问结点的私有成员。
- 嵌套类:在List内部定义Node类,但是Node的数据成员放在public部分,使List和Node均可以直接访问Node的成员。
- 继承:在Node类中吧成员定义为protected,然后让List继承Node类。
- 直接用struct定义Node类,因为struct的成员默认为公有数据成员,所以可直接访问。
一开始采用第二种嵌套类,但发现不方便创建单独的结点。于是用第三种继承,把结点的数据域设为public,这样就OK了。这样用C++也能实现书本上的函数了。
Clearlist() 一直没搞定!
解决方法在循环中创建的对象每次循环后会自动delete,故不用加delete了。C++可以delete指向NULL的指针,但delete后依然是NULL,似乎没意义。
关于delete
对同一个内存空间使用两次 delete 表达式。当两个指针指向同一个动态创建的对象,删除时就会发生错误。如果在其中一个指针上做 delete 运算,将该对象的内存空间返还给自由存储区,然后接着 delete 第二个指针,此时则自由存储区可能会被破坏。
delete指针释放的是指向的内存空间。
delete &p的时候出错,表面看是陷入死循环。p是一个对象,为什么会这样?而且不加&,编译器会报错:表达式必须包含指针类型
解决方法:用析构函数删除对象。因为new出来的才要delete。笨啊
下面是一元多项式部分
傻了:
Status InsertBefore(LNode &i, ElemType e);//将e插入到i结点之前
Status InsertAfter(LNode &i, ElemType e);//将e插入到i结点之后
当时自作聪明,插入的是数据而不是结点,现在继承为一元多项式就麻烦了。唉……
链表类没写好,导致写一元多项式都是泪啊。由此得出:写基础的类要充分考虑到后面的!
快疯了……
太混乱了 先放一放
现在的主要问题:
- 顺序错误,只有第一个数成功排序
- 无法相加,同次的会分别显示
第二天找到解决方法了,问题竟然是把continue写成break了 我晕。基础不过关。