數據結構(五) 數組和廣義表

恩,最近幾天,爲了應付六級,每天在專心看《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;}
   }
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章