【正文】
果。三、實驗目的:查找結構的各種實現(xiàn)。四、實驗學時:2小時五、實驗組人數(shù):3人。六、實驗設備環(huán)境:計算機。七、實驗原理及要點(知識點):平衡排序二叉樹的插入和刪除、遍歷,查找。哈希查找結構。八、實驗內(nèi)容和要求: 假設集合中包含的元素是可以排序的。將多重集合封裝成一個類。具體的實現(xiàn)可以是中序線索化的平衡排序二叉樹,或者帶父節(jié)點指針的平衡排序二叉樹。多重集合的界面如下:template//假設類型 t 是可以排序的 class multi_set{multi_set(void)。//構造函數(shù),初始化為空集合~multi_set(void)。//析構函數(shù)multi_setamp。 operator=(multi_set const a)。//重載運算符=bool contains(t constamp。 v)const。//如果集合包含v 則返回true,否則返回falsemulti_setamp。 operator+=(multi_set constamp。a)。//將集合a 并到自身中。multi_setamp。 operator=(multi_set constamp。 a)。//自身減去集合amulti_setamp。 operator=(t constamp。 a)。//自身減去一個元素a}。//~class multi_set//返回集合a,b的并templatemulti_setmult_set:: operator+(multi_setconstamp。 a,multi_setconstamp。 b)。//返回集合a,b的差templatemulti_setmult_set:: operator(multi_setconstamp。 a,multi_setconstamp。 b)。//返回 a –{v}templatemulti_setmulti_set::operator(multi_set constamp。 a,t constamp。 v)。九、可研究與探索的問題:哈希函數(shù)的選取。比較哈希與平衡排序二叉樹的優(yōu)缺點、性能和速度。十、驗收及實驗報告要求:現(xiàn)場操作及運行效果驗收。要求程序必須上機編譯通過并且正確運行。給出試驗報告。給出平衡排序二叉樹實現(xiàn)的多重集合和用哈希實現(xiàn)的多重集合的性能比較。實驗八、圖論一、實驗類別:設計型實驗。二、問題描述:實現(xiàn)圖論中的各種算法。1)最小代價生成樹的krscal 算法和prim算法。2)單源點的最短路徑的dijstra 算法。3)深度優(yōu)先遍歷與廣度優(yōu)先遍歷。4)拓撲排序5)求所有節(jié)點之間的最短路徑floyd算法(在這五個小題中只要選作一個即可。)三、實驗目的:學習根據(jù)不同的運算來選取不同的存儲結構。四、實驗學時:2小時五、實驗組人數(shù):3人。六、實驗設備環(huán)境:計算機。七、實驗原理及要點(知識點):圖論中的各種算法及其復雜度。根據(jù)不同的操作來決定圖的存儲結構。八、實驗內(nèi)容和要求:至少實現(xiàn)上面五個小題目中的一個。從文件中讀入一個圖的信息。九、可研究與探索的問題:高級數(shù)據(jù)結構如堆、并查集在圖論算法中的應用。十、驗收及實驗報告要求:現(xiàn)場操作及運行效果驗收。要求程序必須上機編譯通過并且正確運行。給出試驗報告。給出在均勻的隨機分布下,平衡排序二叉樹與一般排序二叉樹的性能比較。實驗九、內(nèi)部排序性能的比較一、實驗類別:設計型實驗。二、問題描述:隨機生成一組整數(shù)p0,p1,…pn-1。對這組數(shù)據(jù)進行排序。三、實驗目的:比較不同排序算法的性能。四、實驗學時:2小時五、實驗組人數(shù):3人。六、實驗設備環(huán)境:計算機。七、實驗原理及要點(知識點):各種內(nèi)部排序算法。八、實驗內(nèi)容和要求: 1)實現(xiàn)插入排序,選擇排序,希爾排序,堆排序以及快速排序。2)快速排序的多種版本。3)對單鏈表實現(xiàn)歸并排序。4)基數(shù)排序。5)對小型問題(n = 10)、中型問題(n = 1000)以及大型問題(n = 1百萬)分別統(tǒng)計不同排序算法的鍵值比較次數(shù)、鍵值移動次數(shù)以及程序運行時間。26)排序算法的時間復雜度可以有o(n)和 o(n log n)。對相同復雜度的算法,給出他們運行時間與時間復雜度的比值。九、可研究與探索的問題:研究快速排序算法的不同改進方法。自省排序算法。只需要移動而不需要交換的快速排序方法。十、驗收及實驗報告要求:現(xiàn)場操作及運行效果驗收。要求程序必須上機編譯通過并且正確運行。給出試驗報告。給出在均勻的隨機分布下,對大中小問題的最快的排序算法。教材及主要參考文獻[1] 嚴蔚敏、吳偉民,數(shù)據(jù)結構習題集,清華大學出版社,1999年[2] john d, data structures with c++, china machine press, 2002.[3] mark allen weiss, data structures and problem solving using c++, 2ed, 清華大學出版社。2004年。[4] robert sedgewick,algorithms in c part 1 – 4: fundamentals, data structures, sorting, rdsearching, 3, 中國電力出版社,2003年。[5] 嚴蔚敏、吳偉民,數(shù)據(jù)結構(c語言版),清華大學出版社,2006年數(shù)據(jù)結構實驗書 數(shù)據(jù)結構與算法實驗教程篇五金陵科技學院實驗報告學 生 實 驗 報 告 冊課程名稱:學生學號:所屬院部:(理工類)算法與數(shù)據(jù)結構 專業(yè)班級: 13網(wǎng)絡工程1305106009 學生姓名: 陳韜網(wǎng)絡與通信工程學院 指導教師: 沈奇 14 ——20 15 學年 第 1 學期金陵科技學院教務處制金陵科技學院實驗報告實驗報告書寫要求實驗報告原則上要求學生手寫,要求書寫工整。若因課程特點需打印的,要遵照以下字體、字號、間距等的具體要求。紙張一律采用a4的紙張。實驗報告書寫說明實驗報告中一至四項內(nèi)容為必填項,包括實驗目的和要求;實驗儀器和設備;實驗內(nèi)容與過程;實驗結果與分析。各院部可根據(jù)學科特點和實驗具體要求增加項目。填寫注意事項(1)細致觀察,及時、準確、如實記錄。(2)準確說明,層次清晰。(3)盡量采用專用術語來說明事物。(4)外文、符號、公式要準確,應使用統(tǒng)一規(guī)定的名詞和符號。(5)應獨立完成實驗報告的書寫,嚴禁抄襲、復印,一經(jīng)發(fā)現(xiàn),以零分論處。實驗報告批改說明實驗報告的批改要及時、認真、仔細,一律用紅色筆批改。實驗報告的批改成績采用百分制,具體評分標準由各院部自行制定。實驗報告裝訂要求實驗批改完畢后,任課老師將每門課程的每個實驗項目的實驗報告以自然班為單位、按學號升序排列,裝訂成冊,并附上一份該門課程的實驗大綱。金陵科技學院實驗報告實驗項目名稱: 順序表 實驗學時: 2 同組學生姓名: 實驗地點: 實驗日期: 實驗成績: 批改教師: 批改時間:金陵科技學院實驗報告實驗1 順序表一、實驗目的和要求掌握順序表的定位、插入、刪除等操作。二、實驗儀器和設備turbo c ++三、實驗內(nèi)容與過程(含程序清單及流程圖)必做題(1)編寫程序建立一個順序表,并逐個輸出順序表中所有數(shù)據(jù)元素的值。編寫主函數(shù)測試結果。(2)編寫順序表定位操作子函數(shù),在順序表中查找是否存在數(shù)據(jù)元素x。如果存在,返回順序表中和x值相等的第1個數(shù)據(jù)元素的序號(序號從0開始編號);如果不存在,返回-1。編寫主函數(shù)測試結果。(3)在遞增有序的順序表中插入一個新結點x,保持順序表的有序性。解題思路:首先查找插入的位置,再移位,最后進行插入操作;從第一個元素開始找到第一個大于該新結點值x的元素位置i即為插入位置;然后將從表尾開始依次將元素后移一個位置直至元素i;最后將新結點x插入到i位置。(4)刪除順序表中所有等于x的數(shù)據(jù)元素。選做題(5)已知兩個順序表a和b按元素值遞增有序排列,要求寫一算法實現(xiàn)將a和b歸并成一個按元素值遞減有序排列的順序表(允許表中含有值相同的元素)。程序清單:includeincludedefine maxsize 100 typedef struct { int data[maxsize]。int last。金陵科技學院實驗報告} sequenlist。sequenlist l={{1,3,5,5,7,8,10,12,17},8}。void print_list(){ int i。for(i=0。i=。i++)printf(“%4d”,[i])。} void find_all_x(int x){ int found=0,i。for(i=0。i=。i++)if([i]==x){ printf(“%3d”,i+1)。found=1。} if(found==0)printf(“1n”)。} void insert_x(int x){ int loc,i。for(i=0。i=。i++)if(x金陵科技學院實驗報告loc=i。for(i=。i=loc。i)[i+1]=[i]。[loc]=x。++。} void delete_x(int x){ int i,j,found=0。for(i=0。i=。i++)if(x==[i]){ found=1。for(j=i+1。j=。j++)[j1]=[j]。i。} if(found==0)printf(“x is not foundn”)。else { printf(“x is deletedn”)。printf(“the list after deletion is:n”)。print_list()。金陵科技學院實驗報告} }void main(){ int x,choice。while(1){ printf(“**********menu**********n”)。printf(“ 1printn”)。printf(“ 2searchn”)。printf(“ 3insertn”)。printf(“ 4deleten”)。printf(“ 5exitn”)。printf(“please input your choice:”)。scanf(“%d”,amp。choice)。switch(choice){case 1: printf(“the original list is:n”)。print_list()。break。case 2: printf(“pls input x you want to search:n”)。金陵科技學院實驗報告scanf(“%d”,amp。x)。find_all_x(x)。break。case 3: printf(“pls input x you want to insert:n”)。scanf(“%d”,amp。x)。insert_x(x)。printf(“the list after insertion is:n”)。print_list()。break。case 4: printf(“pls input x you want to delete:n”)。scanf(“%d”,amp。x)。delete_x(x)。printf(“the list after deletion is:n”)。print_list()。break。case 5: exit(0)。} } }金陵科技學院實驗報告金陵科技學院實驗報告四、實驗結果與分析(程序運行結果及其分析)五、實驗體會(遇到問題及解決辦法,編程后的心得體會)金陵科技學院實驗報告實驗項目名稱: 單鏈表 實驗學時: 2 同組學生姓名: 實驗地點: 實驗日期: 實驗成績: 批改教師: 批改時間:金陵科技學院實驗報告實驗2 單鏈表一、實驗目的和要求實驗目的掌握單鏈表的定位、插入、刪除等操作。實驗要求(1)注意鏈表的空間是動態(tài)分配的,某結點不用之后要及時進行物理刪除,以便釋放其內(nèi)存空間。(2)鏈表不能實現(xiàn)直接定位,一定注意指針的保存,防止丟失。二、實驗儀器和設備turbo c ++三、實驗內(nèi)容與過程(含程序清單及流程圖)必做題(1)編寫程序建立一個單鏈表,并逐個輸出單鏈表中所有數(shù)據(jù)元素。(2)在遞增有序的單鏈表中插入一個新結點x,保持單鏈表的有序性。解題思路:首先查找插入的位置然后進行插入操作;從第一個結點開始找到第一個大于該新結點值的結點即為插入位置;然后在找到的此結點之前插入新結點;注意保留插入位置之前結點的指針才能完成插入操作。(3)編寫實現(xiàn)帶頭結點單鏈表就地逆置的子函數(shù),并編寫主函數(shù)測試結果。選做題已知指針la和lb分別指向兩個無頭結點單鏈表的首元結點。要求編一算法實現(xiàn),從表la中刪除自第i個元素起共len個元素后,將它們插入到表lb中第j個元素之前。程序清單:金陵科技學院實驗報告金陵科技學院實驗報告四、實驗結果與分析(程序運行結果及其分析)五、實驗體會(遇到問題及解決辦法,編程后的心得體會)金陵科技學院實驗報告實驗項目名稱: 堆棧和隊列 實驗學時: 2 同組學生姓名: 實驗地點: 實驗日期: 實驗成績: 批改教師: 批改時間:金陵科技學院實驗報告實驗3 堆棧和隊列一、實驗目的和要求(1)掌握應用棧解決問題的方法。(2)掌握利用棧進行表達式求和的算法。(3)掌握隊列的存儲結構及基本操作實現(xiàn),并能在相應的應用問題中正確選用它們。二、實驗儀器和設備turbo c ++三、實驗內(nèi)容與過程(含程序清單及流程圖)必做題(1)判斷一個算術表達式中開括號和閉括號是否配對。(2)測試“漢諾塔”問題。(3)假設稱正讀和反讀都相同的字符序列為”回文”,試寫一個算法判別讀入的一個以’@’為結束符的字符序列是否是“回文”。選做題在順序存儲結構上實現(xiàn)輸出受限的雙端循環(huán)