知识大全 数据结构学习讲座(C++) 单链表(2)
Posted 多项式
篇首语:你可以忘掉苦难,但不能忘却艰辛;你可以忘掉伤疤,但不能忘却耻辱。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 数据结构学习讲座(C++) 单链表(2)相关的知识,希望对你有一定的参考价值。
数据结构学习讲座(C++) 单链表(2) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
单链表( )
单链表应用
有人曾经建议最好把链表和链表位置这两个分开 C++标准库是这么做的 但对于初学者来说 一个类总比两个类好操作 我不清楚在书中这部分的程序究竟调没调试 但这种语句我是绝对看不懂的
ListNode<Term> *pa *pb *pc *p;ListIterator<Term> Aiter(ah poly);ListIterator<Term> Biter(ah poly);pa = pc = Aiter First(); pb = p = Biter First();……………………… pa >coef = pa >coef + pb >coef;p = pb; pb = Biter Next(); delete p;
pa pb p 究竟指向什么?你说这很清楚 ListNode<Term>这样的节点呗 但按照原书的定义 ListIterator::First()等等函数返回是指向data域的指针 他们怎么能直接赋值?到了下面更乱了 pb指向的区域直接分解出了Term的数据成员 也就是说是指向Term结构的 然后让ListNode<Term>类型的指针p指向这个Term结构 最后 居然把这个结构delete了 天啊 ListNode<Term>这样的节点的data域被delete了!
如果从基本的节点操作入手 谁也不会弄的这么乱 但正因为又多了一个类 很多事就疏忽了 所以 我并不怀疑标准库的做法 只是对于初学者 同一时间最好只对一个类操作 我以我的定义为基础 重新完成了这段程序 我并不欣赏原位操作的多项式加法(+) PolyA+PolyB 然后B就嗖的一下没了 A就多了一堆(也可能少了一堆) 你作intJ+intK的时候怎么没见J和K有什么变化 与其这样 重载 + 还不如写成PolyA Add(PolyB)或者PolyAdd(PolyA PolyB)
一元多项式类定义与实现
#ifndef Polynomial_H#define Polynomial_H
#include List h class Term public: int coef; int exp; Term() : coef( ) exp( ) Term(int c int e) : coef(c) exp(e) Term(int c) : coef(c) exp( ) ;
class Polynomial : List<Term> public: void Input() cout << endl << 输入多项式的各项系数和指数 ; cout << endl << 注意 请按降序输入各项 输入系数 表示结束 << endl; int coef exp; for(int i = ; ; i++) cout << 第 << i << 项的系数 ; cin >> coef; if (coef) cout << 指数 ; cin >> exp; Term term(coef exp); Insert(term); else break; void Print() cout << endl; First(); if (!IsEmpty()) Term *p = Next(); cout << p >coef; if (p >exp) cout << x ; if (p >exp != ) cout << ^ << p >exp; while (Next() != NULL) p = Get(); if (p >coef > ) cout << + ; cout << p >coef; if (p >exp) cout << x ; if (p >exp != ) cout << ^ << p >exp; cout << endl;friend void PolyAdd (Polynomial &polyA Polynomial &polyB) Node<Term> *pA *pB; polyA First();polyB First(); pA = polyA pNext();pB = polyB pNext(); while (pA != NULL && pB !=NULL) if (pA >data exp == pB >data exp) pA >data coef = pA >data coef + pB >data coef; polyB Remove(); if (!pA >data coef) polyA Remove(); else polyA pNext(); else if (pA >data exp > pB >data exp) polyB pRemove(); polyA InsertBefore(pB); else if (pA >data exp < pB >data exp) polyA pNext(); pA = polyA pGet();pB = polyB pGet(); if (pA == NULL) polyA pGetPrior() >link = pB; polyB pGetPrior() >link = NULL; ;#endif
【说明】对于多项式 通常我们都是降序书写的 于是我就要求降序输入 但是对于做加法来说 确实升序的要方便一些 于是 实际上到了内部 就变成升序的了 对于输出格式(从C的时候我就不喜欢做这个) 尽量照顾习惯 但是当非常数项系数为 的时候还是会输出系数的 我实在不想把一个实际应用中根本拿不出台的输出函数搞的很复杂 为我编起来方便 输出变成了升序的 请多包含 测试程序就不给了 很简单 在续篇中 我将完成一元多项式 + - × = 的重载——为什么没有 ÷ 这种运算我拿笔算都不麻利 编起来就更闹心了 我还清楚的记得拿汇编写多字节除法程序时的痛苦 到了下一篇 你就可以这样写了a=b+c*d;a Print()
cha138/Article/program/sjjg/201311/22943相关参考