日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据结构快速掌握和温习-面试神器

發布時間:2025/3/12 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构快速掌握和温习-面试神器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

由于原文有部分文字沒有顯示,本文有所修改。主要包括文字和縮進。

目錄

Q1:數據結構和算法的知識點整理:

Q2:鏈表,隊列和棧的區別

Q3:簡述快速排序過程

Q4:快速排序算法的原理

Q5:簡述各類算法時間復雜度、空間復雜度、穩定性對比

Q6:什么是 AVL 樹?

Q7:什么是紅黑樹??

Q8:AVL 樹和紅黑樹的區別?

Q9:B 樹和B+ 樹的區別?

Q10:排序有哪些分類?

Q11:直接插入排序的原理?

Q12:希爾排序的原理?

Q13:直接選擇排序的原理??

Q14:堆排序的原理?

Q15:冒泡排序的原理?

Q16:快速排序的原理?

Q17:循環和遞歸,你說下有什么不同的點?

Q18:排序算法怎么選擇?


Q1:數據結構和算法的知識點整理:


?數據結構和算法的需要掌握的知識點:


Q2:鏈表,隊列和棧的區別

鏈表是一種物理存儲單元上非連續的一種數據結構,看名字我們就知道他是一種鏈式的結構,就像一群人手牽著手一樣。鏈表有單向的,雙向的,還有環形的。

隊列是一種特殊的線性表,他的特殊性在于我們只能操作他頭部和尾部的元素,中間的元素我們操作不了,我們只能在他的頭部進行刪除,尾部進行添加。就像大家排隊到銀行取錢一樣,先來的肯定要排到前面,后來的只能排在隊尾,所有元素都要遵守這個操作,沒有VIP會員,所以走后門插隊的現象是不可能存在的,他是一種先進先出的數據結構。我們來看一下隊列的數據結構是什么樣的。

棧也是一種特殊的線性表,他只能對棧頂進行添加和刪除元素。棧有入棧和出棧兩種操作,他就好像我們把書一本本的摞起來,最先放的書肯定是摞在下邊,最后放的書肯定是摞在了最上面,摞的時候不允許從中間放進去,拿書的時候也是先從最上面開始拿,不允許從下邊或中間抽出來。

Q3: 簡述快速排序過程

1)選擇一個基準元素,通常選擇第一個元素或者最后一個元素,

2)通過一趟排序將待排序的記錄分割成獨立的兩部分,其中一部分記錄的元素值均比基準元素值小。另一部分記錄的元素值比基準值大。

3)此時基準元素在其排好序后的正確位置

4)然后分別對這兩部分記錄用同樣的方法繼續進行排序,直到整個序列有序。

Q4:快速排序算法的原理


是對冒泡排序的一種改進,不穩定,平均/最好時間復雜度 O(nlogn),元素基本有序時最壞時間復雜度O(n2),空間復雜度 O(logn)。

首先選擇1個基準元素,通過n趟排序將要排序的數據分割成獨立的兩部分,一部分全部小于等于基準元素,一部分全部大于等于基準元素,再按此方法遞歸對這兩部分數據進行快速排序。快速排序的一次劃分從兩頭交替搜索,直到 low 和 high 指針重合,一趟時間復雜度 O(n),整個算法的時間復雜度與劃分趟數有關。


最好情況是每次劃分選擇的中間數恰好將當前序列等分,經過 log(n) 趟劃分便可得到長度為 1 的數據表, 這樣時間復雜度 O(nlogn)。


最壞情況是每次所選中間數是當前序列中的最大或最小元素,這使每次劃分所得數據表其中1個為空表 , 這樣長度為 n 的數據表需要 n 趟劃分,整個排序時間復雜度 O(n2)。

Q5:簡述各類算法時間復雜度、空間復雜度、穩定性對比

排序算法平均時間復雜度最壞時間復雜度空間復雜度是否穩定
冒泡排序O(n2)O(n2)O(n2)O(n2)O(1)O(1)
選擇排序O(n2)O(n2)O(n2)O(n2)O(1)O(1)不是
直接插入排序O(n2)O(n2)O(n2)O(n2)O(1)O(1)
歸并排序O(nlogn)O(nlogn)O(nlogn)O(nlogn)O(n)O(n)
快速排序O(nlogn)O(nlogn)O(n2)O(n2)O(logn)O(logn)不是
堆排序O(nlogn)O(nlogn)O(nlogn)O(nlogn)O(1)O(1)不是
希爾排序O(nlogn)O(nlogn)O(ns)O(ns)O(1)O(1)不是
計數排序O(n+k)O(n+k)O(n+k)O(n+k)O(n+k)O(n+k)
基數排序O(N?M)O(N?M)O(N?M)O(N?M)O(M)O(M)


Q6:什么是 AVL 樹?

AVL樹本質上還是一棵二叉搜索樹,它的特點是:
1.本身首先是一棵二叉搜索樹。
2.帶有平衡條件:每個結點的左右子樹的高度之差的絕對值(平衡因子)最多為1。
也就是說,AVL樹,本質上是帶了平衡功能的二叉查找樹(二叉排序樹,二叉搜索樹)。

旋轉
AVL樹的基本操作一般涉及運做同在不平衡的二叉查找樹所運做的同樣的算法。但是要進行預先或隨后做一次或多次所謂的"AVL 旋轉"。
假設由于在二叉排序樹上插入結點而失去平衡的最小子樹根結點的指針為a(即a是離插入點最近,且平衡因子絕對值超過1的祖先結點),則失去平衡后進行進行的規律可歸納為下列四種情況:
單向右旋平衡處理LL:由于在*a的左子樹根結點的左子樹上插入結點,*a的平衡因子由1增至2,致使以*a為根的子樹失去平衡,則需進行一次右旋轉操作;
單向左旋平衡處理RR:由于在*a的右子樹根結點的右子樹上插入結點,*a的平衡因子由-1變為-2,致使以*a為根的子樹失去平衡,則需進行一次左旋轉操作;
雙向旋轉(先左后右)平衡處理LR:由于在*a的左子樹根結點的右子樹上插入結點,*a的平衡因子由1增至2,致使以*a為根的子樹失去平衡,則需進行兩次旋轉(先左旋后右旋)操作。先左旋*a的左子樹,再右旋*a。
雙向旋轉(先右后左)平衡處理RL:由于在*a的右子樹根結點的左子樹上插入結點,*a的平衡因子由-1變為-2,致使以*a為根的子樹失去平衡,則需進行兩次旋轉(先右旋后左旋)操作。先右旋*a的右子樹,再左旋*a。

插入
向AVL樹插入可以通過如同它是未平衡的二叉查找樹一樣把給定的值插入樹中,接著自底向上向根節點折回,于在插入期間成為不平衡的所有節點上進行旋轉來完成。因為折回到根節點的路途上最多有 1.5 乘 log n 個節點,而每次 AVL 旋轉都耗費恒定的時間,插入處理在整體上耗費 O(log n) 時間。 在平衡的的二叉排序樹Balanced BST上插入一個新的數據元素e的遞歸算法可描述如下: 若BBST為空樹,則插入一個數據元素為e的新結點作為BBST的根結點,樹的深度增1; 若e的關鍵字和BBST的根結點的關鍵字相等,則不進行; 若e的關鍵字小于BBST的根結點的關鍵字,而且在BBST的左子樹中不存在和e有相同關鍵字的結點,則將e插入在BBST的左子樹上,并且當插入之后的左子樹深度增加(+1)時,分別就下列不同情況處理之:BBST的根結點的平衡因子為-1(右子樹的深度大于左子樹的深度,則將根結點的平衡因子更改為0,BBST的深度不變; BBST的根結點的平衡因子為0(左、右子樹的深度相等):則將根結點的平衡因子更改為1,BBST的深度增1; BBST的根結點的平衡因子為1(左子樹的深度大于右子樹的深度):則若BBST的左子樹根結點的平衡因子為1:則需進行單向右旋平衡處理,并且在右旋處理之后,將根結點和其右子樹根結點的平衡因子更改為0,樹的深度不變; 若e的關鍵字大于BBST的根結點的關鍵字,而且在BBST的右子樹中不存在和e有相同關鍵字的結點,則將e插入在BBST的右子樹上,并且當插入之后的右子樹深度增加(+1)時,分別就不同情況處理之。

刪除
從AVL樹中刪除可以通過把要刪除的節點向下旋轉成一個葉子節點,接著直接剪除這個葉子節點來完成。因為在旋轉成葉子節點期間最多有 log n個節點被旋轉,而每次 AVL 旋轉耗費恒定的時間,刪除處理在整體上耗費 O(log n) 時間。
查找
在AVL樹中查找同在一般BST完全一樣的進行,所以耗費 O(log n) 時間,因為AVL樹總是保持平衡的。不需要特殊的準備,樹的結構不會由于查詢而改變。(這是與伸展樹查找相對立的,它會因為查找而變更樹結構。)

?
Q7:什么是紅黑樹?
?

紅黑樹 是 1972 年發明的,稱為對稱二叉 B 樹,1978 年正式命名紅黑樹。主要特征是在每個節點上增加一i個屬性表示節點顏色,可以紅色或黑色。

紅黑樹和 AVL 樹 類似,都是在進行插入和刪除時通過旋轉保持自身平衡,從而獲得較高的查找性能。與 AVL 樹 相比,紅黑樹不追求所有遞歸子樹的高度差不超過 1,保證從根節點到葉尾的最長路徑不超過最短路徑的 2 倍,所以最差時間復雜度是 O(logn)。

紅黑樹通過重新著色和左右旋轉,更加有效地完成了插入和刪除之后的?平衡調整。紅黑樹在本質上還是二叉查找樹,它額外引入了 5 個約束條件: ① 節點只能是紅色或黑色。 ② 根節點必須是黑色。 ③ 所有 NIL 節點都是黑色的。 ④ 一條路徑上不能出現相鄰的兩個紅色節點。 ⑤ 在任何遞歸子樹中,根節點到葉子節點的所有路徑上包含相同數?的??節點。


這五個約束條件保證了紅黑樹的新增、刪除、查找的最壞時間復雜度均為 ???O(logn)。如果?個樹的左?節點或右?節點不存在,則均認定為??。紅?樹的任何旋轉在 3 次之內均可完成。

?
Q8:AVL 樹和紅?樹的區別?


紅黑樹的平衡性不如 AVL 樹,它維持的只是?種?致的平衡,不嚴格保證左右?樹的?度差不超過 1。這導致節點數相同的情況下,紅?樹的?度可能更?,也就是說平均查找次數會?于相同情況的 AVL 樹。


在插?時,紅?樹和 AVL 樹都能在?多兩次旋轉內恢復平衡,在刪除時由于紅?樹只追求?致平衡,因此紅?樹?多三次旋轉可以恢復平衡,? AVL 樹最多需要 O(logn) 次。AVL 樹在插?和刪除時,將向上回溯確定是否需要旋轉,這個回溯的時間成本最差為 O(logn),?紅?樹每次向上回溯的步?為 2,回溯成本低。因此?對頻繁地插?與刪除紅?樹更加合適。


Q9:B 樹和B+ 樹的區別?

?
B 樹中每個節點同時存儲 key 和 data,? B+ 樹中只有葉?節點才存儲 data,?葉?節點只存儲 key。InnoDB 對 B+ 樹進?了優化,在每個葉?節點上增加了?個指向相鄰葉?節點的鏈表指針,形成了帶有順序指針的 B+ 樹,提?區間訪問的性能。


B+ 樹的優點在于: ① 由于 B+ 樹在?葉?節點上不含數據信息,因此在內存?中能夠存放更多的key,數據存放得更加緊密,具有更好的空間利?率,訪問葉?節點上關聯的數據也具有更好的緩存命 ????中率。 ② B+樹的葉?結點都是相連的,因此對整棵樹的遍歷只需要?次線性遍歷葉?節點即可。? B 樹則需要進?每?層的遞歸遍歷,相鄰的元素可能在內存中不相鄰,所以緩存命中性沒有 B+樹好。但是 B 樹也有優點,由于每個節點都包含 key 和 value,因此經常訪問的元素可能離根節點更近,訪問也更迅速。


Q10:排序有哪些分類?

排序可以分為內部排序和外部排序,在內存中進?的稱為內部排序,當數據量很?時?法全部拷?到內存需要使?外存,稱為外部排序。


內部排序包括?較排序和??較排序,?較排序包括插?/選擇/交換/歸并排序,??較排序包括計數/ ?基數/桶排序。
?
插?排序包括直接插?/希爾排序,選擇排序包括直接選擇/堆排序,交換排序包括冒泡/快速排序。

?
Q11:直接插?排序的原理?

?穩定,平均/最差時間復雜度 O(n2),元素基本有序時最好時間復雜度 O(n),空間復雜度 O(1)。
每?趟將?個待排序記錄按其關鍵字的??插?到已排好序的?組記錄的適當位置上,直到所有待排序 記錄全部插?為?。


直接插?沒有利?到要插?的序列已有序的特點,插?第 i 個元素時可以通過?分查找找到插?位置insertIndex,再把 i~insertIndex 之間的所有元素后移?位,把第 i 個元素放在插?位置上。

Q12:希爾排序的原理?

?
?稱縮?增量排序,是對直接插?排序的改進,不穩定,平均時間復雜度 O(n^1.3^),最差時間復雜度O(n2),最好時間復雜度 O(n),空間復雜度 O(1)。


把記錄按下標的?定增量分組,對每組進?直接插?排序,每次排序后減?增量,當增量減? 1 時排序完畢。

Q13:直接選擇排序的原理?
?

不穩定,時間復雜度 O(n2),空間復雜度 O(1)。


每次在未排序序列中找到最?元素,和未排序序列的第?個元素交換位置,再在剩余未排序序列中重復 ????該操作直到所有元素排序完畢。

?
Q14:堆排序的原理?


?是對直接選擇排序的改進,不穩定,時間復雜度 O(nlogn),空間復雜度 O(1)。


將待排序記錄看作完全?叉樹,可以建??根堆或?根堆,?根堆中每個節點的值都不?于它的?節點 ????值,?根堆中每個節點的值都不?于它的?節點值。


以?根堆為例,在建堆時?先將最后?個節點作為當前節點,如果當前節點存在?節點且值?于?節點,就將當前節點和?節點交換。在移除時?先暫存根節點的值,然后?最后?個節點代替根節點并作 為當前節點,如果當前節點存在?節點且值?于?節點,就將其與值較?的?節點進?交換,調整完堆 ????后返回暫存的值。


Q15:冒泡排序的原理?


?穩定,平均/最壞時間復雜度 O(n2),元素基本有序時最好時間復雜度 O(n),空間復雜度 O(1)。
?
?較相鄰的元素,如果第?個?第?個?就進?交換,對每?對相鄰元素做同樣的?作,從開始第?對 ????到結尾的最后?對,每?輪排序后末尾元素都是有序的,針對 n 個元素重復以上步驟 n -1 次排序完畢。


當序列已經有序時仍會進?不必要的?較,可以設置?個標志記錄是否有元素交換,如果沒有直接結束?較。

Q16:快速排序的原理?


?
是對冒泡排序的?種改進,不穩定,平均/最好時間復雜度 O(nlogn),元素基本有序時最壞時間復雜度O(n2),空間復雜度 O(logn)。


?先選擇?個基準元素,通過?趟排序將要排序的數據分割成獨?的兩部分,?部分全部?于等于基準 ????元素,?部分全部?于等于基準元素,再按此?法遞歸對這兩部分數據進?快速排序。
快速排序的?次劃分從兩頭交替搜索,直到 low 和 high 指針重合,?趟時間復雜度 O(n),整個算法的時間復雜度與劃分趟數有關。


最好情況是每次劃分選擇的中間數恰好將當前序列等分,經過 log(n) 趟劃分便可得到?度為 1 的?表, 這樣時間復雜度 O(nlogn)。


最壞情況是每次所選中間數是當前序列中的最?或最?元素,這使每次劃分所得?表其中?個為空表 ??, 這樣?度為 n 的數據表需要 n 趟劃分,整個排序時間復雜度 O(n2)。


?
Q17:循環和遞歸,你說下有什么不同的點?

?
遞歸算法:?

優點:代碼少、簡介。

缺點:它的運行需要較多次數的函數調用,如果調用層數比較深,需要增加額外的堆棧處理,比如參數傳遞需要壓棧等操作,會對執行效率有一定影響。但是,對于某些問題,如果不使用遞歸,那將是極端難看的代碼。?

循環算法: ?

優點:速度快,結構簡單。

缺點:并不能解決所有的問題。有的問題適合使用遞歸而不是循環。如果使用循環并不困難的話,最好使用循環。

Q18:排序算法怎么選擇?


?
數據量規模較?,考慮直接插?或直接選擇。當元素分布有序時直接插?將??減少?較和移動記錄的次數,如果不要求穩定性,可以使?直接選擇,效率略?于直接插?。


數據量規模中等,選擇希爾排序。


數據量規模較?,考慮堆排序(元素分布接近正序或逆序)、快速排序(元素分布隨機)和歸并排序穩定性)。?般不使?冒泡。

好了,整理結束,小伙伴們點贊、收藏、評論,一鍵三連走起呀,下期見~~

總結

以上是生活随笔為你收集整理的数据结构快速掌握和温习-面试神器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。