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