A.(i*(i—1))/2+j-1B.(i*(i—1))/2—j—1
C.(j*(j—1))/2十i—1D.(j*(j-1))/2—i—1
(11)对三对角矩阵A采用压缩存储的方法将所有非零元素存放于一个一维数组BC3n—2]中,某非零元素Aij在B中位置是——。
A.2*i+j-2B.2*i+j+2C.2*i+j-3D.2*i+j-1
3.4已知一元多项式f(x)=4X(6)—5X(4)十7X
(2)-1,请写出f(x)的一维数组表示的两种方法。
3.5按照压缩存储的思想,对于一个具有t个非零元素的mXn阶稀疏矩阵,若采用三元组表存储方法,t到达什么程度时这样做才有意义?
3.6已知稀疏矩阵A[6][5]如下所示,请分别写出它的三元组表表示与十字链表表示。
3.8已知稀疏矩阵A为m行n列,请写出将该稀疏矩阵转换为三元组表表示的算法。
3.9设A为一个n阶上三角矩阵,若将此三角矩阵的所有非零元素按照列序为主序分配方式存放在数组B[n*(n+1)/2]中,a11存放于B[0]中,请写出此三角矩阵的非零元素Aij(i≤j)的寻址公式。
3.10请写算法,该算法将一个n阶矩阵A主对角线以下的所有元素(不包括主对角线上的元素)按照列序为主序方式依次存放于一个一维数组B中。
3.11请写算法,该算法将一个n阶矩阵A主对角线以下的所有元素(包括主对角线上的元素)按照行序为主序方式依次存放于一个一维数组B中。
3.12已知n阶对称矩阵A的下三角部分元素按照行序为主序方式依次存放于一个一维数组B[m]中,请写出输出该对称矩阵的算法。
3.13已知某二维数组A[n][n]按照行序为主序方式依次为每个数组元素获取值,请写一算法,求该数组两条对角线上的元素之乘积。
3.14已知二维数组A[m][n],请写一算法,求出该数组最外围一圈的元素之和。
已知二维数组A[n][n],请写一时间复杂度为O
(1)的算法,将该数组按照顺时针方向旋转若稀疏矩阵采用三元组表表示,请写出求两个具有相同行、列数的稀疏矩阵相加的算法。
3.17若在m*n阶的矩阵A中有一元素Aij满足条件:
Aij既是第i行元素的最小值,同时又是第j列元素的最大值,此时称Aij为A的鞍点。
试写出求矩阵鞍点的算法。
若矩阵中不存在鞍点,应给出相应信息。
3.18编写一个将十字链表表示的矩阵A转置的算法,转置的结果仍采用十字链表表示。
3.19若稀疏矩阵采用十字链表表示,请设计两个稀疏矩阵进行相乘运算的算法,即已知A矩阵与B矩阵,求矩阵C=A*B,并且要求C也采用十字链表表示。
3.20试设计一个算法,将数组A[n]中的元素循环右移k位,要求只用一个元素大小的附加空间。
3.21试设计一个时间复杂度为O(n)的算法,该算法将数组A[n]中的元素循环右移k位,要求采用尽可能少的附加空间。
3.22n阶三对角矩阵A按行序为主序分配方式把所有非零元素存放于数组B[3n—2]中,Aij存放于B[0]中,请设计一个算法以确定数组B中元素~的值(1≤i,j≤n)。
3.23已知存放整型数据的一维数组A[n],请写一时间复杂度为O(n)的算法,该算法将数组调整为左右两部分,使得左边所有元素均为奇数,右边所有元素均为偶数。
3.24已知具有n个数组元素的一维数组A,请写一算法,将该数组中所有值为0的元素都依次移到数组的前端A[i](0≤i≤n-1)。
历年试题
1.执行下列程序段后,串X的值为( )
S=〞abcdefgh〞;T=〞xyzw〞;
substr(X,S,2,strlen(T));
substr(Y,S,stelen(T),2);
strcat(X,Y);
A.〞cdefgh〞B.〞cdxyzw〞
C.〞cdefxy〞D.〞cdefef〞
2.多维数组之所以有行优先顺序和列优先顺序两种存储方式是因为( )
A.数组的元素处在行和列两个关系中B.数组的元素必须从左到右顺序排列
C.数组的元素之间存在次序关系D.数组是多维结构,内存是一维结构
3.从广义表LS=((p,q),r,s)中分解出原子q的运算是( )
A.tail(head(LS))B.head(tail(head(LS)))
C.head(tail(LS))D.tail(tail(head(LS)))
4.数组通常具有两种基本运算,即( )
A.创建和删除B.索引和修改
C.读和写D.排序和查找
5.设有一5阶上三角矩阵A[1..5,1..5],现将其上三角中的元素按列优先顺序存放在一堆数组B[1..15]中。
已知B[1]的地址为100,每个元素占用2个存储单元,则A[3,4]的地址为( )
A.116B.118C.120D.122
6.为查找某一特定单词在文本中出现的位置,可应用的串运算是()
A.插入B.删除C.串联接D.子串定位
7.已知函数Sub(s,i,j)的功能是返回串s中从第i个字符起长度为j的子串,函数Scopy(s,t)的功能为复制串t到s。
若字符串S=″SCIENCESTUDY″,则调用函数Scopy(P,Sub(S,1,7))后得到()
A.P=″SCIENCE″B.P=″STUDY″
C.S=″SCIENCE″D.S=″STUDY″
8.三维数组A[4][5][6]按行优先存储方法存储在内存中,若每个元素占2个存储单元,且数组中第一个元素的存储地址为120,则元素A[3][4][5]的存储地址为()
A.356B.358C.360D.362
9.串S=″Iamaworker″的长度是________。
10.假设一个10阶的下三角矩阵A按列优顺序压缩存储在一维数组C中,则C数组的大小应为________。
11、二维数组X的行下标范围是0~5,列下标范围是1~8,每个数组元素占六个字节,则该数组的体积为__A__个字节,若已知X的最后一个元素的起始字节地址为382,则X的首地址(即第一个元素的起始字节地址)为__B__,记为Xd。
若按行存储,则X[1,5]的起始地址是__C__,结束字节地址是___D__。
若按列存储,则X[4,8]的起始字节地址为__E__。
供选择的答案:
A:
①210②240③288④294
B:
①0②6③94④100
C:
①Xd+24②Xd+72③Xd+78④Xd+144
D:
①Xd+29②Xd+77③Xd+83④Xd+147
E:
①Xd+186②Xd+234③Xd+270④Xd+276
12、有一个二维数组A,行下标的范围是1~6,列下标的范围是0~7,每个数组元素用相邻的6个字节存储,存储器按字节编址。
那么,这个数组的体积是_A_个字节。
假设存储数组元素A[1,0]的第一个字节的地址是0,则存储数组A的最后一个元素的第一个字节的地址是_B_。
若按行存储,则A[2,4]的第一个字节的地址是_C_。
若按列存储,则A[5,7]的第一个字节的地址是_D_。
就一般情况而言,当_E_时,按行存储的A[5,7]的第一个字节的地址是_D_。
就一般情况而言,当_E_时,按行存储的A[I,J]地址与按列存储的A[J,I]地址相等。
供选择的答案:
A~D:
①12 ②66③72④96
⑤114⑥120⑦156 ⑧234
⑨276 ⑩282⑾283⑿288
E:
①行与列的上界相同 ②行与列的下界相同
③行与列的上界相同且行与列的下界相同
④行的元素个数与列的元素的个数相同
13、设W为一个二维数组,其每个数据元素Wij占用6个字节,行下标i从0到8,列下标j从2到5,则二维数组W的数据元素共占用_A_个字节。
W中第6行的元素和第4列的元素共占用_B_个字节。
若按行顺序存放二维数组W,其起始地址的字节号为100,则二维数组W的最后一个数据元素的起始地址的字节号为_C_,数据元素W34的起始地址号为_D_,而数据元素W22的起始地址与当W按列顺序存放时数据元素_E_的起始地址相同。
供选择的答案
A:
①480②192③216④144
B:
①78②72③66④84
C:
①310②311③315④314
D:
①179②178③184④185
E:
①W05②W28③W52④W82
14、已知一个6行5列的稀疏矩阵中非零元的值分别为:
-90,41,-76,28,-54,65和-8,它们在矩阵中的列号依次为:
1,4,5,1,2,4和5。
当以带行表的三元组表作存储结构时,其行表RowTab中的值依次为0,0,2,2,3和5。
请写出该稀疏矩阵(注:
矩阵元素的行列下标均从1开始)。
15、已知串的存储结构为动态存储分配的顺序串。
阅读下列算法,并回答问题:
(1)写出执行函数调用strc(s,r)的返回结果,其中s=〃aba〃,r=〃abababa〃;
(2)简述函数strc的功能。
intstrc(HString*sub,HString*str)
{
inti=0,j,k,count=0;
while(ilength–sub->length+1)
{
j=i;k=0;
while(klength&&str->ch[j]==sub->ch[k])
{
j++;k++;
}
if(k==sub->length)
{count++;i=j-sub->length+1;}
elsei++;
}
returncount;
}
16、阅读以下程序说明和C程序,将应填入程序中(n)处的字句,写在答卷的对应栏内。
[程序说明]
已知某数的前二项为2和3,其后继项根据当前最后二项的乘积按下列规则生成
⑴若乘积为一位数,则该乘积即为数列的后继项;
⑵若乘积为二位数,则该乘积的十位数和个位数依次作为数