第四章串和数组习题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第四章串和数组
一.选择题
1.串是一种特殊的线性表,其特殊性体现在()
A.可以顺序存储B.数据元素是一个字符
C.可以链式存储D.数据元素可以是多个字符
2.串的长度是()
A.串中不同字母的个数B.串中不同字符的个数
C.串中所含字符的个数,且大于0 D.串中所含字符个数
3.若串S=”software”,其子串数目是()
A.8 B.37 C.36 D.9
4.数组A[0..5,0..6]的每个元素占5个单元,将其按列优先次序存储在起始地址为1000的连续内存单元中,则元素A[5][5]的地址为()
A.1175 B.1180 C.1205 D.1210
5.对矩阵压缩存储是为了()
A.方便运算B.节省存储空间C.方便存储D.提高运算速度
6.一个n 阶对称矩阵,如果采用压缩存储方式,则容量为()
A.n2B.n2/2 C.n(n+1)/2 D.(n+1)2/2
7.对稀疏矩阵采用压缩存储,其缺点之一是()
A.无法判断矩阵有多少行多少列B.无法根据行列号查找某个矩阵元素
C.无法根据行列号计算矩阵元素的存储地址D.使矩阵元素之间的逻辑关系更加复杂二.填空
1.设串s1=”I am a student”,则串长为()
2.设有两个串p和q,其中q是p的子串,求子串q 在p中首次出现位置的算法称为()3.一维数组的逻辑结构是(),存储结构是();对于二维或多维数组,分为按()和()两种不同的存储结构。
4.数组A[1..10,-2..6,2..8]以行优先顺序存储,设第一个元素的首地址为100,每个元素占3个单元的存储空间,则元素A[5][0][7]的存储地址为()
5.三维数组R[C1..D1,C2..D2,C3..D3]共含有()个元素。
三、算法设计
1.编写下列算法(假定下面所用的串均采用顺序存储方式,参数c、c1和c2均为字符型):(1)将串S中所有其值为c1的字符换成c2的字符。
(2)将串S中所有字符逆序
(3)从串S中删除其值等于c的所有字符
(4)从串S中第index个字符起求出首次与字符串S1相同的子串的起始位置
(5)从串S中删除重第i个字符起的j 个字符
(6)从串S中删除所有与串S1相同的子串(允许调用第(4)题和第(5)题的算法)2.设计程序,计算串str中每一个字符出现的次数。
3.采用顺序结构存储串,编写一个算法计算制定子串在一个字符串中出现的次数,如果该子串不出现则为0。
4.如果矩阵A中存在这样一个元素A[i][j]满足条件:A[i][j]是第i行中值最小的元素,且又是第j 列中值最大的元素,则称为该矩阵的一个马鞍点。编写一个算法计算出m×n的矩阵A的所有马鞍点。
5.编写一个算法,计算一个三元组表表示的稀疏矩阵的对角线元素之和。
6.系数矩阵只存放其非零元素的行号、列号和数值,用一维数组顺序存放之,行号-1作为
结束标志,试写出两个稀疏矩阵相加的算法。
参考答案
一.B D B A B C C
二.1.14 2.模式匹配3.线性结构顺序结构行优先列优先4.913 5.(d1-c1+1)*(d2-c2+1)8(d3-c3+1)
三.1.
(1)void trans(sqstring &s,char c1,char c2)
{ int I;
For(i=0;i If ( s.data[i]==c1) s.data[i]=c2; } (2)void invert(sqstring &s) { int I; Char temp; For (i=0;i { temp=s.data[i]; s.data[i]=s.data[s.length-i+1]; s.data[s.length-i+1]=temp; }} (3)void delall( sqstring &s,char c) { int I,j; For(i=0;i If (s.data[i]==c) { for (j=I;j s.data[j]=s.data[j+1]; s.length--; } } (4)int partpos(SqString S,SqString S1,int index) { int i,j,k; int n=S.length; int m=S1.length; for(i=index;i<=n-m;i++) { for (j=0,k=I;j if (j==m) return(i); } return(-1); } (5)SqString *DelSubs(SqString S,int i,int j) { int m=s.length,k; If(i>m-1 || i+j>=m) { printf(“参数错误\n”); Exit(0); } For(k=I;k<=i+j-1;k++) S.data[k]=s.data[k+j]; s.length=s.length-j; return s; } (6)SqString *DelSubsAll(SqString s,SqString s1) { int i=0; While(i { if((i=Partpos(s,s1,i))!= -1) S=delsubs(s,I,s1.length); I++; } Return s; } 2. #include #include { char data[Maxsize]; Int length; } SqString; Typedef struct { char c; Int num; } CType; Int fun(SqString str,CType cnum[]) { int I,j,k=0; For(i=0;i { if (k==0) {cnum[k].c=str.data[i];