1. 程式人生 > >考研題目 第五章 陣列和廣義表

考研題目 第五章 陣列和廣義表

導讀:

  一、選擇題

  1.設有一個10階的對稱矩陣A,採用壓縮儲存方式,以行序為主儲存,a11為第一元素,其儲存地址為1,每個元素佔一個地址空間,則a85的地址為( )。【燕山大學2001 一、2 (2分)】

  A. 13 B. 33 C. 18 D. 40

  2. 有一個二維陣列A[1:6,0:7]每個陣列元素用相鄰的6個位元組儲存,儲存器按位元組編址,那麼這個陣列的體積是(①)個位元組。假設儲存陣列元素A[1,0]的第一個位元組的地址是0,則儲存陣列A的最後一個元素的第一個位元組的地址是(②)。若按行儲存,則A[2,4]的第一個位元組的地址是(③)。若按列儲存,則A[5,7]的第一個位元組的地址是(④)。就一般情況而言,當(⑤)時,按行儲存的A[I,J]地址與按列儲存的A[J,I]地址相等。供選擇的答案:【上海海運學院1998 二、2 (5分)】

  ①-④:A.12 B. 66 C. 72 D. 96 E. 114 F. 120

  G. 156 H. 234 I.276 J. 282 K. 283 L. 288

  ⑤:A.行與列的上界相同 B. 行與列的下界相同

  C. 行與列的上、下界都相同 D. 行的元素個數與列的元素個數相同

  3. 設有陣列A[i,j],陣列的每個元素長度為3位元組,i的值為1 到8 ,j的值為1 到10,陣列從記憶體首地址BA開始順序存放,當用以列為主存放時,元素A[5,8]的儲存首地址為( )。

  A. BA+141 B. BA+180 C. BA+222 D. BA+225

  【南京理工大學1997 一、8(2分)】

  4. 假設以行序為主序儲存二維陣列A=array[1..100,1..100],設每個資料元素佔2個儲存單元,基地址為10,則LOC[5,5]=( )。【福州大學1998 一、10 (2分)】

  A. 808 B. 818 C. 1010 D. 1020

  5. 陣列A[0..5,0..6]的每個元素佔五個位元組,將其按列優先次序儲存在起始地址為1000的記憶體單元中,則元素A[5,5]的地址是( )。【南京理工大學2001 一、13 (1.5分)】

  A. 1175 B. 1180 C. 1205 D. 1210

  6. 有一個二維陣列A[0:8,1:5],每個陣列元素用相鄰的4個位元組儲存,儲存器按位元組編址,假設儲存陣列元素A[0,1]的第一個位元組的地址是0,儲存陣列A的最後一個元素的第一個位元組的地址是( ① )。若按行儲存,則A[3,5]和A[5,3]的第一個位元組的地址是( ② ) 和( ③ )。若按列儲存,則A[7,1]和A[2,4]的第一個位元組的地址是( ④ )和( ⑤ )。【上海海運學院1996 二、1 (5分)】

  ①-⑤:A.28 B.44 C.76 D.92 E.108 F.116 G.132 H.176 I.184 J.188

  7. 將一個A[1..100,1..100]的三對角矩陣,按行優先存入一維陣列B[1‥298]中,A中元素A6665(即該元素下標i=66,j=65),在B陣列中的位置K為( )。供選擇的答案:

  A. 198 B. 195 C. 197 【北京郵電大學1998 二、5(2分)】

  8. 二維陣列A的元素都是6個字元組成的串,行下標i的範圍從0到8,列下標j的範圈從1到10。從供選擇的答案中選出應填入下列關於陣列儲存敘述中( )內的正確答案。

  (1)存放A至少需要( )個位元組;

  (2)A的第8列和第5行共佔( )個位元組;

  (3)若A按行存放,元素A[8,5]的起始地址與A按列存放時的元素( )的起始地址一致。

  供選擇的答案:

  (1)A.90 B.180 C. 240 D. 270 E.540

  (2)A.108 B.114 C. 54 D.60 E. 150

  (3)A. A[8,5] B. A[3,10] C. A[5,8] D. A[0,9]

  【山東工業大學2000 三、1(4分)】 【山東大學1998 三、1 (4分)】

  9. 二維陣列A的每個元素是由6個字元組成的串,其行下標i=0,1,…,8,列下標j=1,2,…,10。若A按行先儲存,元素A[8,5]的起始地址與當A按列先儲存時的元素( )的起始地址相同。設每個字元佔一個位元組。【西安電子科技大學 1998 一、2 (2分)】

  A. A[8,5] B. A[3,10] C. A[5,8] D. A[0,9]

  10. 若對n階對稱矩陣A以行序為主序方式將其下三角形的元素(包括主對角線上所有元素)依次存放於一維陣列B[1..(n(n+1))/2]中,則在B中確定aij(i  A. i*(i-1)/2+j B. j*(j-1)/2+i C. i*(i+1)/2+j D. j*(j+1)/2+i

  【北京航空航天大學2000 一、2 (2分)】

  11. 設A是n*n的對稱矩陣,將A的對角線及對角線上方的元素以列為主的次序存放在一維陣列B[1..n(n+1)/2]中,對上述任一元素aij(1≤i,j≤n,且i≤j)在B中的位置為( )。

  A. i(i-l)/2+j B. j(j-l)/2+i C. j(j-l)/2+i-1 D. i(i-l)/2+j-1

  【南京理工大學1999 一、9(2分)】

  12. A[N,N]是對稱矩陣,將下面三角(包括對角線)以行序儲存到一維陣列T[N(N+1)/2]中,則對任一上三角元素a[i][j]對應T[k]的下標k是( )。【青島大學2002 二、6 (2分)】

  A. i(i-1)/2+j B. j(j-1)/2+i C. i(j-i)/2+1 D. j(i-1)/2+1

  13. 設二維陣列A[1.. m,1.. n](即m行n列)按行儲存在陣列B[1.. m*n]中,則二維陣列元素A[i,j]在一維陣列B中的下標為( )。【南京理工大學1998 一、2 (2分)】

  A.(i-1)*n+j B.(i-1)*n+j-1 C. i*(j-1) D. j*m+i-1

  14. 有一個100*90的稀疏矩陣,非0元素有10個,設每個整型數佔2位元組,則用三元組表示該矩陣時,所需的位元組數是( )。【南京理工大學1999 二、8 (2分)】

  A. 60 B. 66 C. 18000 D. 33

  15. 陣列A[0..4,-1..-3,5..7]中含有元素的個數( )。【中山大學1998 二、5(2分)】

  A. 55 B. 45 C. 36 D. 16

  16. 用陣列r儲存靜態連結串列,結點的next域指向後繼,工作指標j指向鏈中結點,使j 沿鏈移動的操作為( )。【南京理工大學2001 一、16(1.5分)】

  A. j=r[j].next B. j=j+1 C. j=j->next D. j=r[j]-> next

  17. 對稀疏矩陣進行壓縮儲存目的是( )。【北京工商大學2001 一、1 (3分)】

  A.便於進行矩陣運算 B.便於輸入和輸出 C.節省儲存空間 D.降低運算的時間複雜度

  18. 已知廣義表L=((x,y,z),a,(u,t,w)),從L表中取出原子項t的運算是( )。

  A. head(tail(tail(L))) B. tail(head(head(tail(L))))

  C. head(tail(head(tail(L)))) D. head(tail(head(tail(tail(L)))))

  【北京郵電大學1998 二、4(2分)】

  19. 已知廣義表LS=((a,b,c),(d,e,f)),運用head和tail函式取出LS中原子e的運算是( )。

  A. head(tail(LS)) B. tail(head(LS))

  C. head(tail(head(tail(LS))) D. head(tail(tail(head(LS))))

  【西安電子科技大學2001應用一、3(2分)】

  20. 廣義表A=(a,b,(c,d),(e,(f,g))),則下面式子的值為( )。【北京郵電大學1999一、2(2分)】

  Head(Tail(Head(Tail(Tail(A)))))

  A. (g) B. (d) C. c D. d

  21. 已知廣義表: A=(a,b), B=(A,A), C=(a,(b,A),B),求下列運算的結果:

  tail(head(tail(C))) =( )。【長沙鐵道學院1998 三、4 (2分)】

  A.(a) B. A C. a D. (b) E. b F. (A)

  22. 廣義表運算式Tail(((a,b),(c,d)))的操作結果是( )。【西安電子科技大學1998 一、4(2分)】

  A. (c,d) B. c,d C. ((c,d)) D. d

  23. 廣義表L=(a,(b,c)),進行Tail(L)操作後的結果為( )。【中山大學1999 一、10】

  A. c B. b,c C.(b,c) D.((b,c))

  24. 廣義表((a,b,c,d))的表頭是( ),表尾是( )。【青島大學2002 二、7 (2分)】

  A. a B.() C.(a,b,c,d) D.(b,c,d)

  25. 廣義表(a,(b,c),d,e)的表頭為( )。【中山大學1998 二、6(2分)】

  A. a B. a,(b,c) C. (a,(b,c)) D. (a)

  26. 設廣義表L=((a,b,c)),則L的長度和深度分別為( )。【武漢大學2000 二、9】

  A. 1和1 B. 1和3 C. 1和2 D. 2和3

  27. 下面說法不正確的是( )。 【南京理工大學2001 一、3 (1.5分)】

  A. 廣義表的表頭總是一個廣義表 B. 廣義表的表尾總是一個廣義表

  C. 廣義表難以用順序儲存結構 D. 廣義表可以是一個多層次的結構

  

  二、判斷題

  1. 陣列不適合作為任何二叉樹的儲存結構。( )【南京航空航天大學1995 五、2 (1分)】

  2. 從邏輯結構上看,n維陣列的每個元素均屬於n個向量。( )

  【東南大學2001 一、2 (1分)】【中山大學1994 一、2 (2分)】

  3. 稀疏矩陣壓縮儲存後,必會失去隨機存取功能。( )【中科院軟體所1997 一、1 (1分)】

  4. 陣列是同類型值的集合。( )【上海海運學院1996 一、3(1分)1999 一、4(1分)】

  5. 陣列可看成線性結構的一種推廣,因此與線性表一樣,可以對它進行插入,刪除等操作。( )

  【上海交通大學1998 一、5】

  6. 一個稀疏矩陣Am*n採用三元組形式表示, 若把三元組中有關行下標與列下標的值互換,並把m和n的值互換,則就完成了Am*n的轉置運算。( ) 【西安交通大學1996二、8 (3分)】

  7. 二維以上的陣列其實是一種特殊的廣義表。( ) 【北京郵電大學2002 一、5(1分)】

  8. 廣義表的取表尾運算,其結果通常是個表,但有時也可是個單元素值。( )

  【南京航空航天大學1996 六、2 (1分)】

  9. 若一個廣義表的表頭為空表,則此廣義表亦為空表。( )

  【中科院軟體所1997 一、8(1分)】 【長沙鐵道學院1998 一、8 (1分)】

  10. 廣義表中的元素或者是一個不可分割的原子,或者是一個非空的廣義表。( )

  【合肥工業大學2000 二、3(1分)】

  11. 所謂取廣義表的表尾就是返回廣義表中最後一個元素。( )【合肥工業大學2001 二、3 (1分)】

  12. 廣義表的同級元素(直屬於同一個表中的各元素)具有線性關係。( )

  【華南理工大學2002 一、9(1分)】

  13. 對長度為無窮大的廣義表,由於儲存空間的限制,不能在計算機中實現。( )

  【華南理工大學2002 一、10(1分)】

  14. 一個廣義表可以為其它廣義表所共享。( ) 【山東大學2001 一、2(1分)】

  

  三、 填空題

  1. 陣列的儲存結構採用_______儲存方式。【中山大學1998 一、6(1分)】

  2. 設二維陣列A[-20..30,-30..20], 每個元素佔有4 個儲存單元, 儲存起始地址為200.如按行優先順序儲存,則元素A[25,18]的儲存地址為__(1)_;如按列優先順序儲存,則元素A[-18,-25]的儲存地址為__(2)_。 【北方交通大學1999 二、3(4分)】

  3. 設陣列a[1..50,1..80]的基地址為2000,每個元素佔2個儲存單元,若以行序為主序順序儲存,則元素a[45,68]的儲存地址為_(1)_若以列序為主序順序儲存,則元素a[45,68]的儲存地址為_(2)_。

  【華中理工大學2000 一、5(2分)】

  4. 將整型陣列A[1..8,1..8]按行優先次序儲存在起始地址為1000的連續的記憶體單元中,則元素A[7,3]的地址是:_______。【合肥工業大學1999 三、4(2分)】

  5. 二維陣列a[4][5][6](下標從0開始計,a有4*5*6個元素),每個元素的長度是2,則a[2][3][4]的地址是____。(設a[0][0][0]的地址是1000,資料以行為主方式儲存)

  【南京理工大學2000 二、11(1.5分)】

  6. 設有二維陣列A[0..9,0..19],其每個元素佔兩個位元組,第一個元素的儲存地址為100,若按列優先順序儲存,則元素A[6,6]儲存地址為_______。 【北京工商大學2001 二、5 (4分)】

  7. 已知陣列A[0..9,0..9]的每個元素佔5個儲存單元,將其按行優先次序儲存在起始地址為1000的連續的記憶體單元中,則元素A[6,8]的地址為_______。【合肥工業大學2001 三、4(2分)】

  8. 已知二維陣列A[1..10,0..9]中每個元素佔4個單元,在按行優先方式將其儲存到起始地址為1000的連續儲存區域時,A[5,9]的地址是:_______。【廈門大學2002 六、5 (4分)】

  9. 用一維陣列B與列優先存放帶狀矩陣A中的非零元素A[i,j] (1≤i≤n,i-2≤j≤i+2),B中的第8個元素是A 中的第_(1)_行,第_(2)_列的元素。【北京郵電大學2001 二、3(4分)】

  10. 設陣列A[0..8,1..10],陣列中任一元素A[i,j]均佔記憶體48個二進位制位,從首地址2000開始連續存放在主記憶體裡,主記憶體字長為16位,那麼

  (l) 存放該陣列至少需要的單元數是_______;

  (2) 存放陣列的第8列的所有元素至少需要的單元數是_______;

  (3) 陣列按列儲存時,元素A[5,8]的起始地址是_______。【中國礦業大學2000 一、4(4分)】

  11.設n行n列的下三角矩陣A已壓縮到一維陣列B[1..n*(n+1)/2]中,若按行為主序儲存,則A[i,j]對應的B中儲存位置為_______。 【武漢大學2000 一、1】

  12. n階對稱矩陣a滿足a[i][j]=a[j][i],i,j=1..n,,用一維陣列t儲存時,t的長度為__(1)______,當i=j,a[i][j]=t[(2)],i>j,a[i][j]=t[(3)],i  13.己知三對角矩陣A【1..9,1..9】的每個元素佔2個單元,現將其三條對角線上的元素逐行儲存在起始地址為1000的連續的記憶體單元中,則元素A[7,8]的地址為______。【合肥工業大學2000 三、4(2分)】

  14. 設有一個10階對稱矩陣A採用壓縮儲存方式(以行為主序儲存:a11=1),則a85的地址為_______。

  【西安電子科技大學 1999軟體 一、3 (2分)】

  15. 所謂稀疏矩陣指的是_______。【廈門大學2001 一、2 (14%/5分)】

  16. 對矩陣壓縮是為了_______。 【北京理工大學2000 二、3(2分)】

  17. 上三角矩陣壓縮的下標對應關係為:_______。【福州大學1998 二、6 (2分)】【南京大學1999】

  18. 假設一個15階的上三角矩陣A按行優先順序壓縮儲存在一維陣列B中,則非零元素A9,9在B中的儲存位置k=_______。(注:矩陣元素下標從1開始)【北京工商大學2001 二、1(4分)】

  19.設下三角矩陣A=

  image002.gif


  

  如果按行序為主序將下三角元素Ai j (i,j)儲存在一個一維陣列B[ 1..n(n+1)/2]中,對任一個三角矩陣元素Aij,它在陣列B中的下標為_______。【北方交通大學2001 二、3】

  20. 當廣義表中的每個元素都是原子時,廣義表便成了_______。【長沙鐵道學院1998 二、8 (2分)】

  21. 廣義表的表尾是指除第一個元素之外,_______。 【中山大學1998 一、7 (1分)】

  22. 廣義表簡稱表,是由零個或多個原子或子表組成的有限序列,原子與表的差別僅在於 (1)____。為了區分原子和表,一般用 (2)____表示表,用 (3)_____表示原子。一個表的長度是指 (4)__,而表的深度是指__(5)__【山東工業大學2000 一、3(3分)】 【山東大學1998 一、2 (3分)】

  23. 廣義表的_______ 定義為廣義表中括弧的重數。【重慶大學2000 一、5】

  24.設廣義表L=((),()), 則head(L)是(1)___;tail(L)是(2)____;L的長度是(3)___;深度是 (4)__。

  【中科院計算所1998 一、2(4分)】【中國科技大學1998 一、2(4分)】

  25. 已知廣義表A=(9,7,( 8,10,(99)),12),試用求表頭和表尾的操作Head( )和Tail( )將原子元素99從A中取出來。 【西安交通大學1996 四、5 (5分)】

  26. 廣義表的深度是_______。【北京輕工業學院2000 一、1(2分)】

  27. 廣義表(a,(a,b),d,e,((i,j),k))的長度是(1)_,深度是(2)_。【山東大學2001 三、9(2分)】

  【西安電子科技大學2001軟體 一、5 (2分)】 【哈爾濱工業大學2001 一、2 (2分)】

  28. 已知廣義表LS=(a,(b,c,d),e),運用head和tail函式取出LS中原子b的運算是_______。

  【燕山大學2001 二、2 (3分)】

  29. 廣義表A=(((a,b),(c,d,e))),取出A中的原子e的操作是: _______。

  【合肥工業大學1999 三、5(2分)】

  30. 設某廣義表H=(A,(a,b,c)) ,運用head函式和tail函式求出廣義表H中某元素b的運算式_______。

  【北京科技大學1997 一、5】

  31. 廣義表A((( ),(a,(b),c))),head(tail(head(tail(head(A))))等於 。

  【合肥工業大學2000 三、5(2分)】

  32. 廣義表運算式HEAD(TAIL(((a,b,c),(x,y,z))))的結果是_______。

  【西安電子科技大學 1999軟體 一、9(2分)】

  33. 已知廣義表A=(((a,b),(c),(d,e))),head(tail(tail(head(A))))的結果是_______。

  【合肥工業大學2001 三、5 (2分)】

  34. 利用廣義表的GetHead和GetTail操作,從廣義表L=((apple,pear),(banana,orange))中分離出原子banana的函式表示式是_______。 【山東大學2001 三、6 (2分)】

  35. 已知a陣列元素共5個,依次為12,10,5,3,1;b陣列元素共4個,依次為4,6,8,15,則執行如下所示的過程語句sort後得到c陣列各元素依次為15,12,10,8,6,5,4,3,1;陣列a,b,c的長度分別為l=5,m=4,n=9請在程式中方框內填入正確的成分,完成上述要求。

  PROCEDURE sort;

  VAR i, j, k, x: integer; d: ARRAY[1..m] OF integer;

  BEGIN

  FOR i:=1 TO m DO d[i]:=(1)

  i:=1; j:=1; k:=1;

  WHILE (i<=l) AND (j<=m) DO

  BEGIN

  IF a[i]>d[j] THEN BEGIN(2) (3) _END

  ELSE BEGIN (4)__; (5) __END;

  c[k]:=x;(6)

  END;

  WHILE(7) _DO

  BEGIN c[k]:=a[i]; k:=k+1; i:=i+1;END;

  WHILE(8) _DO

  BEGIN c[k]:=d[j]; k:=k+1; j:=j+1;END;

  END. {sort} 【上海交通大學1998 七(12分)】

  36. 下列程式段search(a,n,k)在陣列a的前n(n>=1)個元素中找出第k(1<=k<=n)小的值。這裡假設陣列a中各元素的值都不相同。

  #define MAXN 100

  int a[MAXN],n,k;

  int search_c(int a[], int n, int k)

  {int low, high, i, j, m, t;

  k--,;low=0 ;high=n-1;

  do {i=low; j=high ; t=a[low];

  do{while (i
  if (i
  while (i="a[i])" i++="">
  if (i  } while (i
  a[i]=t;

  if (1)

  if (i
  }while(4) _;

  return(a[k]);

  } 【上海大學1999 一、1(8分)】

  37. 完善下列程式,每小題在PASCAL語言(a)和C語言(b)中任選一題。下面是一個將廣義表逆置的過程。例如原來廣義表為((a,b),c,(d,e)),經逆置後為:((e,d),c,(b,a))。

  (a)演算法的PASCAL語言過程描述(編者略):(b)演算法的C語言過程描述:

  typedef struct glistnode

  {int tag;

  struct glistnode *next;

  union{char data;

  struct{struct glistnode *hp,*tp;}ptr;

  }val;

  }*glist,gnode;

  glist reverse(p)

  glist p;

  {glist q,h,t,s;

  if(p==NULL) q=NULL;

  else

  {if(1) { q=(glist)malloc(sizeof(gnode)); q->tag=0;

  q->val.data=p->val.data; }

  else {(2)

  if (3)

  {t=reverse(p->val.ptr.tp); s=t;

  while(s->val.ptr.tp!=NULL) s=s->val.ptr.tp;

  s->val.ptr.tp=(glist)malloc(sizeof(gnode));

  s=s->val.ptr.tp;s->tag=1;s->val.ptr.tp=NULL;

  s->val.ptr.hp=h; (4) __ }

  else{q=(glist)malloc(sizeof(gnode));q->tag=1;

  q->val.ptr.tp=NULL;(5) }

  }

  }

  return(q);

  }

  【上海大學2002 六、3 (10分)】

  38. 完善下列程式,每小題在PASCAL語言(a)和C語言(b)中任選一題。下面的程式將數列1,2,3,…,n*n,依次按蛇型方式存放在二維陣列A[1..n,1..n]中。即(示意圖編者略)。

  (a)演算法的PASCAL 語言程式描述(編者略):(b)演算法的C語言程式描述:

  #define NMAX 10

  #include “stdio.h”

  main()

  { int i,j,n,k,p,q,m;

  int a [NMAX][NMAX];

  scanf(“%d”,&n);

  m=1;

  for(k=1;(1) ;k++)

  {if(k  for(p=1;p<=q;p++)

  {if(3) {i=q-p+1;j=p;}

  else{i=p;j=q-p+1;}

  if(4) {i=i+n-q;j=j+n-q;}

  a[i][j]=m;(5) _;

  }

  for(i=1;i<=n;i++)

  { for(j=1;j<=n;j++)

  printf(“%4d”,a[i][j])printf(“/n”);

  }

  }

  } 【上海大學2002 六、1 (10分)】

  39. 約瑟夫環問題:設有n個人圍坐一圈,並按順時針方向1—n編號。從第s個人開始進行報數,報數到第m個人,此人出圈,再從他的下一個人重新開始從1到m的報數進行下去 ,直到所有的人都出圈為止。

  PROCEDURE Josef (A:ARRAY [1..n] OF integer; s,m:integer);

  BEGIN

  FOR i:= 1 TO n DO A[i]:=i;

  sl:=s;

  FOR i:=n DOWNTO 2 DO

  BEGIN sl:=(1) __;//計算出圈人s1

  IF sl=0 THEN (2) _;

  w:=A[sl]; //A[s1]出圈

  FOR j:=(3) __ DO A[j]:=A[j+1];

  A[i]:=w;

  END;

  write('出圈序列為:’);//輸出出圈序列

  FOR i :=n DOWNTO 1 DO write(A[i]); writeln ;

  END; 【華南師範大學2000 五、2 (9分)】

  40. 設有一個揹包可以放入的物品重量為S,現有n件物品,重量分別為W1,W2,...,Wn。問能否從這n件物品中選擇若干件放入揹包,使得放入的重量之和正好是S。設布林函式Knap(S,n)表示揹包問題的解,Wi(i=1,2,...,n)均為正整數,並已順序儲存地在陣列W中。請在下列演算法的下劃線處填空,使其正確求解揹包問題。

  Knap(S,n)

  若S=0

  則Knap←true

  否則若(S<0)或(S>0且n<1)

  則Knap←false

  否則若Knap(1) , _=true

  則print(W[n]);Knap←true

  否則Knap←Knap(2) _ , _

  【山東工業大學1996 五(10分)1998 二、1 (4分)】

  

  四 應用題

  1. 陣列A[1..8,-2..6,0..6]以行為主序儲存,設第一個元素的首地址是78,每個元素的長度為4,試求元素A[4,2,3]的儲存首地址。【廈門大學1998 五、1 (5分)】

  2. 已知b對角矩陣(aij)n*n,以行主序將b條對角線上的非零元儲存在一維陣列中,每個資料元素佔L個儲存單元,儲存基地址為S,請用i,j 表示出aij的儲存位置。【北方交通大學1996 三(10分)】

  3. 陣列A中,每個元素A[i,j]的長度均為32個二進位,行下標從-1到9,列下標從1到11,從首地址S開始連續存放主儲存器中,主儲存器字長為16位。求:

  (1)存放該陣列所需多少單元?

  (2)存放陣列第4列所有元素至少需多少單元?

  (3)陣列按行存放時,元素A[7,4]的起始地址是多少?

  (4)陣列按列存放時,元素A[4,7]的起始地址是多少? 【大連海事大學1996 四、1 (6分)】

  4.假設按低下標優先儲存整型陣列A(-3:8,3:5,-4:0,0:7)時,第一個元素的位元組儲存地址是100,每個整數佔4個位元組,問A(0,4,-2,5)的儲存地址是什麼?【清華大學1996 三】

  5.設有三維陣列A[-2:4,0:3,-5:1]按列序存放,陣列的起始地址為1210,試求A(1,3,-2)所在的地址。【長沙鐵道學院1997 三、1 (3分)】

  6. 三維陣列A[1..10,-2..6,2..8]的每個元素的長度為4個位元組,試問該陣列要佔多少個位元組的儲存空間?如果陣列元素以行優先的順序存貯,設第一個元素的首地址是100,試求元素A[5,0,7] 的存貯首地址。

  【上海海運學院1995 三(6分)1997 三(8分)】

  7. 設有五對角矩陣A=(aij)20*20,按特殊矩陣壓縮儲存的方式將其五條對角線上的元素存於陣列A[-10:m]中,計算元素A[15,16]的儲存位置。【東北大學1999 一、2(4分)】

  8.陣列A[0..8, 1..10] 的元素是6 個字元組成的串,則存放A至少需要多少個位元組?A 的第8列和第5行共佔多少個位元組?若A 按行優先方式儲存,元素A[8,5]的起始地址與當A按列優先方式儲存時的哪個元素的起始地址一致? 【廈門大學2000 五、3(14%/3分)】

  9. 若按照壓縮儲存的思想將n×n階的對稱矩陣A的下三角部分(包括主對角線元素)以行序為主序方式存放於一維陣列B[1..n(n+1)/2]中,那麼,A中任一個下三角元素aij(i≥j),在陣列B中的下標位置k是什麼?【北京航空航天大學1998 一、4(4分)】

  10. 設m×n階稀疏矩陣A有t個非零元素,其三元組表表示為LTMA[1..(t+1),1..3],試問:非零元素的個數t達到什麼程度時用LTMA表示A才有意義?【北京航空航天大學1998 一、5(4分)】

  11. 利用三元組儲存任意稀疏陣列時,在什麼條件下才能節省儲存空間。【西北工業大學1998三、2(5分)】

  12. 對一個有t個非零元素的Amn矩陣, 用B[0..t][1..3]的陣列來表示,其中第0行的三個元素分別為m,n,t, 從第一行開始到最後一行,每行表示一個非零元素;第一列為矩陣元素的行號,第二列為其列號,第三列為其值。對這樣的表示法,如果需要經常進行該操作---確定任意一個元素A[i][j]在B中的位置並修改其值,應如何設計演算法可以使時間得到改善?【長沙鐵道學院1998 四、4 (6分)】

  13. 有一個二維陣列A[0:8,1:5],每個陣列元素用相鄰的4個位元組儲存,儲存器按位元組編址,假設儲存陣列元素A[0,1]的第一個位元組的地址是0,那麼儲存陣列的最後一個元素的第一個位元組的地址是多少?若按行儲存,則A[3,5]和A[5,3]的第一個位元組的地址是多少?若按列儲存,則A[7,1]和A[2,4]的第一個位元組的地址是多少?【上海海運學院1999 三(10分)】

  14. 設有三對角矩陣(ai,j)m╳n,將其三條對角線上的元素逐行的存於陣列B(1:3n-2)中,使得B[k]=ai,j,求:

  (1)用i,j表示k的下標變換公式;

  (2)若n=103,每個元素佔用L個單元,則用B[K]方式比常規儲存節省多少單元。

  【西安電子科技大學1996 二、4 (5分)】

  15. 已知A為稀疏矩陣,試從空間和時間角度,比較採用兩種不同的儲存結構(二維陣列和三元組表)完成求運算的優缺點。【西安電子科技大學1996 二、6(5分)】

  16. 特殊矩陣和稀疏矩陣哪一種壓縮儲存後失去隨機存取的功能?為什麼?

  【北京郵電大學2001 三、1(5分)】

  17. 試敘述一維陣列與有序表的異同。【西安電子科技大學1999計應用一、2(5分)】

  18. 一個n╳n的對稱矩陣,如果以行或列為主序存入記憶體,則其容量為多少?

  【西安電子科技大學1999計應用 一、3(5分)】

  19. 給出陣列A∶ARRAY[3..8,2..6] OF INTEGER;當它在記憶體中按行存放和按列存放時,分別寫出陣列元素A[i,j]地址計算公式(設每個元素佔兩個儲存單元)。【南開大學1998 一(8分)】

  20. 已知n階下三角矩陣A(即當i
  21. 設有三對角矩陣(aij)n*n,將其三條對角線上的元素逐行地存於陣列B(1:3n-2)中,使得B[k]=aij,求:(1)用i,j表示k的下標變換公式;

  (2)用k表示i,j的下標變化公式。

  【山東科技大學2001 一、6 (6分)】【長沙鐵道學院1997 五、1 (10分)】

  【東北大學2002 一(4分)】【北京工業大學2000 二、1(9分)】【南京航空航天大學2000 四】

  22. 演算法Print及所引用的陣列A的值如下,寫出呼叫Print(1)的執行結果(其中n=15)。

  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

  A B C D E F G O O H 0 I J K L

  PROCEDURE print(i:integer);

  BEGIN

  IF(i<=n〉AND (A[i] <>‘0’)THEN

  BEGIN Print(2*i);write(A[i]);Print(2*i+1);END;

  END;

  【合肥工業大學1999 四、1(5分)】

  23. 設陣列A的長度為2N,前N個元素A[1..N]遞減有序,後N個元素A[N+1..2N]遞增有序,且2N是2的整數次冪,即k=log22N為整數。例如A[1..8]=[90,85,50,10,30,65,80,100]滿足上述要求,這裡N=4,k=3,A的前4個元素和後4個元素分別遞減和遞增有序。用此例呼叫如下的Demo過程,並要求:

  (1)給出for迴圈中每次執行PerfectShuffle(A,N)和CompareExchange(A,N)的結果;

  (2)解釋Demo的功能; (3)給出Demo的時間複雜度。

  PROCEDURE PerfectShuffle(VAR A:arraytype; N:integer)

  [ i:=1; j:=1;

  WHILE i<=N DO

  [ B[j]:=A[i]; B[j+1]:=A[i+N]; i:=i+1; j:=j+2;]

  A[1..2N]:=B[1..2N]; //B copy to A

  ]

  PROCEDURE CompareExchange(VAR A:arraytype; N:integer)

  [ j:=1;

  WHILE j<2N DO

  [ IF A[j]>A[j+1] THEN A[j]←→A[j+1]; //交換A[j]和A[j+1]

  j:=j+2; ]

  ]

  PROCEDURE Demo (VAR A:arraytype;N:integer)

  //A的長度為2N,k=log22N為整數

  [ FOR i:=1 TO log22N DO

  [ PerfectShuffle(A,N); CompareExchange(A,N); ]

  ] 【中科院計算所1998 四 (15分)】 【中國科技大學1998 4(15分)】

  24. 現有演算法及正整數n和陣列A如下,求陣列C的值。

  VAR A,B,C:Array[1..100] of integer;

  FUNC AAA(s,t:integer):integer;

  IF s=t THEN IF B[s]=0 THEN AAA:=S ELSE AAA:=-s ELSE

  BEGIN

  l:=AAA(s,(s+t) DIV 2);

  r:=AAA((s+t) DIV 2+1,t);

  IF l>0 THEN AAA:=l ELSE AAA:=r;

  IF (r>0) AND(A[l]>A[r]) THEN AAA:=r

  END

  ENDF;

  PROC BBB;

  FOR i:=1 TO n DO B[i]:=0;

  FOR i:=1 TO n DO B[AAA(1,n)]:=i;

  FOR i:=1 TO n DO C[B[i]]:=A[i];

  ENDP;

  初始值:n=10,A={121,22,323,212,636,939,828,424,55,262};

  【北京郵電大學2002 五、1(10分)】

  25. 設有矩陣a且a=執行下列語句後,矩陣c和a的結果分別是什麼?

  (1)FOR i:=1 TO 3 DO

  FOR j:=1 TO 3 DO c[i,j]:=a[a[i,j],a[j,i]]

  (2) FOR i:=1 TO 3 DO

  FOR j:=1 TO 3 DO a[i,j]:=a[a[i,j],a[j,i]]

  【浙江大學1997 三(8分)】

  26. 設矩陣A為

  (1)執行語句

  FOR i:=1 TO 3 DO

  FOR j:=1 TO 3 DO ①

  C[i,j]:=A[A[i,j],A[j,i]]

  結果C矩陣的值是什麼?

  (2)所選擇的下標i,j的次序有關係嗎?

  (3)在語句①中,用A代替C,A的結果值是什麼?

  (4)對i,j這對下標取反序,即

  (3,3),(3,2),(3,1),……,(1,3),(1,2),(1,1)

  重複執行(3),把所得結果與(3)中所得結果作比較。 【吉林大學1995 二(15分)】

  27. 指出下列演算法中錯誤、低效之處,並將其改成一個正確且高效的演算法。

  PROCEDURE delk(A, m , last,i, k) ;

  {從陣列A[1..last]中刪除第i個元素起的k個元素,m為A上限}

  BEGIN

  IF(i<1) OR (i>last) OR(k<0) OR(last>m)

  THEN write ('error')

  ELSE FOR count: = 1 TO k TO

  [FOR j:=last DOWNTO i+1 DO

  A[j-1]:=A[j];

  last:=last-1]

  ENDP;{delk} 【北方交通大學1997 一 (10分)】

  28. 設輸入為整數陣列A[1..n],其中1<=A[i]<=k(1<=i<=n);輸出陣列為b[1..n];c[1..k]是臨時工作空間;閱讀下述演算法後,回答下列問題:

  PROC Demo(A,B,k){

  (1)FOR i:=1 TO k DO C[i]:=0;

  (2)FOR j:=1 TO n DO C[A[j]]:= C[A[j]]+1;

  (3)FOR i:=2 TO k DO C[i]:= C[i]+ C[i-1]

  (4)FOR j:=n DOWNTO 1 DO {

  (5) B[C[A[j]]]:=A[j];

  (6)C[A[j]]:=C[A[j]]-1 } }

  (a).當標號(2)行的迴圈執行完後,C[i](1<=i<=n)的值有何意義?

  (b).當標號(3)行的迴圈執行完後,C[i](1<=i<=n)的值有何意義?

  (c).演算法執行後,B的內容有何特點?

  (d).當k=O(n)時,演算法的時間複雜度是多少? 【中科院軟體所1997 二、2(9分)】

  29.上三角陣A(N*N)按行主序壓縮存放在陣列B中,其中A[i,j]=B[k].寫出用i,j表示的k。

  【北京工業大學2001 二、1(5分)】

  30. 設有上三角矩陣(aij)n*n,將其上三角中的元素按先行後列的順序存於陣列B(1:m)中,使得B[k]=aij且k=f1(i)+f2(j)+c,請推匯出函式f1,f2和常數c,要求f1和f2中不含常數項。

  【中科院自動化所1999】 【山東科技大學2002 一、5 (6分)】

  31. 設矩陣A=

  image009.gif


  

  (1) 若將A視為對稱矩陣,畫出對其壓縮儲存的儲存表,並討論如何存取A中元素aij(0<=i,j<4);

  (2) 若將A視為稀疏矩陣,畫出A的十字連結串列結構。 【北京科技大學1997 三(10分)】32. 設對稱矩陣A=

  image013.gif

  

  (1)若將A中包括主對角線的下三角元素按列的順序壓縮到陣列S中, 即S:

  1 0 0 2 3 0 0 0 5 0

  下標:1 2 3 4 5 6 7 8 9 10

  試求出A中任一元素的行列下標[i,j](1<=i,j<=4)與S中元素的下標K之間的關係.

  (2)若將A視為稀疏矩陣時,畫出其三元組表形式壓縮儲存表。【北京科技大學1999 三(10分)】

  33. 設對角線矩陣A=

  image015.gif


  ( 行列下標i ,j 滿足:1≤i,j≤5)

  (1)若將矩陣A壓縮儲存到陣列S 中:

  1 2 1 0 1 2 1 0 0 0 1 3 5

  下標: 1 2 3 4 5 6 7 8 9 10 11 12 13

  試求出A中已儲存之元素的行列下標(i,j)與S中元素的下標K之間的關係

  (2)若將A視為稀疏距陣時,請畫出其行邏輯連結順序表。【北京科技大學2000 三(10分)】

  34.設有一個三維陣列a[c1:d1,c2:d2,c3:d3],其中ci:di是第i維的界偶,如該陣列在記憶體中按行排列,且a[c1,c2,c3]的地址為a0,那麼請匯出下標變數a[i1,i2,i3]的地址,假設每個元素佔L個單元。

  【山東師範大學1999 四、1 (5分)】

  35.假定有下列nⅹn矩陣(n為奇數)A=

  image017.gif

  

  如果用一維陣列B按行主次序儲存A的非零元素,問:

  (1)A中非零元素的行下標與列下標的關係;

  (2)給出A中非零元素aij的下標(i,j)與B中的下標R的關係

  (3)假定矩陣中每個元素佔一個存貯單元且B的起始地址為A0,給出利用aij的下標(i,j)定位在B中的位置公式。 【上海交通大學 1998 三(12分)】

  image019.gif

  36. 對於一個對稱矩陣採用壓縮儲存,只存放它的上三角部分,

  並按列存放。例如對於一個n*n的對稱矩陣A (如右圖) ,用一

  個一維陣列B來存放它的上三角部分:

  B=[A11,A12,A22,A13,A23,A33,A14,…,A1n,A2n,…,Ann]

  同時有兩個函式:MAX(i,j)和MIN(i,j),分別計算下標i和

  j中的大者與小者。試利用它們給出求任意一個Aij在B中存放

  位置的公式。(若式中沒有MAX(I,j)和MIN(i,j)則不給分)

  【清華大學1997 五(10分)】

  37. 用三元陣列表示稀疏矩陣的轉置矩陣,並簡要寫出解題步驟。【山東工業大學1995 五 (10分)】

  38.簡述廣義表屬於線性結構的理由。【西北大學2000 一、5 (3分)】

  39. 陣列,廣義表與線性表之間有什麼樣的關係?【西北工業大學1998 一、2 (4分)】

  40. 什麼是廣義表?請簡述廣義表和線性表的主要區別。 【北京大學1997 二、2 (5分)】

  41. 求下列廣義表的運算結果。【南京航空航天大學1998 三 (10分)】

  (1)CAR(CDR(((a,b),(c,d),(e,f))))

  (2)CDR(CAR(((a,b),(c,d),(e,f))))

  (3)CAR(CDR(CAR(((a,b),(e,f)))))

  (4)CDR(CAR(CDR(((a,b),(e,f)))))

  (5)CDR(CDR(CAR(((a,b),(e,f)))))

  注:CAR運算相當於有些教材中的Head運算,CDR運算相當於Tail運算。

  42. 利用廣義表的Head和Tail運算,把原子d分別從下列廣義表中分離出來,L1=(((((a),b),d),e));L2=(a,(b,((d)),e))。 【北方交通大學1996 一、2(5分)】

  類似本題的另外敘述有:

  (1) 已知廣義表L=((((a))),((b)),(c),d),試利用head和tail運算把原子項c從L中分離出來。

  【北京郵電大學1992 三、2(25/4分)】【青島海洋大學1999 一、6 (5分)】

  (2) 畫出下列廣義表的儲存結構圖,並利用取表頭和取表尾的操作分離出原子e。

  (a,((),b),(((e))))。

  【清華大學1995 二 (10分)】

  (3) 已知廣義表A=((a,b,c),(d,e,f)) 試寫出從表A中取出原子元素e的運算。

  【西安電子科技大學 1996 二、3 (5分)】

  (4)請將香蕉banana用工具H( )—Head(),T( )—Tail( )從L中取出。

  L=(apple,(orange,(strawberry,(banana)),peach),pear)

  【北京郵電大學2000 三、2 (5分)】

  (5) 試利用廣義表取表頭head(ls)和取表尾tail(ls)的基本運算,將原子d從下列表中分解出來,請寫出每一步的運算結果。

  L=((a,(b)),((c,d)),(e,f)) 【北京工商大學2001 三(10分)】

  (6) 畫出廣義表A=(a,(b,()),(((),c)))的第一種儲存結構(表結點第二指標指向餘表)圖,並用取首元(head())和取尾元(tail())函式表示原子c。【北京工業大學2001 二、2 (5分)】

  43. 畫出下列廣義表的兩種儲存結構圖((),A,(B,(C,D)),(E,F))。【南京航空航天大學1999 三(10分)】

  44. 假設採用以下兩種結點的連結串列作為廣義表的存貯結構,表結點:(tag=1,hp,tp), 元素結點;(tag=0,data)。請畫出下列廣義表的儲存結構圖,並求它的深度和長度。

  ( ( ) , ( ( ( ) ) , ( ( ( ) ) ) ) )

  【北方交通大學1998 一(13分)】

  45.知廣義表A=(((a)),(b),c,(a),(((d,e))))

  (1)畫出其一種存貯結構圖;

  (2)寫出表的長度與深度;

  (3)用求頭部,尾部的方式求出e。【東北大學1997 一、2 (5分)】

  46.畫出具有共享結構廣義表(((b,c),d),(a),((a),((b,c),d)),e,())的存貯表示。

  【北京工業大學1996 一、3(6分)】

  47. 廣義表的結點結構如下:(TAG,DATA,LINK)。其中LINK為指向表中下一元素的指標TAG為標誌域;DATA為資料域,具體含義如下: TAG=0表示該結點為原子結點,DATA為其資料;TAG=1表示該結點為一個子表,DATA為指向該子表的指標。

  (1)說明下列演算法A的功能(注:演算法中p,t,m,n,r,q為指標演算法中的NIL對應圖中的^)

  PROCEDURE A(p,t)

  BEGIN

  q:=NIL;

  WHILE p<>NIL DO

  BEGIN

  IF p^.TAG<>0 THEN

  BEGIN

  m:=p^.DATA;

  A(m,n);

  p^.DATA:=n;

  END;

  r:=p^.LINK;

  p^.LINK:=q;

  q:=p;

  p:=r

  END;

  t:=q;

  END.

  (2)對於p所指的廣義表,畫出執行演算法A後的表結構以及p,t的值:

  

  

  

  【北方交通大學1993 六(20分)】

  類似本題的另外敘述有:

  題目基本相同,差別僅在於子表(b,c)與原子d的前後順序顛倒。【浙江大學1994 六(7分)】

  48. 寫出對廣義表A=(x,((a,b),c,d))作運算head(head(tail(A)))後的結果。

  【西安電子科技大學2000計應用 一、5(5分)】

  49.寫出廣義表的運算結果: TAIL[HEAD[TAIL[((a,b),(c,d))]]]=?

  【武漢交通科技大學1996 二、7 (3分)】

  50. 廣義表中原子個數是否即為廣義表的長度? 【西安電子科技大學2000計應用一、9(5分)】

  51. 給出下列所示的3元多項式的廣義表表示(分別以X1,X2,X3第一到第三層變元)

  P(X1X2X3)=X15X23X3+2X15X22X34+5X15X23X33+3X1X24X32+X2X3+6

  【華南理工大學2001 一、2(4分)】

  52. 設某表H如下:

  A B C X

  a1 a2 b1 c1 c2

  其中A,B,C為子表名,a1,a2,b1,c1,c2,x為其元素。

  (1)試用廣義表形式表示H,並寫出運算HEAD(H)和TAIL(H) 函式從H中取出單元素a2的運算;

  (2)畫出表H的鏈式儲存結構;【北京科技大學1998 三(10分)】

  

  五演算法設計題

  1. 設有大小不等的n 個數據組(n個數據組中資料的總數為m),順序存放在空間區D內,每個資料佔一個儲存單元,資料組的首地址由陣列S給出,(如下圖所示),試編寫將新資料x插入到第i個數據組的末尾且屬於第i 個數據組的演算法,插入後,空間區D和陣列S的相互關係仍保持正確。

  【東北大學2000 六(15分)】

  image023.jpg

  

  2. 以三元組表存貯的稀疏矩陣A,B非零元個數分別為m和n。試用類PASCAL語言編寫時間複雜度為O(m+n)的演算法將矩陣B加到矩陣A上去。A的空間足夠大,不另加輔助空間。要求描述所用結構。

  【北京工業大學1997 三(10分)】

  3. 設整數x1,x2,…,xN已存放在陣列A中,編寫一PASCAL遞迴過程,輸出從這n個數中取出所有k 個數的所有組合(k<=n)。例:若A中存放的數是1,2,3,4,5,k為3,則輸出結果應為:543,542,541,532,531,521,432,431,421,321。 【山東大學1992 五 (13分)】

  類似本題的另外敘述有:

  (1)題目基本相同,只是敘述不同,要求用PASCAL語言。【東南大學2001 三 (10分)】

  4.編寫一個過程,對一個n×n矩陣,通過行變換,使其每行元素的平均值按遞增順序排列。

  【中科院軟體所1996 】

  5. 設原來將N個自然數1,2,…,N按某個順序存於陣列A中,經過下面的語句計算,使A[I]的值變為A[1]到A[I-1]中小於原A[I]值的個數。

  FOR I:=N DOWNTO 1 DO

  BEGIN

  C:=0;

  FOR J:=1 TO I-1 DO

  IF A[J][i]>時,有aij=0),按照壓縮儲存的思想,可以將其主對角線以下所有元素(包括主對角線上元素)依次存放於一維陣列b中,請寫出從第一列開始採用列序為主序分配方式時在b中確定元素aij的存放位置的公式。【北京航空航天大學1999二(10分)】>)q=k;>)>);>)>)>
[j])>,a[i][j]=t[(4)]。【青島大學2001>)的位置k的關係為(>