版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数组和广义表
数组是大多数高级语言已实现的数据类型。
广义表是结构复杂、使用前景极其看好的数据结构。5.1数组的类型定义ADTArray{
数据对象:
D={aj1,j2,...,,ji,jn|ji=0,...,bi-1,i=1,2,..,n}
数据关系:
R={R1,R2,...,Rn}
Ri={<aj1,...ji,...jn
,aj1,...ji
+1,...jn
>|0
jk
bk-1,1
k
n且k
i,0
ji
bi-2,i=2,...,n}
}ADTArray基本操作:二维数组的定义:数据对象:
D={aij|0≤i≤b1-1,0≤j≤b2-1}数据关系:
R={ROW,COL}
ROW={<ai,j,ai+1,j>|0≤i≤b1-2,0≤j≤b2-1}
COL={<ai,j,ai,j+1>|0≤i≤b1-1,0≤j≤b2-2}5.2数组的顺序表示和实现
类型特点:1)只有引用型操作,没有加工型操作;2)数组是多维的结构,而存储空间是
一个一维的结构。
有两种顺序映象的方式:1)以行序为主序(低下标优先);2)以列序为主序(高下标优先);ai,jai,j例如:
称为基地址或基址。以“行序为主序”的存储映象二维数组A中任一元素ai,j
的存储位置
LOC(i,j)=LOC(0,0)+(b2×i+j)×a0,1a0,0a0,2a1,0a1,1a1,2a0,1a0,0a0,2a1,0a1,1a1,2L
L
b2
推广到一般情况,可得到
n维数组数据元素存储位置的映象关系
称为
n维数组的映象函数。数组元素的存储位置是其下标的线性函数其中
cn=L,ci-1=bi
×ci,1<i
n。LOC(j1,j2,...,jn)=LOC(0,0,...,0)+∑ciji
i=1n假设
m行
n列的矩阵含
t个非零元素,则称为稀疏因子通常认为
0.05
的矩阵为稀疏矩阵5.3稀疏矩阵的压缩存储何谓稀疏矩阵?1)尽可能少存或不存零值元素;解决问题的原则:2)尽可能减少没有实际意义的运算;3)操作方便;即:
能尽可能快地找到与
下标值(i,j)对应的元素;
能尽可能快地找到同
一行或同一列的非零值元素;随机稀疏矩阵的压缩存储方法:一、三元组顺序表二、行逻辑联接的顺序表三、十字链表
#defineMAXSIZE12500
typedefstruct{
inti,j;//该非零元的行下标和列下标
ElemTypee;
//该非零元的值
}
Triple;//三元组类型一、三元组顺序表typedefstruct{
Tripledata[MAXSIZE+1];
intmu,nu,tu;}TSMatrix;//稀疏矩阵类型121415-522-73136342812345原稀疏矩阵三元组表示的稀疏矩阵
三元组表示的稀疏矩阵节省了空间,便于实现矩阵运算吗?如何求转置矩阵?
首先应该确定每一列的非零元个数,然后求每一列第一非零元在三元组中的位置。
col12345Num[col]12011Cpot[col]12445
cpot[1]=1;for(col=2;col<=M.nu;++col)
cpot[col]=cpot[col-1]+num[col-1];StatusFastTransposeSMatrix(TSMatrixM,TSMatrix&T){T.mu=M.nu;T.nu=M.mu;T.tu=M.tu;
if(T.tu)
{
for(col=1;col<=M.nu;++col)num[col]=0;
for(t=1;t<=M.tu;++t)++num[M.data[t].j];
cpot[1]=1;
for(col=2;col<=M.nu;++col)
cpot[col]=cpot[col-1]+num[col-1];
for(p=1;p<=M.tu;++p){}
}//if
returnOK;}//FastTransposeSMatrix
转置矩阵元素Col=M.data[p].j;q=cpot[col];T.data[q].i=M.data[p].j;T.data[q].j=M.data[p].i;T.data[q].e=M.data[p].e;++cpot[col];
分析算法FastTransposeSMatrix的时间复杂度:时间复杂度为:O(M.nu+M.tu)for
(col=1;col<=M.nu;++col)…
…for
(t=1;t<=M.tu;++t)…
…for(col=2;col<=M.nu;++col)……for
(p=1;p<=M.tu;++p)…
…
#defineMAXMN500typedefstruct{Tripledata[MAXSIZE+1];
intrpos[MAXMN+1];
intmu,nu,tu;}RLSMatrix;//行逻辑链接顺序表类型
修改前述的稀疏矩阵的结构定义,增加一个数据成员rpos(各行第一非零元的位置),其值在稀疏矩阵的初始化函数中确定。例如:给定一组下标,求矩阵的元素值ElemTypevalue(RLSMatrixM,intr,intc){
p=M.rpos[r];
while(M.data[p].i==r&&M.data[p].j<c)
p++;
if(M.data[p].i==r&&M.data[p].j==c)
returnM.data[p].e;
elsereturn0;}//value行逻辑联接的顺序表的Java设计方案讨论TripleUnitinti,j,eTripleUnit(i,j,e)TripleUnit()MatrixTripleintmu,nu,tu;TripleUnit[]elementint[]numMatrixTriple(…)addTripleUnit(…)toSring()value(..)int[]rposcreateMatrixTriple(.)三、
十字链表M.cheadM.rhead30050-100200011314522-1312^^^^^^^5.4广义表的类型定义ADTGlist{
数据对象:D={ei|i=1,2,..,n;n≥0;
ei∈AtomSet
或
ei∈GList,
AtomSet为某个数据对象
}
数据关系:
R={<ei-1,ei>|ei-1,ei∈D,2≤i≤n}}ADTGlist基本操作:北京亚洲足球邀请赛(日本,韩国,中国,朝鲜)(日本,韩国,(申花,实德,现代),())在现实中:广义表是递归定义的线性结构,LS=(
1,
2,
,
n)其中:
i
或为原子
或为广义表例如:A=()F=(d,(e))D=((a,(b,c)),F)C=(A,D,F)B=(a,B)=(a,(a,(a,
,)))广义表
LS=(
1,
2,…,
n)的结构特点:1)广义表中的数据元素有相对次序;2)广义表的长度定义为最外层包含元素个数;3)广义表的深度定义为所含括弧的重数;
注意:“原子”的深度为
0
;
“空表”的深度为
1
。4)广义表可以共享;5)广义表可以是一个递归的表;
递归表的深度是无穷值,长度是有限值。5.5
广义表的表示方法通常采用头、尾指针的链表结构表结点:原子结点:tag=0datatag=1hptp1)表头、表尾分析法:构造存储结构的两种分析方法:若表头为原子,则为空表
ls=NIL非空表
lstag=1指向表头的指针指向表尾的指针tag=0data否则,依次类推。Java的引用L=(a,(x,y),((x)))a(x,y)(
)
1LL=()0a
1
1
1
10x
()x
1
10x0y2)子表分析法:若子表为原子,则为空表
ls=NIL非空表1指向子表1
的指针tag=0data否则,依次类推。1指向子表2
的指针1指向子表n
的指针ls…
5.6广义表操作的递归函数递归函数
一个含直接或间接调用本函数语句的函数被称之为递归函数,它必须满足以下两个条件:1)在每一次调用自己时,必须是(在某种意义上)更接近于解;2)必须有一个终止处理或计算的准则。广义表从结构上可以分解成广义表=表头+表尾或者广义表=
子表1+子表2+···+子表n
因此常利用分治法求解之。算法设计中的关键问题是,如何将k个子问题的解组合成原问题的解。广义表的头尾链表存储表示:typedef
enum{ATOM,LIST}ElemTag;
//ATOM==0:原子,LIST==1:子表typedefstructGLNode{ElemTagtag;//标志域
union{AtomTypeatom;//原子结点的数据域
struct{structGLNode*hp,*tp;}ptr;
};}*GListtag=1
hp
tpptr表结点广义表的深度=Max{子表的深度}+1例一求广义表的深度可以直接求解的两种简单情况为:
空表的深度
=1
原子的深度
=0
将广义表分解成
n个子表,分别(递归)求得每个子表的深度,
int
GlistDepth(GlistL){
//返回指针L所指的广义表的深度
for(max=0,
pp=L;pp;pp=pp->ptr.tp){dep=GlistDepth(pp->ptr.hp);if(dep>max)max=dep;
}
returnmax+1;}//GlistDepthif(!L
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广东省揭阳市一中等三校2024-2025学年高考物理试题二轮专题突破卷含解析
- 广东省揭阳市惠来县2025届初三第十七次模拟考试英语试题含答案
- 广东省广州市中学大附中2025届初三第二次质量检测试题数学试题含解析
- 项目管理人员年度安全培训考试题及答案 全面
- 班组三级安全培训考试题及参考答案一套
- 项目管理人员年度安全培训考试题附完整答案(考点梳理)
- 项目安全培训考试题带答案(培优)
- 建筑装修工程中的安全防护与管理
- 手机短视频拍摄与剪辑(微课版) 课件全套 张艳 第1-9章 数字媒体技术概述-手机摄影摄像后期处理
- 广东省广州市天河达标名校2025届初三第二学期第三次教学质量检测试题生物试题含解析
- 中医辨证胃痛胃脘痛
- 幼儿园安全教育课件:《讨人厌的流感》
- 名医专家简介
- 喷淋系统安装施工方案
- 路由交换技术之路由表介绍课件
- 幼儿园大班绘本《小熊不刷牙》 优质课件
- 起动机拆装与检修
- 小学语文-《秋天的雨》教学课件设计
- 2024年10月自考00054管理学原理押题及答案汇总
- 2022年林权确权工作方案
- 邵阳学院农林生态学院实验耗材报价表
评论
0/150
提交评论