数据结构之线性表().pptVIP

  • 1
  • 0
  • 约3.5千字
  • 约 10页
  • 2017-12-13 发布于江苏
  • 举报
数据结构之线性表()

* * 2.1 线性表的类型定义 2.3 线性表类型的实现 ? 链式映象 2.4 一元多项式的表示 2.2 线性表类型的实现 ? 顺序映象 一、单链表 二、结点和单链表的 C 语言描述 三、线性表的操作在单链表中的实现 五、带头尾指针结点的线性链表类型 六、其它形式的链表 四、顺序/链表存储的时间复杂度比较 1. 双向链表 六、其它形式的链表 2. 循环链表 3. 双向循环链表 1. 双向链表 typedef struct DuLNode { ElemType data; // 数据域 struct DuLNode *next; // 指向后继的指针域 struct DuLNode *prior; // 指向前驱的指针域 } DuLNode, *DuLinkList; 双向链表的操作特点: “查询” 和单链表相同 “插入” 和“删除”时需要同时修改两个方向上的指针。 ai-1 ai e s-next = p-next; s-next-prior = s; p s ai-1 ai 插入 p-next = s; s-prior = p; ai-1 删除 ai ai+1 p-next = p-next-next; p-next-prior = p; p ai-1 最后一个结点的指针域的指针又指回第一个结点的链表 2. 循环链表 a1 a2 … ... an 和单链表的差别仅在于,判别链表中最后一个结点的条件不再是“后继是否为空”,而是“后继是否为头结点”。 3. 双向循环链表 空表 非空表 a1 a2 … ... an 2.4 一元多项式的表示 问题: 如何在计算机中实现一元多项式的表示,存储,基本操作和应用 在计算机中,可以用一个线性表来表示: P = ( p0, p1, …,pn ) 一元多项式 假设Qm(x)是一个m次多项式,则也可以用一个线性表来表示: Q = (q0, q1, …,qm) 如果mn,则Rm(x) =Pn(x) + Qm(x)为: R = (p0+q0, p1+q1,…,pm+qm, pm+1,…,+ pn ) 但是对于形如 S(x) = 1 + 3x10000 – 2x20000 的多项式,如果用上述表示方法,则 S = ( 1,0,…,0,3,0,…,0, -2 ) 20001个 一般情况下的一元稀疏多项式可写成 Pn(x) = p1xe1 + p2xe2 + ┄ + pmxem 其中:pi 是指数为ei 的项的非零系数, 0≤ e1 e2 ┄ em = n (p1, e1), (p2, e2), ┄, (pm,em) ( ) 数据元素包含两个数据项的线性表。 P999(x) = 7x3 - 2x12 - 8x999 例如: 可用线性表 ( (7, 3), (-2, 12), (-8, 999) ) 表示 ADT Polynomial { 数据对象: 数据关系: 一元多项式抽象数据类型的定义: D={ ai | ai ∈TermSet, i=1,2,...,m, m≥0 TermSet 中的每个元素包含一个 表示系数的实数和表示指数的整数 } R1={ ai-1 ,ai |ai-1 ,ai∈D, i=2,...,n 且ai-1中的指数值<ai中的指数值 } CreatPolyn ( P, m ) DestroyPolyn ( P ) PrintPolyn ( P ) 基本操作: 操作结果:输入 m 项的系数和指数, 建立一元多项式 P。 初始条件:一元多项式 P 已存在。 操作结果:销毁一元多项式 P。 初始条件:一元多项式 P 已存在。 操作结果:打印输出一元多项式 P。 PolynLength( P ) AddPolyn ( Pa, Pb ) SubtractPolyn ( Pa, Pb ) … …

文档评论(0)

1亿VIP精品文档

相关文档