数据结构与算法基础——第02周-案例引入(2.2)

一 案例概述

  • 案例1——1元多项式的运算:实现两个多项式加、减、乘运算
  • 案例2 ——稀疏多项式
  • 案例3——图书管理系统

二 一元多项式的运算:实现两个多项式加、减、乘运算

Pn(x)=P0+P1X+P2X2+...+PnXn

线性表P=(P0,P1,P2,...Pn)(每一项的指数i隐含在其系数pi的序号中)

例如:P(x)=10+5x-4x2+3x3+2x4

用数组表示为:

指数(下标i) 0 1 2 3 4
系数p[i] 10 5 -4 3 2

Rn(x)=Pn(x)+Qm(x)用线性表表示为:R=(p0+q0,p1+q1,p2+q2,...pm+qm,pm+1,...pn)

三 稀疏多项式

3.1 什么是稀疏多项式

S(x)=1+3x10000+2x20000

将会造成存储空间,很大的浪费,怎么办?

3.2 多项式非零项的数组表示

A(x)=7+3x+9x8+5x17

下标i 0 1 2 3
系数a[i] 7 3 9 5
指数 0 1 8 17

B(x)=8x+22x7-9x8

下标i 0 1 2
系数a[i] 8 22 -9
指数 1 7 8
  • Pn(x)=p1xe1+p2xe2+...+pmxem可以转换为线性表P=((p1,e1),(p2,e2),...,(pm,em))
  • 线性表A=((7,0),(3,1),(9,8),(5,17)),线性表B=((8,1),(22,-7),(-9,8))

3.3 稀疏多项式的运算

1
2
线性表A=((7,0),(3,1),(9,8),(5,17))
线性表B=((8,1),(22,-7),(-9,8))

操作过程:

  • 创建一个新数组c
  • 分别从头遍历比较a和b的每一项
    • 指数相同,对应系数相加,若其和不为零,则在c中增加一个新项
    • 指数不同,则将指数较小的项复制到c中
  • 一个多项式已遍历完毕时,将另一个剩余项依次复制到c中即可(数组c多大何时呢?)

3.4 改变存储结构

存储结构

3.5 多项式相加

多项式相加

四 图书管理系统

4.1 图书管理系统介绍


需要进行操作

  • 查找、插入、删除、修改、排序、计数
  • 图书表抽象为线性表
  • 表中每本图书抽象线性表中数据元素

4.2 将数组转换为链表

五 总结

  • 线性表中数据元素的类型可以为简单类型,也可以为复杂类型
  • 许多实际应用问题所涉的基本操作有很大相似性,不应为每个具体应用单独编写一个程序
  • 从具体应用抽象出共性的逻辑结构和基本操作(抽象数据类型),然后实现其存储结构和基本操作