收藏 分享(赏)

数据结构与算法 (5).ppt

上传人:Facebook 文档编号:3536753 上传时间:2018-11-13 格式:PPT 页数:22 大小:191KB
下载 相关 举报
数据结构与算法 (5).ppt_第1页
第1页 / 共22页
数据结构与算法 (5).ppt_第2页
第2页 / 共22页
数据结构与算法 (5).ppt_第3页
第3页 / 共22页
数据结构与算法 (5).ppt_第4页
第4页 / 共22页
数据结构与算法 (5).ppt_第5页
第5页 / 共22页
点击查看更多>>
资源描述

1、第五章. 数组和广义表 (Chapter 5. Arrays and Generalized Lists ),5.1 数组的定义,数组和广义表都是数据元素为结构类型的一种特殊的线性表。,数组的每一个元素的结构都是相同的。,数组通常分为二维数组、三维数组和 n 维数组。,下面是二维数组的定义:,下面是多维数组的定义:,求每个给定下标的数据元素的存储地址:,5.2 数组的顺序存储,数组的顺序存储有两种存储方式:即按行优先(row major order)存储或按列优先(column major order )存储。,这就说明了多维数组是一种随机存取的存储结构。,5.3 矩阵压缩存储,矩阵是很多科学

2、与工程计算中常使用的数据结构。在实际应用中,很多矩阵存在大量零元素或重复元素,为节省存储空间,可对这类矩阵进行压缩存储。,特殊矩阵:,这类矩阵由于零元素或重复元素的分布很有规律,可以很容易地把矩阵压缩存储在一个一维数数组中。,稀疏矩阵:,这类矩阵非零元素很少,但它们的分布没有规律,因此在压缩存储时须同时存储非零元素的下标和值。可用三元组表(list of 3-tuples)来存储(行号,列号,值)。,如下三角矩阵有映射 k = i (i-1)/2+j (ij), Aij=Bk (ij), Aij=0 (ij):,#define MAXNUM 大于矩阵中非零元素个数的常数 typedef str

3、uct int i, j; elemtype e; triple; typedef struct triple dataMAXNUM+1 ;int mu, nu, tu; matrix;,稀疏矩阵还可用带行索引的二元组表、十字链表等表示。,最常用的一种算法是求矩阵的转置:,因三元组表是按行优先排序的,故需先确定转置后矩阵各行的元素个数,预留出位置再进行转置。,作 业9. 设有上三角矩阵(aij)nn ,将其上三角元素逐行存于数组B(1:m)中,使得Bk= aij,且k= f1(i)+ f2(j)+c。试推导函数 f1、f2 和常数项 c,其中1i,jn。 10. 设计一个算法,将数组 A(1:

4、n) 中的元素循环右移 k 位,要求只用一个元素的附加空间,元素移动或交换次数为O(n)。,5.4 广义表的定义,广义表又称列表,其每一个元素的结构都可能是不同的。,通常广义表记着 : LS = (d1, d2, d3,. , dn ),其中 D0 为某数据对象,di 可以是原子(atom),也可以是广义表,称为 LS 的子表(sublist)。,其中第一个元素 d1 称为表 LS 的表头(head),由余下元素组成的表 (d2, d3,. , dn ) 称为LS的表尾(tail)。广义表中括号的重数称为广义表的深度。,函数 Head 与函数 Tail 分别求广义表的表头和表尾。,函数 Dep

5、th 求广义表的深度。,如下列均为广义表:,1、 A 是一个空表,其长度为零;,2、 B 只有一个元素,其长度为一;,3、 C 有两个元素,其长度为二;,4、 D 有四个元素,其长度为四;,5、 E 有两个元素,其长度为二。,Head(A) = Tail(A) = ( ) Depth(A) = 1,Head(B) = a Tail(B) = ( ) Depth (B) = 1,Head(C) = a Tail(C) = ( ( a, b, c) ) Depth (C) = 2,Head(D) = ( ) Tail(D) = ( B,C, d ) Depth (D) = 3,Head(E) =

6、E Tail(E) = ( e ) Depth (D) = ,typedef enum ATOM, LIST elemtag; typedef struct node elemtag tag;union datatype atom; struct struct node *hp, *tp; ptr; ; * glist;,它有两种结点,原子用两个域,子表用三个域,其中hp 指向表头, tp 指向表尾:,第一种存储结构如下:,5.5 广义表的存储结构,typedef enum ATOM, LIST elemtag; typedef struct node elemtag tag;union da

7、tatype atom; struct node *hp; ;struct node *tp; * glist;,它也有两种结点,但原子和子表都用三个域,其中 hp 指向表头, tp 指向表尾:,第二种存储结构如下:,广义表可用来存储 m 元多项式:,将 m 元多项式先分解成主变元的多项式,则可将其看作一元多项式,而每个系数则是 m-1 元多项式;利用此法可将m-1 元多项式进一步分解,直至每个系数为常数。,5.6 广义表的递归算法,1、求广义表的深度,int Depth ( glist L ) if ( ! L ) return 1;if ( L-tag = ATOM ) return 0;

8、maxdep = 0; p = L;for ( ; p ; p = p-ptr.tp ) d = Depth( p-ptr.hp );if ( d maxdep ) maxdep = d;return maxdep + 1; ,2、复制广义表,void CopyGL ( glist L, glist ,3、建立广义表,void CreateGL ( glist ,void sever ( String ,作 业11. 求下列广义表运算的结果: 1、Head(a,b),(c,d) 2、Tail(a,b),(c,d) 3、HeadTail(a,b),(c,d) 4、TailHead(a,b),(c,d) 5、HeadTailHead (a,b),(c,d) 6、TailHeadTail (a,b),(c,d),12. 利用 Head 和 Tail 运算将下列广义表中的原子 c 取出来: 1、L1=(a,b, c,d) 2、L2=(a,b),(c,d) 3、L3=(a),(b), (c),(d) 4、L4=(a,(b),(c),(d) 5、L5=(a),(b),(c),d) 6、L6=(a),b),c),d) 7、L7=(a,(b,(c,(d) 8、L8=(a,(b,(c),d),

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 中等教育 > 小学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报