版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
2025年python數(shù)據(jù)結(jié)構(gòu)考試題庫數(shù)據(jù)結(jié)構(gòu)期末復(fù)習(xí)章節(jié)試題(附答案)一、線性表1.選擇題:以下關(guān)于順序表和鏈表的描述,錯(cuò)誤的是()A.順序表的存儲(chǔ)空間連續(xù),鏈表的存儲(chǔ)空間可能不連續(xù)B.在順序表中隨機(jī)訪問元素的時(shí)間復(fù)雜度為O(1),鏈表為O(n)C.順序表插入元素的平均時(shí)間復(fù)雜度為O(n),鏈表頭插的時(shí)間復(fù)雜度為O(1)D.順序表的空間利用率一定高于鏈表2.填空題:一個(gè)長度為n的順序表,若要在第i個(gè)位置(1≤i≤n+1)插入一個(gè)元素,需移動(dòng)______個(gè)元素;若刪除第i個(gè)位置的元素(1≤i≤n),需移動(dòng)______個(gè)元素。3.簡答題:簡述單鏈表中“頭指針”和“頭結(jié)點(diǎn)”的區(qū)別及各自的作用。4.編程題:已知單鏈表L的結(jié)點(diǎn)結(jié)構(gòu)為(data,next),其中data為整型。請(qǐng)用Python編寫函數(shù),將L中所有值為奇數(shù)的結(jié)點(diǎn)移動(dòng)到偶數(shù)結(jié)點(diǎn)之前,保持奇數(shù)和偶數(shù)內(nèi)部的相對(duì)順序。例如,輸入L:3→1→4→2→5,輸出應(yīng)為3→1→5→4→2。二、棧與隊(duì)列5.選擇題:若一個(gè)棧的輸入序列是1,2,3,4,5,不可能的輸出序列是()A.5,4,3,2,1B.3,2,5,4,1C.2,3,1,5,4D.1,5,4,3,26.填空題:設(shè)循環(huán)隊(duì)列的容量為50(下標(biāo)0~49),隊(duì)頭指針front=15,隊(duì)尾指針rear=30(rear指向隊(duì)尾元素的下一個(gè)位置),則隊(duì)列中元素的個(gè)數(shù)為______;若采用犧牲一個(gè)存儲(chǔ)單元的方式判斷隊(duì)滿,當(dāng)隊(duì)列滿時(shí)front和rear的關(guān)系為______。7.簡答題:請(qǐng)說明棧在括號(hào)匹配問題中的應(yīng)用邏輯,并舉例說明如何判斷字符串“([)]”是否合法。8.編程題:用Python實(shí)現(xiàn)一個(gè)雙端隊(duì)列(Deque),要求支持以下操作:add_front(item)(頭部添加)、add_rear(item)(尾部添加)、remove_front()(頭部刪除)、remove_rear()(尾部刪除)、is_empty()(判斷空)。三、樹與二叉樹9.選擇題:一棵完全二叉樹有100個(gè)結(jié)點(diǎn),其葉子結(jié)點(diǎn)的個(gè)數(shù)是()A.49B.50C.51D.5210.填空題:已知某二叉樹的后序遍歷序列為DABEC,中序遍歷序列為DEBAC,則其前序遍歷序列為______;該二叉樹對(duì)應(yīng)的森林中樹的棵數(shù)等于其______的數(shù)目。11.簡答題:簡述二叉排序樹(BST)的定義,并說明插入一個(gè)新結(jié)點(diǎn)的具體步驟。12.編程題:請(qǐng)用Python實(shí)現(xiàn)二叉樹的層次遍歷(廣度優(yōu)先搜索),要求輸出格式為二維列表,每層元素放在一個(gè)子列表中。例如,輸入二叉樹:```3/\920/\157```輸出應(yīng)為[[3],[9,20],[15,7]]。四、圖13.選擇題:一個(gè)有向圖的鄰接表存儲(chǔ)中,每個(gè)頂點(diǎn)的出邊鏈表長度為該頂點(diǎn)的出度。若圖中有n個(gè)頂點(diǎn),e條邊,則鄰接表的空間復(fù)雜度為()A.O(n)B.O(e)C.O(n+e)D.O(n×e)14.填空題:在無向圖中,若從頂點(diǎn)v到頂點(diǎn)u存在路徑,則稱v和u是連通的;______的無向圖稱為連通圖。若一個(gè)無向圖有5個(gè)頂點(diǎn),要保證其連通,至少需要______條邊。15.簡答題:Dijkstra算法用于求解什么問題?其核心思想是什么?該算法是否適用于帶負(fù)權(quán)邊的圖?16.編程題:已知無向圖的鄰接矩陣為:```[[0,1,0,1],[1,0,1,0],[0,1,0,1],[1,0,1,0]]```(頂點(diǎn)編號(hào)0~3),請(qǐng)用Python編寫函數(shù),輸出所有從頂點(diǎn)0出發(fā)到頂點(diǎn)3的簡單路徑(路徑中無重復(fù)頂點(diǎn))。五、查找17.選擇題:在哈希表中,解決沖突的方法不包括()A.開放定址法B.鏈地址法C.再哈希法D.二分查找法18.填空題:對(duì)長度為n的有序數(shù)組進(jìn)行二分查找,最壞情況下的時(shí)間復(fù)雜度為______;若數(shù)組元素為[2,5,8,12,16,23,30],查找元素16時(shí),需要比較______次(從中間元素開始計(jì)數(shù))。19.簡答題:簡述哈希表負(fù)載因子(α)的定義及其對(duì)哈希表性能的影響。20.編程題:用Python實(shí)現(xiàn)一個(gè)哈希表,要求使用鏈地址法處理沖突,支持插入(put(key,value))和查找(get(key))操作,哈希函數(shù)采用除留余數(shù)法(取表長為質(zhì)數(shù))。六、排序21.選擇題:下列排序算法中,時(shí)間復(fù)雜度不受數(shù)據(jù)初始狀態(tài)影響,恒為O(nlogn)的是()A.快速排序B.堆排序C.冒泡排序D.插入排序22.填空題:對(duì)序列[5,3,8,6,4,2]進(jìn)行快速排序,以第一個(gè)元素為樞軸,第一趟排序后的結(jié)果為______;若采用歸并排序,初始序列的歸并段長度為1,第一趟歸并后的結(jié)果為______。23.簡答題:比較冒泡排序和快速排序的異同點(diǎn)(至少列出3點(diǎn))。24.編程題:用Python實(shí)現(xiàn)堆排序算法,要求將數(shù)組[7,3,9,5,1,6,2,4]按升序排列,并輸出每一趟建堆后的數(shù)組狀態(tài)。答案1.D(順序表需要預(yù)分配空間,可能存在空間浪費(fèi);鏈表每個(gè)結(jié)點(diǎn)有指針域,若數(shù)據(jù)域較小,空間利用率可能更低)2.ni+1;ni3.頭指針是指向鏈表第一個(gè)結(jié)點(diǎn)的指針(若有頭結(jié)點(diǎn)則指向頭結(jié)點(diǎn)),是鏈表的標(biāo)識(shí);頭結(jié)點(diǎn)是附加在第一個(gè)數(shù)據(jù)結(jié)點(diǎn)前的結(jié)點(diǎn),用于簡化插入/刪除首元結(jié)點(diǎn)的操作,使所有結(jié)點(diǎn)的操作統(tǒng)一。4.參考代碼:```pythonclassListNode:def__init__(self,val=0,next=None):self.val=valself.next=nextdefmove_odd_before_even(head):odd_dummy=ListNode()even_dummy=ListNode()odd=odd_dummyeven=even_dummywhilehead:ifhead.val%2==1:odd.next=headodd=odd.nextelse:even.next=headeven=even.nexthead=head.nextodd.next=even_dummy.nexteven.next=None斷開原鏈表尾部returnodd_dummy.next```5.C(若輸出2,3,1,則棧狀態(tài)為:壓入1、2,彈出2;壓入3,彈出3;此時(shí)棧頂為1,無法彈出1后再壓入4、5并彈出5、4)6.15;(rear+1)%50==front7.邏輯:遍歷字符串,遇到左括號(hào)入棧,遇到右括號(hào)時(shí)彈出棧頂左括號(hào)并判斷是否匹配。若??栈虿黄ヅ鋭t非法?!?[)]”中,遍歷到‘)’時(shí)棧頂是‘[’,不匹配,故非法。8.參考代碼:```pythonclassDeque:def__init__(self):self.items=[]defadd_front(self,item):self.items.insert(0,item)defadd_rear(self,item):self.items.append(item)defremove_front(self):returnself.items.pop(0)ifnotself.is_empty()elseNonedefremove_rear(self):returnself.items.pop()ifnotself.is_empty()elseNonedefis_empty(self):returnlen(self.items)==0```9.B(完全二叉樹葉子結(jié)點(diǎn)數(shù)為?n/2?,100/2=50)10.CEBDA;根結(jié)點(diǎn)的兄弟結(jié)點(diǎn)(或第一棵樹的根結(jié)點(diǎn)以外的根結(jié)點(diǎn))11.定義:左子樹所有結(jié)點(diǎn)值≤根結(jié)點(diǎn)值,右子樹所有結(jié)點(diǎn)值≥根結(jié)點(diǎn)值,左右子樹均為BST。插入步驟:從根開始比較,若小于當(dāng)前結(jié)點(diǎn)則進(jìn)入左子樹,大于則進(jìn)入右子樹,直到找到空位置插入。12.參考代碼:```pythonfromcollectionsimportdequeclassTreeNode:def__init__(self,val=0,left=None,right=None):self.val=valself.left=leftself.right=rightdeflevel_order(root):ifnotroot:return[]result=[]q=deque([root])whileq:level=[]for_inrange(len(q)):node=q.popleft()level.append(node.val)ifnode.left:q.append(node.left)ifnode.right:q.append(node.right)result.append(level)returnresult```13.C(鄰接表存儲(chǔ)n個(gè)頂點(diǎn)表結(jié)點(diǎn)和e條邊表結(jié)點(diǎn))14.任意兩個(gè)頂點(diǎn)都連通;4(n1條邊構(gòu)成樹)15.求解單源最短路徑問題。核心思想:每次選擇當(dāng)前距離最短的頂點(diǎn),更新其鄰接頂點(diǎn)的距離。不適用于負(fù)權(quán)邊,因無法保證已確定的最短路徑不被后續(xù)更小的權(quán)值更新。16.參考代碼:```pythondeffind_paths(adj_matrix,start,end):n=len(adj_matrix)visited=[False]npaths=[]defdfs(current,path):visited[current]=Truepath.append(current)ifcurrent==end:paths.append(path.copy())else:foriinrange(n):ifadj_matrix[current][i]andnotvisited[i]:dfs(i,path)path.pop()visited[current]=Falsedfs(start,[])returnpaths調(diào)用示例:find_paths([[0,1,0,1],[1,0,1,0],[0,1,0,1],[1,0,1,0]],0,3)輸出:[[0,1,2,3],[0,3]]```17.D(二分查找是查找方法,非沖突解決方法)18.O(logn);3(第一次比較8,第二次比較16)19.負(fù)載因子α=表中元素個(gè)數(shù)/哈希表長度。α越大,沖突概率越高,查找時(shí)間越長;α越小,空間利用率越低。20.參考代碼:```pythonclassHashTable:def__init__(self,size=11):self.size=sizeself.table=[[]for_inrange(size)]defhash_func(self,key):returnkey%self.sizedefput(self,key,value):index=self.hash_func(key)fori,(k,v)inenumerate(self.table[index]):ifk==key:self.table[index][i]=(key,value)returnself.table[index].append((key,value))defget(self,key):index=self.hash_func(key)fork,vinself.table[index]:ifk==key:returnvreturnNone```21.B(堆排序的時(shí)間復(fù)雜度始終為O(nlogn))22.[2,3,4,5,8,6];[3,5,6,8,1,4,2](注:快速排序第一趟以5為樞軸,小于5的放左,大于的放右;歸并排序第一趟將相鄰元素兩兩歸并)23.相同點(diǎn):均通過比較交換元素;均為內(nèi)排序。不同點(diǎn):冒泡是穩(wěn)定排序,快速不穩(wěn)定;冒泡時(shí)間復(fù)雜度O(n2),快速平均O(nlogn);冒泡是順序掃描,快速是分治遞歸。24.參考代碼及每趟狀態(tài):```pythondefheap_sort(arr):defheapify(n,i):largest=ileft=2i+1right=2i+2ifleft<nandarr[left]>arr[largest]:largest=leftifright<nandarr[right
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 刮宮術(shù)護(hù)理查房
- 2026年寧陵縣消防救援大隊(duì)招聘政府專職消防員10人備考題庫及1套參考答案詳解
- 2025年荷塘鎮(zhèn)廣盛屠宰場檢疫人員招聘備考題庫完整答案詳解
- 2025年南寧市江南區(qū)蘇圩中心衛(wèi)生院公開招聘醫(yī)學(xué)影像專業(yè)技術(shù)人員備考題庫帶答案詳解
- 2026年東莞理工學(xué)院第二批招聘聘用人員19人備考題庫及1套參考答案詳解
- 2026年成都市雙流區(qū)協(xié)和紅瓦幼兒園招聘備考題庫及1套完整答案詳解
- 2025年瑞安市安保集團(tuán)有限公司公開招聘市場化用工人員備考題庫及參考答案詳解一套
- 2026年常州市衛(wèi)生健康委員會(huì)直屬事業(yè)單位公開招聘高層次、緊缺專業(yè)人才備考題庫及1套參考答案詳解
- 2026年大連理工大學(xué)化工學(xué)院張文銳團(tuán)隊(duì)科研助理招聘備考題庫及一套完整答案詳解
- 2026年定州市婦幼保健院(定州市第二醫(yī)院)招聘備考題庫及答案詳解1套
- 人力資源有限公司管理制度
- 2024年高中語文選擇性必修上冊(cè)古詩文情境式默寫(含答案)
- 部編人教版4年級(jí)上冊(cè)語文期末復(fù)習(xí)(單元復(fù)習(xí)+專項(xiàng)復(fù)習(xí))教學(xué)課件
- 2024-2025學(xué)年云南省玉溪市八年級(jí)(上)期末英語試卷(含答案無聽力原文及音頻)
- 綠色建材生產(chǎn)合作協(xié)議
- 英語丨安徽省皖江名校聯(lián)盟2025屆高三12月聯(lián)考英語試卷及答案
- 湖南省長沙市長2024年七年級(jí)上學(xué)期數(shù)學(xué)期末考試試卷【附答案】
- 涼山州 2024 年教師綜合業(yè)務(wù)素質(zhì)測試試卷初中物理
- 他汀不耐受的臨床診斷與處理中國專家共識(shí)(2024)解讀課件
- 鋼管支撐強(qiáng)度及穩(wěn)定性驗(yàn)算
- 《企業(yè)內(nèi)部控制流程手冊(cè)》
評(píng)論
0/150
提交評(píng)論