知识大全 数据结构学习讲座(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相关参考
数据结构学习讲座(C++)单链表(1) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!单链表()&n
数据结构学习讲座(C++)双向链表 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!双向链表 
销毁单链表 单链表被构造使用完后由于其结点均为动态分配的内存空间所以必须要销毁以释放空间否则会造成申请的内存不能释放单链表的销毁操作是创建操作的逆运算由于要修改单链表的头指针的指针变量所以要将头
图双向链表中的结点删除 双向链表的结束条件和单链表相同双向循环链表的结束条件和单向循环链表的结束条件相同 静态链表 根据上节单链表的知识用单链表表示线性表时其结点空间是在运行时根据需要动态分
单链表基本运算的实现 创建空单链表 链表与顺序表不同它是一种动态管理的存储结构链表中的每个结点占用的存储空间不是预先分配而是运行时系统根据需求生成的因此建立空单链表就是建立一个带头结点的空表该
求表长 由于单链表采用离散的存储方式并且没有显示表长的存储信息因此要求出单链表的表长必须将单链表遍历一遍 算法思路设一个移动指针p和计数器count初始化后p指向头结点p后移一个结点count
循环链表 对于单链表而言最后一个结点的指针域是空指针如果将该链表头指针置入该指针域则使得链表头尾结点相连就构成了循环单链表(也称单循环链表)如图所示 > 图带头结点的单循环链表 对循环单链
单链表的运算 建立单链表 假设线性表中结点的数据类型是字符我们逐个输入这些字符型的结点并以换行符\\n为输入条件结束标志符动态地建立单链表 的常用方法有如下两种 ()头插法建表 ①算法思
一单链表目录单链表反转找出单链表的倒数第个元素找出单链表的中间元素删除无头单链表的一个节点两个不交叉的有序链表的合并有个二级单链表其中每个元素都含有一个指向一个单链表的指针写程序把这个二级链表称一级单
双向链表结点的定义如下 typedefstructnode DataTypedata; structnode*prior*next; DuNode*DLinkList; 和单链表类似双向