数据结构(五) 数组和广义表

来源:互联网 发布:淘宝店铺被屏蔽怎么办 编辑:程序博客网 时间:2024/05/17 01:08

恩,最近几天,为了应付六级,每天在专心看《Game of throne》,沉迷无法自拔,所以复习进度就慢了下了。【啊啊啊,决定痛改前非,专心复习!】
数组和广义表这块知识实话讲不是很重要,但是考试是会考的!

一、选择填空

  1. 设二维数组A[0…m-1][0…n-1]按行优先顺序存储在内存中,第一个元素的地址为p,每个元素占k个字节,则元素aij的地址为( )。

A.p +[i*n+j]*k
B.p+[(i-1)*n+j-1]*k
C.p+[(j-1)*n+i-1]*k
D.p+[j*n+i-1]*k

答案:A
这里写图片描述
只找到了,按列优先顺序存储,它们的原理是相同的,在这里务必注意数组下标是从0开始的

  1. 已知二维数组A10×10中,元素a20的地址为560,每个元素占4个字节,则元素a10的地址为( )。

A.520
B.522
C.524
D.518

答案:A
这里写图片描述
画一个这样的图,a20的地址是560,那有20-10=10和每个元素占4个字节可得a10=560-10*4=520

  1. 若数组A[0…m][0…n]按列优先顺序存储,则aij地址为( )。

A.LOC(a00)+[j*m+i]
B. LOC(a00)+[j*n+i]
C.LOC(a00)+[(j-1)*n+i-1]
D. LOC(a00)+[j*(m+1)+i+1]

答案: D

  1. 设有广义表D=(a,b,D),其长度为( ),深度为( )。

A.无穷大
B.3
C.2
D.5

答案:B A
这里写图片描述
就这样无限循环下去,但是长度始终是3

  1. 广义表A=(a),则表尾为( )。

A.a
B.(( ))
C.空表
D.(a)

答案:C
当广义表LS非空时,称第一个元素a1为LS的表头(Head),称其余元素组成的表(a2,…,ai,…,an)为LS的表尾(Tail)
由定义可知,a为表头,表尾尾空表

  1. 广义表A=((x,(a,B)),(x,(a,B),y)),则运算gethead(gethead(gettail(A)))的结果为( )。

A.x
B.(a,B)
C.(x,(a,B))
D.A
答案:A
gethead就是获取表头,gettail就是获取表尾。
gethead(gethead(gettail(A)))按照运算顺序,先获取A的表尾(x,(a,B),y),再获取它的表头x,再获取它的表头x

  1. 一个广义表的表头总是一个( )。

A.广义表
B.元素
C.空表
D.元素或广义表

答案:D

  1. 一个广义表的表尾总是一个( )。
    A.广义表 B.元素 C.空表 D.元素或广义表

答案:A

  1. 一维数组的逻辑结构是( ),存储结构是( );对于二维或多维数组,分为( )和( )两种不同的存储方式。

答案:线性结构,顺序结构,以行为主序,以列为主序

  1. 对于一个二维数组A[m][n],若按行序为主序存储,则任一元素A[i][j]相对于A[0][0]的地址为( )。

答案:i×n+j个元素位置
这里写图片描述
还是这个图呀!把列换成行,自己想【哈哈】

  1. 一个稀疏矩阵为 这里写图片描述 ,则对应的三元顺序表为( )。

答案:((1,3,2),(2,1,3),(3,3,-1),(3,4,5))
我给你做个很简单的解释,(1,3,2),就是广义表第一行第三列为2

二、算法设计

假定数组A[n]的n个元素中有多个零元素,编写算法将A中所有的非零元素依次移到A的前端。

void move(int A[],int n){int i=0,j=n-1;int temp;while(i<j)  {   while(A[i]!=0)  i++;   while(A[j]==0)  j--;   if(i<j)     {A[i]=A[j];A[j]=0;}   }} 
0 0