恩,最近幾天,爲了應付六級,每天在專心看《Game of throne》,沉迷無法自拔,所以複習進度就慢了下了。【啊啊啊,決定痛改前非,專心複習!】
數組和廣義表這塊知識實話講不是很重要,但是考試是會考的!
一、選擇填空
- 設二維數組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開始的
- 已知二維數組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
- 若數組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
- 設有廣義表D=(a,b,D),其長度爲( ),深度爲( )。
A.無窮大
B.3
C.2
D.5
答案:B A
就這樣無限循環下去,但是長度始終是3
- 廣義表A=(a),則表尾爲( )。
A.a
B.(( ))
C.空表
D.(a)
答案:C
當廣義表LS非空時,稱第一個元素a1爲LS的表頭(Head),稱其餘元素組成的表(a2,…,ai,…,an)爲LS的表尾(Tail)
由定義可知,a爲表頭,表尾尾空表
- 廣義表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
- 一個廣義表的表頭總是一個( )。
A.廣義表
B.元素
C.空表
D.元素或廣義表
答案:D
- 一個廣義表的表尾總是一個( )。
A.廣義表 B.元素 C.空表 D.元素或廣義表
答案:A
- 一維數組的邏輯結構是( ),存儲結構是( );對於二維或多維數組,分爲( )和( )兩種不同的存儲方式。
答案:線性結構,順序結構,以行爲主序,以列爲主序
- 對於一個二維數組A[m][n],若按行序爲主序存儲,則任一元素A[i][j]相對於A[0][0]的地址爲( )。
答案:i×n+j個元素位置
還是這個圖呀!把列換成行,自己想【哈哈】
- 一個稀疏矩陣爲 ,則對應的三元順序表爲( )。
答案:((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;}
}
}