第四章串和数组习题

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 #include Typedef struct

{ 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];

相关文档
最新文档