1、数据结构习题精编串和数组数据结构习题精编:串和数组一、选择题1下面关于串的的叙述中,不正确的是 A串是字符的有限序列 B空串是由空格构成的串 C模式匹配是串的一种重要运算 D串既可以采用顺序存储,也可以采用链式存储2下面关于串的的叙述中,正确的是 A空串就是空白串 B串相等指的是串的长度相等 C串的长度必须大于零 D串是一种特殊的线性表3字符串是一种特殊的线性表,它与一般线性表的区别是 A字符串是一种线性结构 B字符串可以进行复制操作 C字符串可以顺序存储也可以链式存储 D字符串由字符构成并且通常作为整体参与操作4串s=Data Structure中长度为3的子串的数目是 A9 B11 C12
2、 D14 5若串S=software,则S的子串的数目是 A8 B35 C36 D37 6已知串S= string,T=this,执行运算StrLength(StrCopy(S,T)的结果是 A2 B4 C6 D107若串S=SCIENCESTUDY,则调用函数StrCopy(P,SubString(S,1,7)后得到 AP=STUDY BP=SCIENCE CS=STUDY DS=SCIENCE8若字符串采用链式存储,每个字符占用一个字节,每个指针在占用四个字节,则该字符串的存储密度为 A20% B25% C50% D75% 9为查找某一特定单词在文本中出现的位置,可应用的串运算是 A串联接
3、 B求子串 C串比较 D子串定位10当目标串的长度为n,模式串的长度为m时,朴素的模式匹配算法最好情况下字符的比较次数 Am Bn Cn-m Dn+m11当目标串的长度为n,模式串的长度为m时,朴素的模式匹配算法最坏情况下字符的比较次数 Am Bn C(n-m+1)*m Dn*m12已知串S=aaab,其Next数组的元素值依次为 A0、1、2、3 B1、1、2、3 C1、2、1、1 D1、2、3、113串 ababaaababaa 的next数组为 A011234223456 B012121111212 C0123012322345 D01234567899914字符串ababaabab 的
4、nextval 为 A(0,1,0,1,0,0,0,1,1) B(0,1,0,1,0,1,0,1,1) C(0,1,0,1,0,2,1,0,1) D(0,1,0,1,0,4,1,0,1) 15二维数组A1020采用按行为主序的存储方式,每个元素占4个存储单元,若A00的存储地址为300,则A810的地址为 A660 B732 C980 D1132 16二维数组A56采用按列为主序的存储方式,每个元素占3个存储单元,若A00的存储地址是100,则A43的存储地址是 A157 B166 C169 D18117二维数组A按行优先顺序存储,其中每个元素占1个存储单元。若A11的存储地址为420,A33
5、的存储地址为446,则A55的存储地址为 A470 B471 C472 D473 18假设以行优先顺序存储三维数组R696,其中元素R000的地址为2100,每个元素占4个存储单元,则存储地址为2836的元素是 AR333 BR334 CR434 DR435 19设二维数组A1. m1. n(即m行n列)按行存储在数组B1. m*n中,则二维数组元素Aij在一维数组B中的下标为 A(i-1)*n+j-1 B(i-1)*n+j Ci*(j-1) Dj*m+i-1 20设有二维数组A810,A00的存储地址为LOC,每个元素占2L个存储单元,在以行序为主序的存储方式下,某数据元素的地址为LOC+5
6、0L,则在以列序为主序的存储方式下,该元素的存储地址为 ALOC+26L BLOC+42L CLOC+50L DLOC+84L 21对矩阵压缩存储是为了 A方便运算 B方便存储 C提高运算速度 D减少存储空间22设有一个10阶的对称矩阵A,采用行优先压缩存储方式,a1,1为第一个元素,其存储地址为1,每个元素占一个字节空间,则a8,5的地址为 A13 B32 C33 D75 23设有一个对称矩阵ANN,A11为首元素,将其下三角(包括对角线)元素以行优先顺序存储到一维数组元素T1至TN(N+1)2中,则任一上三角元素Aij (ij)存于Tk中,下标k为 Ai(i-1)2+j Bi(i+1)2+
7、j Cj(j-1)2+i Dj(j+1)2+i24设A是n*n的对称矩阵,将A的对角线及对角线上方的元素以列为主的次序存放在一维数组B1.n(n+1)/2中,对上述任一元素aij(1i,jn,且ij)在B中的位置为 Ai(i-l)/2+j-1 Bi(i-l)/2+j Cj(j-l)/2+i-1 D j(j-l)/2+i25设有一5阶上三角矩阵A55,现将其上三角中的元素按列优先顺序存放在一维数组B15中。已知A11存放在B1中,其地址为100,每个元素占用2个存储单元,则A34的地址为 A116 B118 C120 D122 26将一个三对角矩阵A100100,按行优先存入一维数组B298中,
8、A11存放在B1中。A中元素A6665,在B数组中的位置K为 A194 B195 C197 D198 27有一个100*90的稀疏矩阵,非0元素有10个(均为整数)。设每个整型数占2个字节,则用三元组表示该矩阵时,所需的字节数是 A20 B60 C66 D18000 28下面关于广义表的说法中,不正确的是 A广义表的表头总是一个广义表 B广义表的表尾总是一个广义表 C广义表难以用顺序结构存储 D广义表可以是一个多层次的结构29已知广义表的表头为a,表尾为(b,c),则此广义表为 A(a,b,c) B(a,(b,c) C(a),b,c) D(a,b,c) 30广义表(a,(b,c),d,e)的表
9、头为 Aa B(a) Ca,(b,c) D(a,(b,c) 31设广义表L=(a,b,c),则L的长度和深度分别为 A1和1 B1和2 C1和3 D2和3 32设广义表L=(a,(b,c),进行GetTail(L)操作后的结果为 Ac Bb,c C(b,c) D(b,c) 33对于广义表A,若GetHead(A)等于GetTail(A),则表A为 A( ) B( ) C( ),( ) D( ),( ),( ) 34对广义表L=(a,b),(c,d),(e,f)执行操作GetTail(GetTail(L)的结果是 A( ) B(f) C(e,f) D(e,f) 35对广义表L=(a,b),c,d
10、) 执行操作GetTail(GetHead(L)的结果是 Ab B(b) C(d) D(c,d)36已知广义表A=(a,b),B=(A,A),C=(a,(b,A),B),执行操作GetTail(GetHead(GetTail(C)后的结果为 Ab B(b) CA D(A) 37从广义表LS((p,q),r,s)中分解出原子q的运算是 AGetTail (GetHead (LS) BGetHead (GetTail (GetHead (LS) CGetHead (GetTail (LS) DGetTail (GetTail (GetHead (LS) 38已知广义表LS(a,b,c),(d,e,
11、f),从LS中分离出原子e的运算是 AGetHead(GetTail(LS) BGetTail(GetHead(LS) CGetHead(GetTail(GetHead(GetTail(LS) DGetHead(GetTail(GetTail(GetHead(LS) 二、填空题1空格串是指_,其长度等于_。2组成串的数据元素只能是_。3串是一种特殊的线性表,其特殊性表现在_;串的两种最基本的存储方式是_;两个串相等的充分必要条件是_。 4若串S1=ABCDEFG, S2=9876 ,S3=#,S4=012345,执行Concat(Replace(S1,SubString(S1,StrLengt
12、h(S2),StrLength(S3),S3),SubString(S4,Index(S2, 8),StrLength(S2)5设T和P是两个给定的串,在T中寻找等于P的子串的过程称为_,又称P为_。6Index(DATASTRUCTURE, STR)=_。7设正文串长度为n,模式串长度为m,则串匹配的KMP算法的时间复杂度为_。8模式串P=abaabcac的next函数值序列为_。9字符串ababaaab的nextval函数值序列为_。 10已知串U=xyxyxyxxyxy,t= xxy;依次执行StrAssign(S,U);StrAssign(V,SubString(S,Index(S,t
13、),StrLength(t)+1);StrAssign(m,ww);Replace(S,V,m); 后,S= _,V=_。 11设串S=abcdefgh,T=xyzw。依次执行 SubString(X,S,3,StrLength(T); SubString(Y,S,StrLength(T),2); Concat(Z,X,Y);后,串Z的值为_。12实现字符串拷贝的函数 strcpy可写为: void strcpy(char *s ,char *t) / copy t to s while (_); 13有一个二维数组A85,每个数组元素用相邻的4个字节存储,存储器按字节编址,假设存储数组第1个
14、元素A00的第一个字节的地址是0,存储数组A的最后一个元素的第一个字节的地址是_。若按行序优先存储,则A34和A53的第一个字节的地址是_和_。若按列序优先存储,则A24和A71的第一个字节的地址是_和_。14一个10阶对称矩阵A,采用行优先顺序压缩存储上三角元素,设第1个元素a11的存储地址为0,每个元素占有1个字节的存储空间,则a45的地址为_。15设一个6阶的下三角矩阵B按行优先顺序压缩存储在一维数组A中,其中A0存储矩阵的第一个元素B11,则A14存储的元素是_。 若将B按列序优先顺序压缩存储在一维数组A中,则A14存储的元素是_。16稀疏矩阵一般有两种压缩存储方法,即_和_。17一个
15、广义表的长度是指_,而表的深度是指_。广义表G=(a,b,(c,d,(e,f),G)的长度为_。广义表L=(a,(b,( )的深度为_。18设广义表L=(),(),则GetHead(L)是_,GetTail(L)是_,L的长度是_;深度是_。广义表(a,b),c,d)的表头是_,表尾是_。19用广义表的取表头GetHead和取表尾GetTail的运算,从广义表LS=(b,c,(f),(d)中分解出原子c的操作为_。20. 设广义表A=(a,b,(c,d),(e,(f,g),用广义表的取表头GetHead和取表尾GetTail运算,从A中分解出原子d的操作为_。三、解答题1设有对称矩阵Ann(行
16、和列下标均从1开始),将其上三角元素逐行存于数组Bn*(n+1)/2中,使得Bk=aij(1=i,j=n,0=k=n*(n+1)/2-1)。试推导出由i、j和n计算k的一般公式。2在nn矩阵A中,所有下标值满足关系式i+jn+l的元素aij(1=i,j=n)的值均为0,现将A中其它元素按行优先顺序依次存储到长度为n(n+1)/2的一维数组sa中,其中元素a1,n存储在sa0中。(1)设n=10,元素a49存储在sap中,写出下标p的值。(2)设元素aij(1=i,j=n,且i+jn+l)存储在sak中,写出由i、j和n计算k的一般公式。3设有n阶三对角矩阵,将其三条对角线上的元素逐行地存于数组
17、B1.3n-2中,使得Bk=aij。(1)设n=100,将一个A100100的三对角矩阵,按行优先存入一维数组B1.m中,试确定m的值,并求A中元素A7778在B数组中的位置K。(2)求用i、j表示k的下标变换公式。(3)求用k表示i、j的下标变换公式。4设A和B均为n阶下三角矩阵,在下三角区域中各有n(n+1)/2个元素。另设有一个二维数组C,它有n行n+1列。试设计一个方案,将两个矩阵A和B中的下三角区域元素存放于同一个C中,写出所给出方案的代码段。并给出计算A的矩阵元素aij和B的矩阵元素bij在C中的存放位置下标的公式。设A、B、C三个矩阵的行、列下标均从1开始。5设有稀疏矩阵A如下(
18、矩阵元素的行列下标均从1开始):(1)若矩阵A采用三元组顺序表存储,试给出其三元组表。(2)若矩阵采用十字链表存储,试画出该矩阵的十字链表。6利用广义表的GetHead和GetTail操作写出函数表达式,把以下各小题中的单元素banana从广义表中分离出来:(1)L1= (apple,pear,banana,orange)(2)L2= (apple,pear),(banana,orange)(3)L3= (apple),(pear),(banana),orange)(4)L4= (apple,(pear,(banana),orange)7画出广义表(a),b),( ),d),(e,f) 的两种
19、存储结构图示。8已知广义表如下:A=(B,y)B=(x,L)L=(a,b)(1)写出下列操作的结果GetTail(A)=_。GetHead(B)=_。(2)画出广义表A所对应的图形(树形结构)。四、分析题1阅读下列函数,并回答问题。void fun441(int A, int n) int i,j,m; for (i=1; in; i+) for (j=0; ji; j+) m=Ai*n+j; Ai*n+j=Aj*n+i; Aj*n+i=m; (1)已知矩阵B=,将其按行优先存于一维数组A中,写出执行函数调用Fun441(A,3)后,矩阵B的值。(2)简述函数void fun441(int A
20、, int n)的功能。2阅读下列函数,并回答问题。void fun442(char str81) char temp, *begin, *end,*p1,*p2; if(str = NULL) return; begin=str; end=str+strlen(str)-1; while(begin end) temp = *begin; *begin = *end; *end= temp; begin+; end-; begin = end = str; while(*begin != 0) if(*begin = ) begin +; end +; continue; else if(*
21、end = | *end = 0) for (p1=begin,p2=end-1; p1p2; p1+,p2-) temp=*p1; *p1=*p2; *p2=temp; if (*end!=0) begin = +end; else begin=end; else end +; (1)设有char str81=”I am a good worker!”,执行函数fun442( str)后,字符串str的内容是什么?(2)简述函数void fun442(char str81)的功能。3下面函数的功能是判断字符串s 是否对称,若对称则返回true,否则返回false。例如, fun443(abb
22、a)返回true,f(abab)返回false。请在划线处填上适当的一个表达式,将程序补充完整。bool fun443(char s) int i=0,j=0; while (sj) _; / (1) for(j-; inext; if (_) / (3) return p-data; q=T; / 指针恢复串T的开始结点 _; / (4) return NULL;5下面程序的功能是生成从外到内是连续的自然数排列的回旋方阵。例如,当n=3和n=4时的回旋方阵如下图1所示。图1 由外向内回旋方阵请在划线处填上适当的内容,将程序补充完整。#include #include using namesp
23、ace std;#define N 10int main() int aNN=0; int n,row,col,num=0; cout请输入方阵的行数n(nn; num=arow=0col=0=1; / 第0行第0列输入起始1 while(numn*n) / 数组中的数不超过n*n while(_) / (1) a+rowcol=+num; / 向下填充 while(_) / (2) arow+col=+num; / 向右填充 while(_) / (3) a-rowcol=+num; / 向上填充 while(_) / (4) arow-col=+num; / 向左填充 for(row=0;
24、rown;row+) /打印全部数组元素 for(col=0;coln;col+) coutsetw(4)arowcol; coutendl; return 0;五、设计题1利用C的库函数strlen、strcpy和strcat编写一个函数void StrInsert(char *S,int pos,char *T),将串T插入到串S的第pos个字符之前。若pos大于S的长度,则插入不执行。利用函数strlen 和strcpy编写一个函数void StrDelete(char *S,int pos,int len)删去串S中从位置pos开始的连续len个字符。若posstrlen(S),则没有
25、字符被删除;若i+mstrlen(S),则将S中从位置pos开始直至末尾的字符均删去。2编写一个程序,将一个文本串用事先给定的字母映射表进行加密和解密。设字母映射表为:a b c d e f g h i j k l m n o p q r s t u v w x y z q w e r t y u I o p a s d f g h j k l z x c v b n m3编写一个程序,将一个含有数字和非数字字符的字符串中连续的数字作为一个整体,依次存放到一维整型数组中(设字符串中的数均不超过最大机器整数)。例如,有字符串“ak123xyz456 78.90?+!302gen4563”,将123存入0,456存入1,78存入a2,90存入a3。(说明:为简单起见,不考虑78.90是一
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1