接着來看一些牛客網的專項練習題目,20道選擇題。
分析:順序存儲的線性表不但邏輯上連續,物理上也連續,可以使用順序查找法。
鏈式存儲的線性表雖然物理上不一定連續,但邏輯上連續,也可以使用順序查找法。
分析:特殊矩陣中如果元素有規律,一般採用數組存儲。而像稀疏矩陣中元素沒有規律的情況下,一般採用三元組或者僞地址表示法。
分析:無論採用什麼方式建立單鏈表,都需要掃描這n個元素,邊掃描邊創建單鏈表中的結點並鏈接起來,其時間複雜度爲O(n)。
分析:線性結構指的是數據元素之間存在一對一的線性關係,分線性結構中一個結點可能對應多個元素。
常見的線性結構有:線性表、棧、隊列、雙隊列、一維數組、串等。
非線性結構有:樹、圖、多維數組等。
分析:
分析:
分析:見第6題的分析表。
分析:
二分查找因爲每次都是從中間點開始查找,所以最壞情況是目標元素存在於最邊緣的情況。 比如1~9,最壞情況就是1或者9,當然4,6這種也算是邊緣(中心的邊緣)。 因爲二分查找每次排除掉一半的不適合值,所以對於n個元素的情況: 一次二分剩下:n/2 兩次二分剩下:n/2/2 = n/4 m次二分剩下:n/(2^m) 在最壞情況下是在排除到只剩下最後一個值之後得到結果,所以爲 n/(2^m)=1; 2^m=n; 所以時間複雜度爲:log(n)
分析:在待排序數據大部分已經有序時,用直接插入排序更好。
分析:A選項的意思是將s2拼接到s1後面。
分析:不穩定的算法有希爾排序、快速排序、選擇排序、堆排序。
分析:見第6題的分析表。
分析:定義一個數組使用[ ]確定其大小,[ ]中的值須爲定值,define宏定義的值也爲定值,可以用來定義數組。
分析:其他的排序時間複雜度在O(n^2),歸併排序無論怎樣時間複雜度還是O(nlog2n)。
分析:兩個棧的棧頂,一個在數組第一個元素,朝着數組索引增加方向增加,一個棧頂在數據最後一個元素,朝着數組索引減少方向增加,當兩個棧的棧頂位置相差1時,數組被寫滿。
分析:int型元素佔4個字節,100個元素總共是100*4=400。
分析:
x(8)=x(6)+x(4)+1 遞歸計算x(8)第一次調用
x(6)=x(4)+x(2)+1 遞歸計算x(6)第二次調用
x(4)= x(2)+x(0)+1 遞歸計算x(4)第三次調用
x(4)= x(2)+x(0)+1 遞歸計算x(4)第四次調用
之後再調用x()計算黑體部分的結果(5次,加上前面4次,一共9次),最後x(8)返回值爲9
接着計算x(9)
x(9)=x(7)+x(5)+1 遞歸計算x(9)第一次調用
x(7)=x(5)+x(3)+1 遞歸計算x(7)第二次調用
x(5)=x(3)+x(1)+1 遞歸計算x(5)第三次調用
x(5)=x(3)+x(1)+1 遞歸計算x(5)第四次調用
之後再調用x()計算黑體部分的結果(5次,加上前面4次,一共9次),最後x(8)返回值爲9
所以總共調用x()的次數是9+9=18
分析:這道題題目問的是x(8)需要調用幾次,最後答案應該是A,9次。
以8爲根節點畫出分支樹 8個分支表明調用8次 再加上自身調用x(8)一次 共9次
8
6 4
4 2 2 0
2 0
分析:
思想類似於兩端向中間掃描
1、設定兩個指針P1、P2,分別指向數組開始和結尾,即P1指向最小值,P2指向最大值;
2、計算 *P1+*P2 的值爲 SUM,與 sum 比較,記錄它們的差值 DIF 和 SUM,若 SUM<sum,P1++,若SUM>sum,P2--;
3、重複以上過程直到DIF最小。
分析:
數組元素在內存中是連續存放,由於每個元素佔用內存相同,可以通過下標迅速訪問數組中任何元素。但是如果要在數組中增加一個元素,需要移動大量元素,在內存中空出一個元素的空間,然後將要增加的元素放在其中。同樣的道理,如果想刪除一個元素,同樣需要移動大量元素去填掉被移動的元素。如果應用需要快速訪問數據,很少或不插入和刪除元素,就應該用數組。
鏈表恰好相反,鏈表中的元素在內存中不是順序存儲的,而是通過存在元素中的指針聯繫到一起。比如:上一個元素有個指針指到下一個元素,以此類推,直到最後一個元素。如果要訪問鏈表中一個元素,需要從第一個元素開始,一直找到需要的元素位置。但是增加和刪除一個元素對於鏈表數據結構就非常簡單了,只要修改元素中的指針就可以了。如果應用需要經常插入和刪除元素就需要用鏈表數據結構了。
好了,這次就說到這裏。