数组串和广义表学习教案.pptx
《数组串和广义表学习教案.pptx》由会员分享,可在线阅读,更多相关《数组串和广义表学习教案.pptx(59页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、会计学1数组串和广义数组串和广义(gungy)表表第一页,共59页。4.1 数组数组 数组(array)表示n(n1)个具有相同数据类型的数据元素(yun s)的有序集合。第2页/共59页第二页,共59页。二维数组二维数组n n数组中数据元素由一个数据值和一个(组)下标确定。下标是数组中元素相互区分的标识。使用一个下标区分其中(qzhng)元素的数组称为一维数组。使用两个以上下标的数组称为多维数组。常用的多维数组是二维数组,通常称为矩阵。n nA3*4的阵列形式表示:第3页/共59页第三页,共59页。矩阵矩阵(j zhn)的顺序表示与实现的顺序表示与实现n n行序优先(yuxin)存储:p列序
2、优先列序优先(yuxin)存储:存储:Loc(aij)=Loc(a00)+(i*n+j)*length Loc(aij)=Loc(a00)+(j*m+i)*length第4页/共59页第四页,共59页。特殊矩阵压缩特殊矩阵压缩(y su)存储存储 1.对称(duchn)矩阵n阶方阵,沿主对角线对称(duchn)位置上的元素相等,即aij=aji。主对角线:由元素aii组成的数列 如右图的对称矩阵如右图的对称矩阵(j zhn)按行序存储下三按行序存储下三角的元素,映射到一维数组中去,其对应的一角的元素,映射到一维数组中去,其对应的一维数组下标如下图所示:维数组下标如下图所示:第5页/共59页第五
3、页,共59页。特殊矩阵特殊矩阵(j zhn)压缩存储压缩存储 1.对称矩阵(j zhn)2对称矩阵(j zhn)中任意元素与其对应的一维数组下标k的计算公式:第6页/共59页第六页,共59页。特殊矩阵压缩特殊矩阵压缩(y su)存储存储2 2.三角矩阵(j zhn)n阶方阵,沿主对角线以上的元素全为零。上三角矩阵(j zhn)、下三角矩阵(j zhn)如右图为下三角矩阵。如右图为下三角矩阵。按行序压缩存储下三角矩阵,映射到一维按行序压缩存储下三角矩阵,映射到一维数组中去,其对应数组中去,其对应(duyng)的一维数组的一维数组下标如下图所示:下标如下图所示:第7页/共59页第七页,共59页。特
4、殊矩阵特殊矩阵(j zhn)压缩存储压缩存储2 2.三角矩阵2按行序压缩存储下三角矩阵,元素下标(xi bio)(i,j)与对应的一维数组下标(xi bio)k映射公式为:k=(i+1)*i/2+j (i=j)第8页/共59页第八页,共59页。特殊矩阵特殊矩阵(j zhn)压缩存储压缩存储3 3.3.对角矩阵对角矩阵n n阶方阵,沿主对角线上下若干对角线上有非零元素阶方阵,沿主对角线上下若干对角线上有非零元素(yun s)(yun s),其他全为零。,其他全为零。带宽:主对角线上下各带宽:主对角线上下各d d条对角线上有非零元,则共有条对角线上有非零元,则共有2d+12d+1条对角线有非零元,
5、称条对角线有非零元,称为带宽。为带宽。如右图为如右图为3对角矩阵。对角矩阵。按行序压缩按行序压缩(y su)存储存储3对角矩阵,映射到一维数对角矩阵,映射到一维数组中去,其对应的一维数组下标如下图所示:组中去,其对应的一维数组下标如下图所示:第9页/共59页第九页,共59页。特殊矩阵特殊矩阵(j zhn)压缩存储压缩存储3 3.对角矩阵2按行序压缩(y su)存储三对角矩阵,元素下标(i,j)与对应的一维数组下标k映射公式为:k=3*i-1+(j-i+1)=2*i+j 第10页/共59页第十页,共59页。稀疏矩阵稀疏矩阵(j zhn)压缩存储压缩存储 n n稀疏矩阵是指矩阵中的非零元很少,大部
6、分是零元素(yun s),且非零元的分布没有规律。如下矩阵:第11页/共59页第十一页,共59页。稀疏矩阵稀疏矩阵(j zhn)压缩存储压缩存储1.三元组表表示法在存储稀疏(xsh)矩阵中的非零元时,为了描述一个非零元素,需要元素本身的值和行标、列标三方面的信息,这些信息的组合就称为三元组。第12页/共59页第十二页,共59页。1.三元组表表示法三元组表表示法2n n用用C C语言定义三元组表的结构类型语言定义三元组表的结构类型(lixng)(lixng)如下:如下:00 typedef int DataType;/*假设稀疏假设稀疏(xsh)矩阵的元素类型为整型矩阵的元素类型为整型 */01
7、#define MAXSIZE 100 /*非零元个数的最大值非零元个数的最大值 */02 typedef struct /*定义三元组结点类型定义三元组结点类型 */03 04 int row,col;/*非零元所在的行下标非零元所在的行下标,列下标列下标*/05 DataType value;/*非零元素值非零元素值 */06 Triple;07 typedef struct /*定义三元组表结构类型定义三元组表结构类型 SMatrix*/08 09 Triple dataMAXSIZE+1;/*非零元组成的三元组表非零元组成的三元组表 */10 int mu,nu,tu;/*稀疏稀疏(x
8、sh)矩阵的行数、列数和非零元个数矩阵的行数、列数和非零元个数 */11 SMatrix;第13页/共59页第十三页,共59页。1.三元组表表示法三元组表表示法3(1 1)建立稀疏)建立稀疏(xsh)(xsh)矩阵的三元组表矩阵的三元组表1 1算法算法4-1 4-1 建立并输出稀疏建立并输出稀疏(xsh)(xsh)矩阵的三元组表矩阵的三元组表 00 SMatrix CreateSMatrix()/*00 SMatrix CreateSMatrix()/*创建稀疏创建稀疏(xsh)(xsh)矩阵矩阵M*/M*/01 01 02 SMatrix M;02 SMatrix M;0303 int i;
9、int i;0404 printf(n printf(n请输入矩阵的行数:请输入矩阵的行数:););0505 scanf(%d,&M.mu);scanf(%d,&M.mu);0606 printf(n printf(n请输入矩阵的列数:请输入矩阵的列数:););0707 scanf(%d,&M.nu);scanf(%d,&M.nu);0808 printf(n printf(n请输入矩阵的非零元素个数:请输入矩阵的非零元素个数:););0909 scanf(%d,&M.tu);scanf(%d,&M.tu);10 for(i=0;i M.tu;i+)10 for(i=0;i 0)08 09 k
10、=0;10 for(i=0;iM.nu;i+)/*M有有nu列,要扫描列,要扫描nu趟趟*/11 for(j=0;j0)10 11 for(j=0;jM.nu;j+)/*设设rowsize的初值全为的初值全为0*/12 rowsizej=0;13 for(i=0;iM.tu;i+)/*求求M中每一列非零元素个数中每一列非零元素个数*/14 15 j=M.datai.col;16 rowsizej=rowsizej+1;17 18 printf(nrowsize:);19 for(i=0;iM.nu;i+)/*打印输出打印输出rowsize变量变量*/20 printf(%d ,rowsizei
11、);21 printf(n);第19页/共59页第十九页,共59页。算法算法算法算法4-3 4-3 稀疏稀疏稀疏稀疏(xsh)(xsh)矩阵的快速转置算法矩阵的快速转置算法矩阵的快速转置算法矩阵的快速转置算法2 222 rowstart0=0;23 for(j=1;jM.nu;j+)/*求第求第j列中第一个非零元在列中第一个非零元在 T中的位置中的位置*/24 rowstartj=rowstartj-1+rowsizej-1;25 printf(nrowstart:);26 for(i=0;iM.nu;i+)/*打印输出打印输出rowstart变量变量(binling)*/27 printf(
12、%d ,rowstarti);28 printf(n);29 for(i=0;iM.tu;i+)30 31 j=M.datai.col;/*取得三元组的列值取得三元组的列值 */32 k=rowstartj;/*取得三元组在取得三元组在 T中的位置中的位置*/33 T.datak.row=M.datai.col;34 T.datak.col=M.datai.row;35 T.datak.value=M.datai.value;36 rowstartj=rowstartj+1;37 38 39 return T;40 第20页/共59页第二十页,共59页。稀疏矩阵稀疏矩阵(j zhn)压缩压缩存
13、储存储22.2.十字链表法十字链表法当矩阵的非零元个数和位置在操作过程中变化较大时,就不宜采用三元组表来表示,当矩阵的非零元个数和位置在操作过程中变化较大时,就不宜采用三元组表来表示,对此种类型矩阵,采用链式存储表示三元组的线性表更为合适。对此种类型矩阵,采用链式存储表示三元组的线性表更为合适。为了为了(wi le)(wi le)使用链表存储稀疏矩阵,需要分别建立非零元素结点、行使用链表存储稀疏矩阵,需要分别建立非零元素结点、行/列链表头结点列链表头结点和整个链表头结点。和整个链表头结点。第21页/共59页第二十一页,共59页。2.2.十字十字十字十字(sh z)(sh z)链表法链表法链表法
14、链表法2 2非零元素结点C语言定义如下:00 typedef int DataType;/*假设稀疏矩阵的元素类型(lixng)为整型*/01 struct node /*定义十字链表结点结构*/02 03 int row,col;/*非零元所在的行下标,列下标*/04 DataType value;/*非零元素值*/05 struct node*down;/*定义down域指向同一列中下一个非零元地址*/06 struct node*right;/*定义right域指向同一行中下一个非零元地址*/07 ;08 typedef struct node TripleNode;/*定义十字链表结点
15、类型(lixng)*/第22页/共59页第二十二页,共59页。2.2.十字十字十字十字(sh z)(sh z)链表法链表法链表法链表法3 3十字链表头结点C语言定义如下(rxi):00 struct node1 /*定义十字链表结点结构*/01 02 int mu,nu,tu;/*稀疏矩阵的行数、列数和非零元个数*/03 TripleNode*head;/*定义head域指向行列表头结点向量*/04 ;05 typedef struct node1 Triple;/*定义十字链表类型*/建立稀疏矩阵的十字链表程序见节算法4-4第23页/共59页第二十三页,共59页。2.2.十字十字十字十字(s
16、h z)(sh z)链表法链表法链表法链表法4 4一个一个(y(y )十字链表实例:十字链表实例:第24页/共59页第二十四页,共59页。4.2 串串串及相关概念 串(string):是由零个或多个字符组成的有限序列。S=a0a1a2an-1 (n 0)串名:大写字母S为串名 串值:引号引起来的字符序列 长度:n表示串值中的字符个数,称为长度 空串:当n=0时,称为空串 空格串:由一个或多个空格组成的串 子串与主串:串中任意(rny)连续的字符组成的子序列称为该串的子串。包含子串的串相应地称为主串。位置:字符在字符串中首次出现的位置 相等:两个串的长度相等且对应位置上的字符都一一相等 第25页
17、/共59页第二十五页,共59页。串的基本操作串的基本操作n n串的抽象数据类型定义串的抽象数据类型定义(dngy)(dngy)如下:如下:ADT String is数据对象:数据对象:D=ai|ai CharacterSet,i=0,1,2,n-1,n0 数据关系:数据关系:R=|ai-1,ai D,i=1,2,n-1基本操作:基本操作:(1)StrAssign(String T,String chars)把把chars赋为赋为T的值,的值,chars是字符串常量是字符串常量(chngling)。(2)StrCopy(String T,String S)将串将串S复制到串复制到串T中。中。(3
18、)StrEmpty(String S)判断串判断串S是否为空串,并返回是否为空串,并返回 TRUE或或FALSE的标志。的标志。(4)StrCompare(String S,String T)判断两个字符串是否相等,若判断两个字符串是否相等,若 ST,则返回值,则返回值 0;若;若S=T,则返回值,则返回值=0;若;若ST,则返回值,则返回值 0。(5)int StrLength(String S)返回字符串返回字符串 S的元素个数,称为串的长度。的元素个数,称为串的长度。ADT String第26页/共59页第二十六页,共59页。串的存储串的存储(cn ch)结构结构1.1.串的定长顺序存储
19、结构串的定长顺序存储结构串的定长顺序存储表示,也称为静态存储分配的顺序串。它是用一组地址串的定长顺序存储表示,也称为静态存储分配的顺序串。它是用一组地址连续的存储单元存储串值的字符序列。所谓定长顺序存储结构,是直连续的存储单元存储串值的字符序列。所谓定长顺序存储结构,是直接使用定长的字符数组来定义。接使用定长的字符数组来定义。用用C C语言定义串的结构类型如下:语言定义串的结构类型如下:typedef struct typedef struct char dataMAXSTRLEN;/*char dataMAXSTRLEN;/*定义定义datadata域为定长的顺序存储结构域为定长的顺序存储结
20、构*/*/int len;/*int len;/*定义定义lenlen域为串的长度域为串的长度*/*/String;/*String;/*定义串的结构类型为定义串的结构类型为String*/String*/串的定长顺序存储结构,优点是可以实现直接存取,定位方便,可以很方串的定长顺序存储结构,优点是可以实现直接存取,定位方便,可以很方便地求取子串;缺点便地求取子串;缺点(qudi(qudi n)n)是插入、删除、置换等操作困难,需要是插入、删除、置换等操作困难,需要移动大量的字符。移动大量的字符。第27页/共59页第二十七页,共59页。串的存储串的存储(cn ch)结构结构22.串的链式存储(c
21、n ch)结构串的单链表存储(cn ch)表示p结点大小为结点大小为4的块链存储的块链存储(cn ch)表示表示 最后结点不满可以用最后结点不满可以用“#”号补上;号补上;也可设置尾指针,方便联接操作,注意也可设置尾指针,方便联接操作,注意“#”号的处理。号的处理。第28页/共59页第二十八页,共59页。2 2、串的链式存储、串的链式存储、串的链式存储、串的链式存储(cn ch(cn ch)结构结构结构结构2 2重点:设定结点的大小,小则操作方便,但系统重点:设定结点的大小,小则操作方便,但系统 开销大;大节省开销大;大节省(jishng)(jishng)空间,操作不方便。空间,操作不方便。存
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数组 广义 学习 教案
限制150内