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


第4章  數組和廣義表

【例4-1】二維數組A的每一個元素是由6個字符組成的串,其行下標i=0,1,…,8,列下標j=1,2,…,10。若A以行為主序存儲元素,A[8][5]的物理地址與當A按列為主序存儲時的元素(  )的物理地址相同。設每個字符占一個字節。

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

//作圖

 

解:  二維數A是一個9行10列的矩陣,即A[9][10]。按行存儲時,A[8][5]是第85個元素存儲的元素。而按列存儲時,第85個存儲的元素是A[3][10]。即正確答案為B。

【例4-2】若對n階對稱矩陣A以行序為主序方式將其下三角形的元素包括主對角線上所有元素)依次存放於一維數組B[n(n+1)/2]中,則在B中確定的位置k的關系為(  )。

A.  B.  C.  D.

解:  如果a按行存儲,那么它的前面有i-1行,其有元素個數為:

1+2+3+…+(i-1)=i(i-1)/2。同時它又是所在行的第j列,因此它排列的順序還得加上j,一維數組B[n(n+1)/2]中的位置k與其下標的關系是:。

因此答案為A。

 

【例4-3】已知n階下三角矩陣A,按照壓縮存儲的思想,可以將其主對角線以下所有元素(包括主對角線上元素)依次存放於一維數組B中。請寫出從第一列開始以列序為主序分配方式時在B中確定元素a的存放位置的公式。

 

 

解:  如果a按列存儲,那么它的前面有j-1列,共有元素:

n+(n-1)+(n-2)+ …+[n-(j-2)]    //j-1-1

=(j-1)*n-

而它又是所在列的第i行,因此在它前的元素個數還得加上i。因此它在一維數組B中的存儲順序為:

(j-1)*n-+i    //感覺不對,應該是+(i-n/2)

 

【例4-4】已知廣義表L=((x,y,z),a,(u,t,w)),從L表中取出的原子項ASCII碼最大的運算是(  )。//取z

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

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

C.head(tail(tail(head(L))))   //表尾一定是個表

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

解:選項A的結果是字符串“u”;選項B的結果是空表,無字符;選項C的結果是字符“z”;選項D的結果是字符“t”。從所有選項的結果可以看出,ASCII碼最大的是字符“z”。因此正確答案是C。

習題4

一、單項選擇題

1. 設二維數組A[0…m-1][0…n-1]按行優先順序存儲在內存中,第一個元素的地址為p,每個元素占k個字節,則元素aij的地址為(  A)。

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

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

2. 已知二維數組A10×10中,元素a20的地址為560,每個元素占4個字節,則元素a10的地址為(  A)。

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

3. 若數組A[0…m][0…n]按列優先順序存儲,則aij地址為(3. A )。

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

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

4. 若下三角矩陣An×n,按列順序壓縮存儲在數組Sa[0…(n+1)n/2]中,則非零元素aij的地址為(4. B)。(設每個元素占d個字節)

A. [(j-1)*n-+i-1]*d

B. [(j-1)*n-+i]*d    //日了特朗普了

C.[(j-1)*n-+i+1]*d

D.[(j-1)*n-+i-2]*d

5. 設有廣義表D=(a,b,D),其長度為(B ),深度為(A )。

A.無窮大      B.3             C.2             D.5

6. 廣義表A=(a),則表尾為(6. C  )。

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

7. 廣義表A=((x,(a,B)),(x,(a,B),y)),則運算head(head(tail(A)))的結果為(7. A )。

A.x           B.(a,B)         C.(x,(a,B))    D.A

8. 下列廣義表用圖來表示時,分支結點最多的是(  8. A)。

A.L=((x,(a,B)),(x,(a,B),y))     B.A=(s,(a,B))

C.B=((x,(a,B),y))               D.D=((a,B),(c,(a,B),D)

9. 通常對數組進行的兩種基本操作是(9. C)。

A.建立與刪除                     B.索引和修改   

C.查找和修改     //讀和寫                 D.查找與索引

10. 假定在數組A中,每個元素的長度為3個字節,行下標i從1到8,列下標j從1到10,從首地址SA開始連續存放在存儲器內,存放該數組至少需要的單元數為(10. C)。

A.80             B.100          C.240           D.270

11. 數組A中,每個元素的長度為3個字節,行下標i從1到8,列下標j從1到10,從首地址SA開始連續存放在存儲器內,該數組按行存放時,元素A[8][5]的起始地址為(11. C )。

A.SA+141         B.SA+144       C.SA+222       D.SA+225

12. 稀疏矩陣一般的壓縮存儲方法有兩種,即(12. C )。

A.二維數組和三維數組          B.三元組和散列

C.三元組和十字鏈表            D.散列和十字鏈表

13. 若采用三元組壓縮技術存儲稀疏矩陣,只要把每個元素的行下標和列下標互換,就完成了對該矩陣的轉置運算,這種觀點(13. B  )。

A.正確                           B.不正確

14. 一個廣義表的表頭總是一個(14. D)。

A.廣義表         B.元素         C.空表         D.元素或廣義表

15. 一個廣義表的表尾總是一個(  15.A)。

A.廣義表          B.元素         C.空表          D.元素或廣義表

16. 數組就是矩陣,矩陣就是數組,這種說法(16.B )。

A.正確                         B.錯誤      

C.前句對,后句錯                  D.后句對

二、填空題

1. 一維數組的邏輯結構是________線性結構______,存儲結構是____順序結構__________;對於二維或多維數組,分為_____以行為主序_________和____以列為主序__________兩種不同的存儲方式。

2. 對於一個二維數組A[m][n],若按行序為主序存儲,則任一元素A[i][j]相對於A[0][0]的地址為_______ i×n+j個元素位置_______。

3. 一個廣義表為(a,(a,b),d,e,((i,j),k))則該廣義表的長度為__5___,深度為_3____。

4. 一個稀疏矩陣為                 ,則對應的三元組線性表為____((0,2,2),(1,0,3),(2,2,-1),(2,3,5))_________。

 

 
   

 

 

 

 

 

 

 

 

 

5. 一個n×n的對稱矩陣,如果以行為主序或以列為主序存入內存,則其容量為__________ n(n+1)/2____。

6. 已知廣義表A=((a,b,c),(d,e,f)),則運算head(tail(head((tail(A))))=____e _____。

7. 設有一個10階的對稱矩陣A,采用壓縮存儲方式以行序為主序存儲,a為第一個元素,其存儲地址為0,每個元素占有1個存儲地址空間,則a的地址為_______41_______。

//壓縮存儲,以行為主序

8. 已知廣義表Ls=(a,(b,c,d),e),運用head和tail函數取出Ls中的原子b的運算是__________ head(head(tail(Ls)))____。

9. 三維數組R[c1…d1,c2…d2,c3…d3]共含有________(d-c+1)×(d-c+1)×(d-c+1)______個元素。(其中:c1≤d1,c2≤d2,c3≤d3

10. 數組A[1…10,-2…6,2…8]以行優先的順序存儲,設第一個元素的首地址是100,每個元素占3個存儲長度的存儲空間,則元素A[5,0,7]的存儲地址為________913______。

//該數組可以看做A[10][9][7]    100+(5-1)*9*7*3+(0--2)*7*3+(7-2)*3=913

三、判斷題

1. 數組可看作基本線性表的一種推廣,因此與線性表一樣,可以對它進行插入、刪除等操作。(  × )//數組一旦固定后就不能插入或修改

2. 多維數組可以看作數據元素也是基本線性表的基本線性表。(√)

3. 以行為主序或以列為主序對於多維數組的存儲沒有影響。(√)

4. 對於不同的特殊矩陣應該采用不同的存儲方式。(√)//特殊矩陣采用數組法,稀疏矩陣采用三元組法

5. 采用壓縮存儲之后,下三角矩陣的存儲空間可以節約一半。(×)

6. 在一般情況下,采用壓縮存儲之后,對稱矩陣是所有特殊矩陣中存儲空間節約最多的。(×)//稀疏矩陣

7. 矩陣不僅是表示多維數組,而且是表示圖的重要工具。(√)//圖的鄰接矩陣表示法

8. 距陣中的數據元素可以是不同的數據類型。(×)//通常用二維數組表示矩陣

9. 矩陣中的行列數往往是不相等的。(×)//沒有往往

10. 廣義表的表頭可以是廣義表,也可以是單個元素。(√)

11. 廣義表的表尾一定是一個廣義表。(√)

12. 廣義表的元素可以是子表,也可以是單元素。(√)

13. 廣義表不能遞歸定義。(×)//廣義表是遞歸定義的

14. 廣義表實際上是基本線性表的推廣。(√)

15. 廣義表的組成元素可以是不同形式的元素。(√)//可以是原子也可以是表



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM