- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
后两个函数也可看作由double和int到复数的“数值转换”函数,定义它们是为了使用方便: Complex mkComplex(double r, double i) { Complex c; c.re = r; c.im = i; return c; } ? Complex d2Complex(double d) { Complex c; c.re = r; c.im = 0; return c; } ? Complex n2Complex(int n) { Complex c; c.re = r; c.im = 0; return c; } 加法函数的定义: Complex addComplex(Complex x, Complex y) { Complex c; c.re = x.re + y.re; c.im = x.im + y.im; return c; } 减法函数与此类似。乘法函数的算法复杂一点,根据数学定义也不难给出。 除法函数有个新问题:除数为0时该怎么办? 复数除法的数学定义是(c 和 d 都为 0 时出问题): C语言内部类型除0的规定是“其行为没有定义”,编程者自己负责。我们实现复数操作时有两种选择: 沿用C方式,要求用复数类的人保证不出现除0 检查除0的情况,提供动态信息并返回某个特殊值 采用第一种方式时可直接按公式定义函数。下面函数定义检查除0情况,输出错误信息并返回1的复数。 Complex divComplex(Complex x, Complex y) { Complex c; double den = y.re * y.re + y.im * y.im; ? if (den == 0.0) { fprintf(stderr,ComplexErr: div 0.\n); c.re = 1; c.im = 0; } else { c.re = (x.re*y.re + x.im*y.im) / den; c.im = (x.im*y.re - x.re*y.im) / den; } return c; } 为了使用方便,还可以定义复数的输出和函数。输出函数向某个流输出一个复数。实现这个函数前先要为复数确定一种输出形式,函数定义: void prtComplex(FILE *fp, Complex x) { fprintf(fp, (%f, %f), x.re, x.im); } 输入函数: int readComplex(FILE *fp, Complex *xp); xp的实参应是Complex地址。函数设计应参考标准库输入函数:实际完成复数输入时返回1,转换失败时返回0,遇文件结束出错误时返回EOF。IO函数最好统一设计,使prtComplex输出能由readComplex输入。 9.6 链接结构(自引用结构) 问题的提出(词频统计) 设要统计正文文件里各个单词出现的次数。 典型应用:语言学要统计单词出现频率,分析文献或计算机程序等都要做类似统计工作。 新情况:统计前不知道有多少不同的词,无法在编程时准备好统计中使用的完整数据结构。 可能方案:动态分配计数器数组,必要时调整大小(用realloc)。问题:新词逐个遇到,反复调整分配效率比较,而且需要使用很大的块,不够灵活。 如果词很多,能否找到足够大的存储块也是问题。 希望有一种能方便地动态变化的组织结构,满足被存储数据项动态增加/减少的需要。链接结构。 链接结构通过指针、结构(struct)和动态存储管理实现,其基本构件是自引用结构。自引用结构的对象分为两部分: 一个结构通过指针引用同类结构,多个结构通过指针建立联系。指向结构的指针称为链接,形成的复杂数据结构称为链接结构。 最简单的链接结构是线性链接形成的表,链接表。每个自引用结构有一个链接指针,一批结构一个链接到一个形成序列,如下图。 链接表就像链条,自引用结构是链节,表结点,结点间由指针连接形成整个结构。所有结点(结构)由动态分配创建。从指向表首结点的指针出发,沿链接可顺序访问表中各结点。该指针代表整个表。通常把最后结点的指针置空表示结束。 以自引用结构为基本构件可构造出许多复杂的数据结构。另一典型结构是二叉树,其中的每个结点有两个链接指针。下面是一个二叉树结构。《数据结构》课将进一步讨论这方面问题。 在C中定义和使用自引用结构 以词频统计为例。用链接表作为基本数据结构。 对应于词的相关信息包括词本身及其计数。为简单,假设词长不超过19个字符(若无此限,就要设法保存和处理任意长的
原创力文档


文档评论(0)