做數據結構算法題遇到的問題1

1.一個棧的入棧序列爲ABCDE,則棧的不可能的輸出序列爲()
在這裏插入圖片描述
解析:
A選項錯誤:既然D先出棧,表示ABC一定已經入棧了,那麼出棧順序中,B一定比A先出棧!後進先出
B選項:ABCDE先全部入棧,再全部出棧;
C選項:ABCD先入棧,再將D出棧,再將E入棧,再將所有數據以此出棧;
D選項:A入棧馬上出棧,B入棧馬上出棧,C入棧馬上出棧。。。

2.HashMap的數據結構是怎樣的:
在這裏插入圖片描述
解析:
JDK8以後,HashMap的數據結構是數組+鏈表+紅黑樹
3.數組Q[0…m-1]用來表示一個循環隊列, 用front指向隊頭元素,rear指向隊尾元素的後一個位置 ,則當前隊列中的元素數是。(隊列總的元素數不會超過隊列大小)
在這裏插入圖片描述
解析:
因爲是循環鏈表 rear不一定就比front地址高 所以有可能rear-fornt得到結果是負數 所以爲了正確性起見需要+m再%m

還有一個問題:
設有一個用數組Q[1…m]表示的環形隊列,約定f爲當前隊頭元素在數組中的位置,r爲隊尾元素的後一位置(按順時針方向),若隊列非空,則計算隊列中元素個數的公式應爲()
(m+r-f)mod m

應用:
設循環隊列的容量爲50(序號從0到49),現經過一系列的入隊和出隊運算後,有 front=16,rear=5(rear指向隊尾元素的後一位置),當前循環隊列中元素個數爲(39
計算公式:(5-16+50)%50=39

4.向一個棧頂指針爲hs的鏈棧中插入一個s結點時,應執行______。
在這裏插入圖片描述
解析:
題目問的應該就是壓棧。
s插入後成爲棧頂,s的next就是原來的HS,棧頂指針重新複製爲s。

往棧中插入數據,棧是向下生長的,由高地址到低地址,所以s節點就是在低地址處,hs指向原棧頂,插入s後,s是新的棧頂,s的地址比原棧頂hs地址低,所以是s->next=hs,最後hs=s更新棧頂指針指向

5.關於棧和隊列,下列說法正確的有()
A 可以使用隊列模擬棧,但棧不能模擬隊列
B 棧和隊列都不支持隨機訪問
C 棧是一種樹形數據結構
D 棧具有後進先出的特徵

正確答案: B D

6.一個順序表第一個元素的存儲地址是100,每個元素的長度爲2,則第5個元素的地址是( )。

正確答案: 108
解析:
第一個元素的存儲地址是100,第二個是102,第三個是104,第五個是108

7.假定一個二維數組的定義語句爲“int a[3][4]={{3,4},{2,8,6}};”,則元素a[1][2]的值爲(6)

解析:

數組爲3行4列如下
a[0]::3 4 0 0
a[1]::2 8 6 0
a[2]::0 0 0 0
a[1][2]求的是第二行第三列的值,所以爲6

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

解析:

首先,本題的數組是從A[1][1]開始的,
也就是說和所謂的數組從零開始沒什麼關係。

A[1][1]的起始地址爲SA,那麼A[1][2]爲SA+3.....
A[2][1]爲SA+3*10.....A[i][j]爲SA+((i-1)*10+(j-1))*3。
那麼A[8][5]的起始地址就是SA+ (7*10+4)*3=SA+222.

9.設一組初始關鍵字記錄關鍵字爲(20,15,14,18,21,36,40,10),則以20爲基準記錄的一趟快速排序結束後的結果爲( )。
10,15,14,18,20,36,40,21
解析:

原序列:20(基準),15,14,18,21,36,40,10

改1:10(low1),15,14,18,21,36,40,20(high1)
   :10,15(low2),14,18,21,36,40,20(high2)
   :10,15,14(low3),18,21,36,40,20(high3)
   :10,15,14,18(low4),21,36,40,20(high4)
   
改2:10,15,14,18,20(low5),36,40,21(high5)
   :10,15,14,18,20(low6),36(high6),40,21
   :10,15,14,18,20(low7),36,40(high6),21
   
最終結束快排後的結果:10,15,14,18,20,36,40,21

10.下列敘述中正確的是( )
在這裏插入圖片描述
解析:
在棧中,棧底指針保持不變,有元素入棧,棧頂指名增加,有元素出棧,棧頂指針減少。
在循環隊列中,隊頭指針和隊尾指針的動態變化決定隊列的長度。
在循環鏈表中,前一個結點指向後一個結點,而最後一個結點指向頭結點,只有頭結點是固定的。
線性鏈表中,由於前一個結點包含下一個結點的指針,尾結點指針爲空,要插入或刪除元素,只需要改變相應位置的結點指針即可,頭指針和尾指針無法決定鏈表長度。
故本題答案爲 A 選項。

c如果改成循環隊列,就是成立的

10.以下開源軟件中經常被用作隊列的是哪個?
A.MongoDB
B.Redis
C.Memcached
D.kafka

正確答案: B D

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章