您的位置: 网站首页 > 程序开发 > 数据结构 > 第4章 串、数组和广义表 > 【4.13 本 章 小 结】

4.13 本 章 小 结

 

4.13 

本章的基本内容是:串类型的定义、各种存储结构及其基本运算的实现以及串的模式匹配算法,数组、稀疏矩阵的定义、各种存储结构及其基本运算的实现。

串是一种数据类型受到限制的特殊线性表,它规定表中的每一个元素类型只能为字符。一个串所包含字符的个数称为串的长度,长度为零的串称为空串。应注意的是空格也是合法的字符,只有空格的串称为空格串,不是空串。

串的存储结构主要有顺序存储结构和链式存储结构两种。顺序存储结构的缺点是不便于进行串的插入、删除运算。对于插入、删除运算较多的情况适合采用链式存储结构。

串的匹配运算是一个比较复杂的串操作,它就是判断某串是否是另一已知串的子串,如是其子串,则给出该串的起始点。该算法在文本编辑程序中经常用到,提出该问题的有效算法能大大提高编辑程序的响应性能。

4.14     

1选择题

1)串是一种特殊的线性表,其特殊性表现在     

A.可以顺序存储                                    B.数据元素是一个字符

C.可以链接存储                                    D.数据元素可以是多个字符

2)设有两个串PQ,求QP中首次出现的位置的操作称为     

A.连接                                                  B.模式匹配

C.求子串                                               D.求串长

3)设串S1="ABCEEFG"S2="PQRST",函数StringConcat(X,Y)返回XY的连接串,SubString(S,I,J)返回串S中序号I的字符开始的J个字符组成的子串,StringLength(5)返回串S的长度,则StringConcat(SubString(S1.2,StringLength(S2),Substring(S1,StringLength (S2),2))的结果串是     

ABCDEF                                              BBCDEFG

CBCDQRSTD                                       DBCDEFEF

4)数组通常具有两种基本操作是     

A.建立和删除                                       B.索引和修改

C.查找和修改                                        D.查找和索引

5)二维数组A[10..20,5..10]采用行序为主序方式存储,每个数据元素占4个存储单元,且A[10,5]的存储地址是1000,则A[18,9]的存储地址是     

A1208                                                  B1212

C1268                                                  D1364

6)三维数组A[0..4,0..5,0..6],采用行序为主序方式存储,每个数据元素占2个存储单元,且第一个元素的存储地址是120,则A[3,4,5]的存储地址是     

A438                                                    B358

C360                                                    D362

7)二维数组A中,每个元素的长度为4个字节,行下标从04,列下表从05A按行优先存储元素A[3,5]的地址与A按列优先存储时元素      的地址相同。

AA[2,4]                                               BA[3,4]

CA[3,5]                                                DA[4,4]

8)对矩阵压缩存储是为了     

A.方便运算                                           B.节省时间

C.方便存储                                         D.提高运算速度

9)稀疏矩阵的压缩存储方法通常有两种,即     

A.二元数组和三元数组                         B.三元数组和散列

C.三元组和十字链表                           D.散列和十字链表

2填空题

1)两个串相等的充分必要条件是              

2)空串是               ,其长度等于              

3)空格串是                    ,其长度等于              

4)广义表的深度是指               

5)已知二维数组A[m][n]采用行序为主方式存储,每个元素占k个存储单元,并且第一个元素的存储地址是LOC(A[0][0]),则A[i][j]的地址是              

6)二维数组A[10][20]采用列序为主方式存储,每个元素占一个存储单元,并且A[0][0]的存储地址是200,则A[6][10]的地址是              

7)二维数组A[10..20][5..20]采用行序为主方式存储,每个元素占4个存储单元,并且A[10][5]的存储地址是1000,则A[18][9]的地址是              

8有一个10阶对称矩阵A,采用压缩存储方式(以行为主存储,且LOC(A[0][0])=1),A[8][5]的地址是              

3问答题

1)若串s="software",其子串的数目是多少?

2)设串S的长度为n,其中的字符各不相同,求S中互异的非空且不同于S本身的子串的个数。

3)设模式串T="abcaacabaca",请给出它的next函数值。

4按行优先顺序和按列优先顺序列出四维数组A[2][2][2][2]所有元素在内存中的存储次序。

5)画出广义表(a,(b,(c,())),(d,e))的存储结构图。

6)已知广义表(a,(b,(a,b)),((a,b),(a,b))),试完成以下要求:

画出该广义表的存储结构图。

计算该广义表的表头和表尾。

计算该广义表的深度。

7)已知广义表A=(((a)),(b),c,(a),(((d,e)))),画出它的存储结构图,给出表的长度与深度,并用求表头、表尾的方式求出原子e

4上机操作题

1)采用顺序结构存储串,设计一个算法strcmp(s,t)实现串比较运算,串比较以词典方式进行,当s>t时返回1s=t时返回0s小于t时返回-1

2)设计一个算法判断顺序存放的字符串是否为回文(即正读与倒读相同)。

3)在顺序串s中,将第i个字符开始的连续j个字符构成的子串用串t替换,产生新的串,请编写一个实现上述功能的算法。

4)设串采用顺序存储表示,请编写一个算法,求子串T在主串S中出现的次数。

5)编写程序段,将An×n的上三角形,以列为主,存储于一个B(1n(n+1)/2)的数组中。再编写程序段,从B数组中取出A(i, j)

6设计一个算法MaxAtom(*g),求出一个广义表g中最大的原子。例如,MaxAtom(a, (b),d,c)返回的结果为d

7)设计一个算法,利用head()tail()算法将一个广义表逆置,例如,广义表    (b,(b,b,c), ((a,b),x))逆置后的结果为((x,(b,a)),(c,b,b),b)