第一篇:算法與數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)
金陵科技學(xué)院實(shí)驗(yàn)報(bào)告
學(xué) 生 實(shí) 驗(yàn) 報(bào) 告 冊(cè)
課程名稱:
學(xué)生學(xué)號(hào):
所屬院部:
(理工類)
算法與數(shù)據(jù)結(jié)構(gòu) 專業(yè)班級(jí): 13網(wǎng)絡(luò)工程
1305106009 學(xué)生姓名: 陳韜
網(wǎng)絡(luò)與通信工程學(xué)院 指導(dǎo)教師: 沈奇 14 ——20 15 學(xué)年 第 1 學(xué)期
金陵科技學(xué)院教務(wù)處制
金陵科技學(xué)院實(shí)驗(yàn)報(bào)告
實(shí)驗(yàn)報(bào)告書寫要求
實(shí)驗(yàn)報(bào)告原則上要求學(xué)生手寫,要求書寫工整。若因課程特點(diǎn)需打印的,要遵照以下字體、字號(hào)、間距等的具體要求。紙張一律采用A4的紙張。
實(shí)驗(yàn)報(bào)告書寫說(shuō)明
實(shí)驗(yàn)報(bào)告中一至四項(xiàng)內(nèi)容為必填項(xiàng),包括實(shí)驗(yàn)?zāi)康暮鸵?;?shí)驗(yàn)儀器和設(shè)備;實(shí)驗(yàn)內(nèi)容與過(guò)程;實(shí)驗(yàn)結(jié)果與分析。各院部可根據(jù)學(xué)科特點(diǎn)和實(shí)驗(yàn)具體要求增加項(xiàng)目。
填寫注意事項(xiàng)
(1)細(xì)致觀察,及時(shí)、準(zhǔn)確、如實(shí)記錄。(2)準(zhǔn)確說(shuō)明,層次清晰。
(3)盡量采用專用術(shù)語(yǔ)來(lái)說(shuō)明事物。
(4)外文、符號(hào)、公式要準(zhǔn)確,應(yīng)使用統(tǒng)一規(guī)定的名詞和符號(hào)。(5)應(yīng)獨(dú)立完成實(shí)驗(yàn)報(bào)告的書寫,嚴(yán)禁抄襲、復(fù)印,一經(jīng)發(fā)現(xiàn),以零分論處。
實(shí)驗(yàn)報(bào)告批改說(shuō)明
實(shí)驗(yàn)報(bào)告的批改要及時(shí)、認(rèn)真、仔細(xì),一律用紅色筆批改。實(shí)驗(yàn)報(bào)告的批改成績(jī)采用百分制,具體評(píng)分標(biāo)準(zhǔn)由各院部自行制定。
實(shí)驗(yàn)報(bào)告裝訂要求
實(shí)驗(yàn)批改完畢后,任課老師將每門課程的每個(gè)實(shí)驗(yàn)項(xiàng)目的實(shí)驗(yàn)報(bào)告以自然班為單位、按學(xué)號(hào)升序排列,裝訂成冊(cè),并附上一份該門課程的實(shí)驗(yàn)大綱。
金陵科技學(xué)院實(shí)驗(yàn)報(bào)告
實(shí)驗(yàn)項(xiàng)目名稱: 順序表 實(shí)驗(yàn)學(xué)時(shí): 2 同組學(xué)生姓名: 實(shí)驗(yàn)地點(diǎn): 實(shí)驗(yàn)日期: 實(shí)驗(yàn)成績(jī): 批改教師: 批改時(shí)間:
金陵科技學(xué)院實(shí)驗(yàn)報(bào)告
實(shí)驗(yàn)1 順序表
一、實(shí)驗(yàn)?zāi)康暮鸵?/p>
掌握順序表的定位、插入、刪除等操作。
二、實(shí)驗(yàn)儀器和設(shè)備
Turbo C 2.0/ Visual C++
三、實(shí)驗(yàn)內(nèi)容與過(guò)程(含程序清單及流程圖)
1、必做題
(1)編寫程序建立一個(gè)順序表,并逐個(gè)輸出順序表中所有數(shù)據(jù)元素的值。編寫主函數(shù)測(cè)試結(jié)果。
(2)編寫順序表定位操作子函數(shù),在順序表中查找是否存在數(shù)據(jù)元素x。如果存在,返回順序表中和x值相等的第1個(gè)數(shù)據(jù)元素的序號(hào)(序號(hào)從0開(kāi)始編號(hào));如果不存在,返回-1。編寫主函數(shù)測(cè)試結(jié)果。(3)在遞增有序的順序表中插入一個(gè)新結(jié)點(diǎn)x,保持順序表的有序性。
解題思路:首先查找插入的位置,再移位,最后進(jìn)行插入操作;從第一個(gè)元素開(kāi)始找到第一個(gè)大于該新結(jié)點(diǎn)值x的元素位置i即為插入位置;然后將從表尾開(kāi)始依次將元素后移一個(gè)位置直至元素i;最后將新結(jié)點(diǎn)x插入到i位置。
(4)刪除順序表中所有等于X的數(shù)據(jù)元素。
2、選做題
(5)已知兩個(gè)順序表A和B按元素值遞增有序排列,要求寫一算法實(shí)現(xiàn)將A和B歸并成一個(gè)按元素值遞減有序排列的順序表(允許表中含有值相同的元素)。
程序清單:
#include
金陵科技學(xué)院實(shí)驗(yàn)報(bào)告
} sequenlist;sequenlist L={{1,3,5,5,7,8,10,12,17},8};void print_list(){ int i;for(i=0;i<=L.last;i++)printf(“%4d”,L.data[i]);} void find_all_x(int x){ int found=0,i;for(i=0;i<=L.last;i++)if(L.data[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<=L.last;i++)if(x 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 loc=i;for(i=L.last;i>=loc;i--)L.data[i+1]=L.data[i];L.data[loc]=x;L.last++;} void delete_x(int x){ int i,j,found=0;for(i=0;i<=L.last;i++)if(x==L.data[i]){ found=1;for(j=i+1;j<=L.last;j++)L.data[j-1]=L.data[j];i--;L.last--;} if(found==0)printf(“x is not foundn”);else { printf(“x is deletedn”);printf(“the list after deletion is:n”);print_list(); 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 } } void main(){ int x,choice;while(1){ printf(“**********menu**********n”);printf(“ 1--printn”);printf(“ 2--searchn”);printf(“ 3--insertn”);printf(“ 4--deleten”);printf(“ 5--exitn”);printf(“please input your choice:”);scanf(“%d”,&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”); 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 scanf(“%d”,&x);find_all_x(x);break;case 3: printf(“pls input x you want to insert:n”);scanf(“%d”,&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”,&x);delete_x(x);printf(“the list after deletion is:n”);print_list();break;case 5: exit(0);} } } 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 四、實(shí)驗(yàn)結(jié)果與分析(程序運(yùn)行結(jié)果及其分析) 五、實(shí)驗(yàn)體會(huì)(遇到問(wèn)題及解決辦法,編程后的心得體會(huì)) 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)項(xiàng)目名稱: 單鏈表 實(shí)驗(yàn)學(xué)時(shí): 2 同組學(xué)生姓名: 實(shí)驗(yàn)地點(diǎn): 實(shí)驗(yàn)日期: 實(shí)驗(yàn)成績(jī): 批改教師: 批改時(shí)間: 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)2 單鏈表 一、實(shí)驗(yàn)?zāi)康暮鸵?/p> 1、實(shí)驗(yàn)?zāi)康?/p> 掌握單鏈表的定位、插入、刪除等操作。 2、實(shí)驗(yàn)要求 (1)注意鏈表的空間是動(dòng)態(tài)分配的,某結(jié)點(diǎn)不用之后要及時(shí)進(jìn)行物理刪除,以便釋放其內(nèi)存空間。 (2)鏈表不能實(shí)現(xiàn)直接定位,一定注意指針的保存,防止丟失。 二、實(shí)驗(yàn)儀器和設(shè)備 Turbo C 2.0/ Visual C++ 三、實(shí)驗(yàn)內(nèi)容與過(guò)程(含程序清單及流程圖) 1、必做題 (1)編寫程序建立一個(gè)單鏈表,并逐個(gè)輸出單鏈表中所有數(shù)據(jù)元素。(2)在遞增有序的單鏈表中插入一個(gè)新結(jié)點(diǎn)x,保持單鏈表的有序性。 解題思路:首先查找插入的位置然后進(jìn)行插入操作;從第一個(gè)結(jié)點(diǎn)開(kāi)始找到第一個(gè)大于該新結(jié)點(diǎn)值的結(jié)點(diǎn)即為插入位置;然后在找到的此結(jié)點(diǎn)之前插入新結(jié)點(diǎn);注意保留插入位置之前結(jié)點(diǎn)的指針才能完成插入操作。 (3)編寫實(shí)現(xiàn)帶頭結(jié)點(diǎn)單鏈表就地逆置的子函數(shù),并編寫主函數(shù)測(cè)試結(jié)果。 2、選做題 已知指針LA和LB分別指向兩個(gè)無(wú)頭結(jié)點(diǎn)單鏈表的首元結(jié)點(diǎn)。要求編一算法實(shí)現(xiàn),從表LA中刪除自第i個(gè)元素起共len個(gè)元素后,將它們插入到表LB中第j個(gè)元素之前。程序清單: 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 四、實(shí)驗(yàn)結(jié)果與分析(程序運(yùn)行結(jié)果及其分析) 五、實(shí)驗(yàn)體會(huì)(遇到問(wèn)題及解決辦法,編程后的心得體會(huì)) 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)項(xiàng)目名稱: 堆棧和隊(duì)列 實(shí)驗(yàn)學(xué)時(shí): 2 同組學(xué)生姓名: 實(shí)驗(yàn)地點(diǎn): 實(shí)驗(yàn)日期: 實(shí)驗(yàn)成績(jī): 批改教師: 批改時(shí)間: 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)3 堆棧和隊(duì)列 一、實(shí)驗(yàn)?zāi)康暮鸵?/p> (1)掌握應(yīng)用棧解決問(wèn)題的方法。(2)掌握利用棧進(jìn)行表達(dá)式求和的算法。 (3)掌握隊(duì)列的存儲(chǔ)結(jié)構(gòu)及基本操作實(shí)現(xiàn),并能在相應(yīng)的應(yīng)用問(wèn)題中正確選用它們。 二、實(shí)驗(yàn)儀器和設(shè)備 Turbo C 2.0/ Visual C++ 三、實(shí)驗(yàn)內(nèi)容與過(guò)程(含程序清單及流程圖) 1、必做題 (1)判斷一個(gè)算術(shù)表達(dá)式中開(kāi)括號(hào)和閉括號(hào)是否配對(duì)。(2)測(cè)試“漢諾塔”問(wèn)題。 (3)假設(shè)稱正讀和反讀都相同的字符序列為”回文”,試寫一個(gè)算法判別讀入的一個(gè)以’@’為結(jié)束符的字符序列是否是“回文”。 2、選做題 在順序存儲(chǔ)結(jié)構(gòu)上實(shí)現(xiàn)輸出受限的雙端循環(huán)隊(duì)列的入列和出列算法。設(shè)每個(gè)元素表示一個(gè)待處理的作業(yè),元素值表示作業(yè)的預(yù)計(jì)時(shí)間。入隊(duì)列采取簡(jiǎn)化的短作業(yè)優(yōu)先原則,若一個(gè)新提交的作業(yè)的預(yù)計(jì)執(zhí)行時(shí)間小于隊(duì)頭和隊(duì)尾作業(yè)的平均時(shí)間,則插入在隊(duì)頭,否則插入在隊(duì)尾。程序清單: 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 四、實(shí)驗(yàn)結(jié)果與分析(程序運(yùn)行結(jié)果及其分析) 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 五、實(shí)驗(yàn)體會(huì)(遇到問(wèn)題及解決辦法,編程后的心得體會(huì)) 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)項(xiàng)目名稱: 串 實(shí)驗(yàn)學(xué)時(shí): 2 同組學(xué)生姓名: 實(shí)驗(yàn)地點(diǎn): 實(shí)驗(yàn)日期: 實(shí)驗(yàn)成績(jī): 批改教師: 批改時(shí)間: 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)4 串 一、實(shí)驗(yàn)?zāi)康暮鸵?/p> 掌握串的存儲(chǔ)及應(yīng)用。 二、實(shí)驗(yàn)儀器和設(shè)備 Turbo C 2.0/ Visual C++ 三、實(shí)驗(yàn)內(nèi)容與過(guò)程(含程序清單及流程圖) 1、必做題 (1)編寫輸出字符串s中值等于字符ch的第一個(gè)字符的函數(shù),并用主函數(shù)測(cè)試結(jié)果。 (2)編寫輸出字符串s中值等于字符ch的所有字符的函數(shù),并用主函數(shù)測(cè)試結(jié)果。 解題思路:可以將第一題程序改進(jìn)成一個(gè)子函數(shù),在本題中循環(huán)調(diào)用。(3)設(shè)字符串采用單字符的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),編程刪除串s從位置i開(kāi)始長(zhǎng)度為k的子串。 2、選做題 假設(shè)以鏈結(jié)構(gòu)表示串,編寫算法實(shí)現(xiàn)將串S插入到串T中某個(gè)字符之后,若串T中不存在這個(gè)字符,則將串S聯(lián)接在串T的末尾。 提示:為提高程序的通用性,插入位置字符應(yīng)設(shè)計(jì)為從鍵盤輸入。程序清單: 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 四、實(shí)驗(yàn)結(jié)果與分析(程序運(yùn)行結(jié)果及其分析) 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 五、實(shí)驗(yàn)體會(huì)(遇到問(wèn)題及解決辦法,編程后的心得體會(huì)) 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)項(xiàng)目名稱: 二叉樹(shù) 實(shí)驗(yàn)學(xué)時(shí): 2 同組學(xué)生姓名: 實(shí)驗(yàn)地點(diǎn): 實(shí)驗(yàn)日期: 實(shí)驗(yàn)成績(jī): 批改教師: 批改時(shí)間: 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)5 二叉樹(shù) 一、實(shí)驗(yàn)?zāi)康暮鸵?/p> (1)掌握二叉樹(shù)的生成,以及前、中、后序遍歷算法。(2)掌握應(yīng)用二叉樹(shù)遞歸遍歷思想解決問(wèn)題的方法。 二、實(shí)驗(yàn)儀器和設(shè)備 Turbo C 2.0/ Visual C++ 三、實(shí)驗(yàn)內(nèi)容與過(guò)程(含程序清單及流程圖) 1、必做題 (1)建立一棵二叉樹(shù)。對(duì)此樹(shù)進(jìn)行前序遍歷、中序遍歷及后序遍歷,輸出遍歷序列。 (2)在第一題基礎(chǔ)上,求二叉樹(shù)中葉結(jié)點(diǎn)的個(gè)數(shù)。(3)在第一題基礎(chǔ)上,求二叉樹(shù)中結(jié)點(diǎn)總數(shù)。(4)在第一題基礎(chǔ)上,求二叉樹(shù)的深度。 2、選做題 已知一棵完全二叉樹(shù)存于順序表sa中,sa.elem[1…sa.last]存儲(chǔ)結(jié)點(diǎn)的值。試編寫算法由此順序存儲(chǔ)結(jié)構(gòu)建立該二叉樹(shù)的二叉鏈表。 解題思路:根據(jù)完全二叉樹(shù)順序存儲(chǔ)的性質(zhì)來(lái)確定二叉樹(shù)的父子關(guān)系即“還原”了二叉樹(shù),之后再按照二叉樹(shù)二叉鏈表的構(gòu)造方法進(jìn)行建立。完全二叉樹(shù)順序存儲(chǔ)的一個(gè)重要性質(zhì)為,第i個(gè)結(jié)點(diǎn)的左孩子是編號(hào)為2i的結(jié)點(diǎn),第i個(gè)結(jié)點(diǎn)的右孩子是編號(hào)為2i+1的結(jié)點(diǎn)。程序清單: 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 四、實(shí)驗(yàn)結(jié)果與分析(程序運(yùn)行結(jié)果及其分析) 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 五、實(shí)驗(yàn)體會(huì)(遇到問(wèn)題及解決辦法,編程后的心得體會(huì)) 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)項(xiàng)目名稱: 圖 實(shí)驗(yàn)學(xué)時(shí): 2 同組學(xué)生姓名: 實(shí)驗(yàn)地點(diǎn): 實(shí)驗(yàn)日期: 實(shí)驗(yàn)成績(jī): 批改教師: 批改時(shí)間: 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)6 圖 一、實(shí)驗(yàn)?zāi)康暮鸵?/p> (1)熟練掌握?qǐng)D的基本概念、構(gòu)造及其存儲(chǔ)結(jié)構(gòu)。 (2)熟練掌握對(duì)圖的深度優(yōu)先搜索遍歷和廣度優(yōu)先搜索遍歷的算法。 二、實(shí)驗(yàn)儀器和設(shè)備 Turbo C 2.0/ Visual C++ 三、實(shí)驗(yàn)內(nèi)容與過(guò)程(含程序清單及流程圖) 1、必做題 (1)構(gòu)造一個(gè)無(wú)向圖(用鄰接矩陣表示存儲(chǔ)結(jié)構(gòu))。 (2)對(duì)上面所構(gòu)造的無(wú)向圖,進(jìn)行深度優(yōu)先遍歷和廣度優(yōu)先遍歷,輸出遍歷序列。 2、選做題 采用鄰接表存儲(chǔ)結(jié)構(gòu),編寫一個(gè)判別無(wú)向圖中任意給定的兩個(gè)頂點(diǎn)之間是否存在一條長(zhǎng)度為k的簡(jiǎn)單路徑的算法。簡(jiǎn)單路徑是指其頂點(diǎn)序列中不含有重復(fù)頂點(diǎn)的路徑。提示:兩個(gè)頂點(diǎn)及k值均作為參數(shù)給出。程序清單: 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 四、實(shí)驗(yàn)結(jié)果與分析(程序運(yùn)行結(jié)果及其分析) 五、實(shí)驗(yàn)體會(huì)(遇到問(wèn)題及解決辦法,編程后的心得體會(huì)) 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)項(xiàng)目名稱: 排序 實(shí)驗(yàn)學(xué)時(shí): 2 同組學(xué)生姓名: 實(shí)驗(yàn)地點(diǎn): 實(shí)驗(yàn)日期: 實(shí)驗(yàn)成績(jī): 批改教師: 批改時(shí)間: 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)7 排序 一、實(shí)驗(yàn)?zāi)康暮鸵?/p> (1)熟練掌握希爾排序、堆排序、直接插入排序、起泡排序、快速排序、直接選擇排序、歸并排序和基數(shù)排序的基本概念。 (2)掌握以上各種排序的算法。區(qū)分以上不同排序的優(yōu)、缺點(diǎn)。 二、實(shí)驗(yàn)儀器和設(shè)備 Turbo C 2.0/ Visual C++ 三、實(shí)驗(yàn)內(nèi)容與過(guò)程(含程序清單及流程圖) 1、必做題 用隨機(jī)數(shù)產(chǎn)生100000個(gè)待排序數(shù)據(jù)元素的關(guān)鍵字值。測(cè)試下列各排序函數(shù)的機(jī)器實(shí)際執(zhí)行時(shí)間(至少測(cè)試兩個(gè)):直接插入排序、希爾排序(增量為4,2,1)、冒泡排序、快速排序、直接選擇排序、堆排序。 2、選做題 假設(shè)含n個(gè)記錄的序列中,其所有關(guān)鍵字為值介于v和w之間的整數(shù),且其中很多關(guān)鍵字的值是相同的。則可按如下方法排序:另設(shè)數(shù)組number[v…w],令number[i]統(tǒng)計(jì)關(guān)鍵字為整數(shù)i的紀(jì)錄個(gè)數(shù),然后按number重排序列以達(dá)到有序。試編寫算法實(shí)現(xiàn)上述排序方法,并討論此種方法的優(yōu)缺點(diǎn)。程序清單: 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 四、實(shí)驗(yàn)結(jié)果與分析(程序運(yùn)行結(jié)果及其分析) 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 五、實(shí)驗(yàn)體會(huì)(遇到問(wèn)題及解決辦法,編程后的心得體會(huì)) 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)項(xiàng)目名稱: 查找 實(shí)驗(yàn)學(xué)時(shí): 2 同組學(xué)生姓名: 實(shí)驗(yàn)地點(diǎn): 實(shí)驗(yàn)日期: 實(shí)驗(yàn)成績(jī): 批改教師: 批改時(shí)間: 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)8 查找 一、實(shí)驗(yàn)?zāi)康暮鸵?/p> (1)掌握順序表查找、有序表查找、索引順序表查找的各種算法。(2)掌握哈希表設(shè)計(jì)。 二、實(shí)驗(yàn)儀器和設(shè)備 Turbo C 2.0/ Visual C++ 三、實(shí)驗(yàn)內(nèi)容與過(guò)程(含程序清單及流程圖) 1、必做題 (1)在一個(gè)遞增有序的線性表中利用二分查找法查找數(shù)據(jù)元素X。 2、選做題 (2)構(gòu)造一個(gè)哈希表,哈希函數(shù)采用除留余數(shù)法,哈希沖突解決方法采用鏈地址法。設(shè)計(jì)一個(gè)測(cè)試程序進(jìn)行測(cè)試。 提示:構(gòu)造哈希表只是完成查找的第一步,大家應(yīng)該掌握在哈希表上進(jìn)行查找的過(guò)程,可以試著編程序?qū)崿F(xiàn)。程序清單: 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 四、實(shí)驗(yàn)結(jié)果與分析(程序運(yùn)行結(jié)果及其分析) 五、實(shí)驗(yàn)體會(huì)(遇到問(wèn)題及解決辦法,編程后的心得體會(huì)) 北 京 郵 電 大 學(xué) 計(jì) 算 機(jī) 科 學(xué) 與 技 術(shù) 學(xué) 院 算 法 與 數(shù) 據(jù) 結(jié) 構(gòu) 實(shí) 驗(yàn) 指 導(dǎo) 書 楊俊、徐塞虹、漆濤 編著 2006年9月 算法與數(shù)據(jù)結(jié)構(gòu) 實(shí)驗(yàn)指導(dǎo)書 目錄 實(shí)驗(yàn)要求....................................................................................................................................3 試驗(yàn) 一、約瑟夫環(huán)..............................................................................…………………..……4 試驗(yàn) 二、長(zhǎng)整數(shù)四則運(yùn)算運(yùn)算………………………………………………………………4 實(shí)驗(yàn)三、八皇后.....................................……..........................................................................5 實(shí)驗(yàn) 四、騎士遍歷......................................……………………..............................................5 實(shí)驗(yàn) 五、桌面計(jì)算器...............................……………..............................................................6 實(shí)驗(yàn) 六、平衡排序二叉樹(shù)....................…...…….....................................................................6 試驗(yàn) 七、多重集合的實(shí)現(xiàn)……......................................………………………………………7 試驗(yàn) 八、圖論………………………………………………………………………….……..8 實(shí)驗(yàn) 八、內(nèi)部排序性能的比較..........………………….............................................................8 教材及主要參考文獻(xiàn)………………………………………………………………………………..9 2 北京郵電大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院 算法與數(shù)據(jù)結(jié)構(gòu) 實(shí)驗(yàn)指導(dǎo)書 實(shí)驗(yàn)要求 一、本課程在講課期間需要做上機(jī)實(shí)驗(yàn),目的之一是檢查學(xué)生對(duì)所學(xué)算法的掌握和理解程度;其次是鍛煉學(xué)生的團(tuán)隊(duì)合作精神。 二、成績(jī): 1、編碼:占整個(gè)實(shí)驗(yàn)成績(jī)的50%; 2、測(cè)試:占整個(gè)實(shí)驗(yàn)成績(jī)的20%; 3、文檔:占整個(gè)實(shí)驗(yàn)成績(jī)的30%。 三、按時(shí)提交上機(jī)文檔,實(shí)驗(yàn)文檔包含以下各項(xiàng): 1、問(wèn)題描述:實(shí)驗(yàn)題目、內(nèi)容和要求; 2、算法思路:實(shí)驗(yàn)小組對(duì)問(wèn)題的解決方法的文字描述; 3、算法描述:用類算法語(yǔ)言等對(duì)算法進(jìn)行描述; 4、源程序及驅(qū)動(dòng)程序:上機(jī)實(shí)驗(yàn)編制的代碼源程序及程序運(yùn)行環(huán)境; 5、測(cè)試數(shù)據(jù):對(duì)算法的測(cè)試用例; 6、結(jié)果分析和結(jié)論:對(duì)算法及測(cè)試結(jié)果的分析及結(jié)論; 7、心得體會(huì):通過(guò)實(shí)驗(yàn)獲得的心得體會(huì); 8、分工及簽名:最后是小組成員的分工及簽名。 北京郵電大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院-1-算法與數(shù)據(jù)結(jié)構(gòu) 實(shí)驗(yàn)指導(dǎo)書 實(shí)驗(yàn) 一、約瑟夫環(huán) 一、實(shí)驗(yàn)類別:設(shè)計(jì)型實(shí)驗(yàn)。 二、問(wèn)題描述:約瑟夫環(huán)問(wèn)題是:n個(gè)人p0,p1,…pn 圍坐成一個(gè)圓環(huán)。每個(gè)人pk持有一個(gè)秘密的數(shù)字ck。0 < ck <= m。開(kāi)始時(shí)隨機(jī)選取一個(gè)數(shù) c = c0。每個(gè)人從p0 開(kāi)始從1開(kāi)始報(bào)數(shù)。報(bào)到數(shù)c 的人出對(duì)。然后以出隊(duì)的人的秘密數(shù)字作為新的c 值。從出隊(duì)者的下一個(gè)人順時(shí)針從1 開(kāi)始再報(bào)數(shù)。直到所有的人全部出隊(duì)。 三、實(shí)驗(yàn)?zāi)康模簷z查學(xué)生對(duì)各種線性表的實(shí)現(xiàn)的掌握程度。 四、實(shí)驗(yàn)學(xué)時(shí):2小時(shí) 五、實(shí)驗(yàn)組人數(shù):1人。 六、實(shí)驗(yàn)設(shè)備環(huán)境:計(jì)算機(jī)。 七、實(shí)驗(yàn)原理及要點(diǎn)(知識(shí)點(diǎn)):各種隊(duì)列的實(shí)現(xiàn)。 八、實(shí)驗(yàn)內(nèi)容和要求:至少用3種以上的線性表來(lái)完成此試驗(yàn)。可以在帶頭節(jié)點(diǎn)的和不帶頭節(jié)點(diǎn)的線性表、循環(huán)的和非循環(huán)線性表、動(dòng)態(tài)鏈表和靜態(tài)鏈表以及向量(數(shù)組)之間選擇三種。從空表開(kāi)始,為每個(gè)人生成一個(gè)隨機(jī)數(shù)。然后將此人加入到線性表之中。 九、可研究與探索的問(wèn)題:給出各種實(shí)現(xiàn)的優(yōu)缺點(diǎn)比較。 十、驗(yàn)收及實(shí)驗(yàn)報(bào)告要求:現(xiàn)場(chǎng)操作及運(yùn)行效果驗(yàn)收。要求程序必須上機(jī)編譯通過(guò)并且正確運(yùn)行。給出試驗(yàn)報(bào)告。給出各種線性表實(shí)現(xiàn)的優(yōu)缺點(diǎn)分析。 實(shí)驗(yàn) 二、長(zhǎng)整數(shù)四則運(yùn)算 一、實(shí)驗(yàn)類別:驗(yàn)證實(shí)驗(yàn)。 二、問(wèn)題描述:計(jì)算機(jī)CPU本身可以做32位或者64位的整數(shù)四則運(yùn)算。本試驗(yàn)要求對(duì)任意大小的整數(shù)實(shí)現(xiàn)其四則運(yùn)算。將一個(gè)整數(shù)N表示為 N = ±(d0 + d1*B + d2*B2 + ….+ bk*Bk) 其中 1< B <= 256 為一個(gè)取定的整數(shù)。0 <= dk < B。用線性表存儲(chǔ){bk}。給出整數(shù)的四則運(yùn)算程序。 三、實(shí)驗(yàn)?zāi)康模簩?duì)具體的問(wèn)題選擇適當(dāng)?shù)木€性表實(shí)現(xiàn)。 四、實(shí)驗(yàn)學(xué)時(shí):2小時(shí) 五、實(shí)驗(yàn)組人數(shù):3人。 六、實(shí)驗(yàn)設(shè)備環(huán)境:計(jì)算機(jī)。 七、實(shí)驗(yàn)原理及要點(diǎn)(知識(shí)點(diǎn)):各種隊(duì)列的實(shí)現(xiàn)。 八、實(shí)驗(yàn)內(nèi)容和要求:至少用2種以上的線性表來(lái)完成此試驗(yàn)。比較不同線性表實(shí)現(xiàn)的速度。 九、可研究與探索的問(wèn)題:1)對(duì)具體問(wèn)題選擇合適的線性表實(shí)現(xiàn)。2)B 的選取問(wèn)題。可 否選擇更大的基B。B的選擇所應(yīng)考慮的因素。 十、驗(yàn)收及實(shí)驗(yàn)報(bào)告要求:現(xiàn)場(chǎng)操作及運(yùn)行效果驗(yàn)收。要求程序必須上機(jī)編譯通過(guò)并且正確運(yùn)行。給出試驗(yàn)報(bào)告。能夠得出用向量(數(shù)組)實(shí)現(xiàn)的線性表速度最快。 實(shí)驗(yàn)三、八皇后問(wèn)題 一、實(shí)驗(yàn)類別:設(shè)計(jì)型實(shí)驗(yàn)。 二、問(wèn)題描述:在n*n 的國(guó)際象棋棋盤上放置n個(gè)皇后,使每個(gè)皇后不受其他皇后的攻擊。 三、實(shí)驗(yàn)?zāi)康模簷z查學(xué)生對(duì)堆棧和遞歸程序掌握程度。 四、實(shí)驗(yàn)學(xué)時(shí):2小時(shí) 五、實(shí)驗(yàn)組人數(shù):1人。 六、實(shí)驗(yàn)設(shè)備環(huán)境:計(jì)算機(jī)。 七、實(shí)驗(yàn)原理及要點(diǎn)(知識(shí)點(diǎn)):遞歸程序與堆棧 八、實(shí)驗(yàn)內(nèi)容和要求: 分別用遞歸和堆棧完成此試驗(yàn)。統(tǒng)計(jì)程序運(yùn)行時(shí)間與問(wèn)題規(guī)模n 的關(guān)系。 九、可研究與探索的問(wèn)題:?jiǎn)栴}的復(fù)雜度。當(dāng)n 比較大時(shí),討論提高程序運(yùn)行的方法。 十、驗(yàn)收及實(shí)驗(yàn)報(bào)告要求:現(xiàn)場(chǎng)操作及運(yùn)行效果驗(yàn)收。要求程序必須上機(jī)編譯通過(guò)并且正確運(yùn)行。給出試驗(yàn)報(bào)告。找出程序運(yùn)行速度的瓶頸。 實(shí)驗(yàn) 四、騎士遍歷 一、實(shí)驗(yàn)類別:設(shè)計(jì)型實(shí)驗(yàn)。 二、問(wèn)題描述:在國(guó)際象棋n*n的棋盤中,一匹馬從棋盤中任意一格出發(fā),要求用n2-1步走完所有的n2個(gè)格子。每個(gè)格子走且只走過(guò)一次。應(yīng)如何走? 試給出算法實(shí)現(xiàn)。 三、實(shí)驗(yàn)?zāi)康模簷z查學(xué)生對(duì)堆棧與回溯算法的掌握。 四、實(shí)驗(yàn)學(xué)時(shí):2小時(shí) 五、實(shí)驗(yàn)組人數(shù):3人。 六、實(shí)驗(yàn)設(shè)備環(huán)境:計(jì)算機(jī)。 七、實(shí)驗(yàn)原理及要點(diǎn)(知識(shí)點(diǎn)):堆棧與回溯 八、實(shí)驗(yàn)內(nèi)容和要求:用堆棧完成此試驗(yàn)。統(tǒng)計(jì)程序運(yùn)行時(shí)間與問(wèn)題規(guī)模n 的關(guān)系。 九、可研究與探索的問(wèn)題:怎樣枚舉所有馬下一步可走的位置。選擇下一步所走位置的策略。注意由于這個(gè)程序非常耗時(shí),在初期程序調(diào)試時(shí)應(yīng)取較小的n。 十、驗(yàn)收及實(shí)驗(yàn)報(bào)告要求:現(xiàn)場(chǎng)操作及運(yùn)行效果驗(yàn)收。要求程序必須上機(jī)編譯通過(guò)并且正確運(yùn)行。給出試驗(yàn)報(bào)告。找出程序運(yùn)行速度的瓶頸。給出不同選擇策略的程序運(yùn)行 速度的比較結(jié)果。 實(shí)驗(yàn) 五、桌面計(jì)算器(表達(dá)式求值) 一、實(shí)驗(yàn)類別:設(shè)計(jì)型實(shí)驗(yàn)。 二、問(wèn)題描述:模仿Unix系統(tǒng)下的dc命令。輸入表達(dá)式字符串,按回車鍵后給出表達(dá)式的值。操作數(shù)為實(shí)數(shù)。 1)操作符有 “+”、“-”、“*”、“/”、“^”(乘方) 2)還可以有臨時(shí)變量。用法如 pi = 3.1415926,r = 3, r*pi^2 3)還可以有事先定義的函數(shù)如:“sin()”(正弦)、“cos()”(余弦)、“l(fā)og()”(對(duì)數(shù))、“l(fā)n()”(自然對(duì)數(shù))等函數(shù)。 三、實(shí)驗(yàn)?zāi)康模簷z查學(xué)生用堆棧解決實(shí)際問(wèn)題。為本課程后續(xù)的內(nèi)容提供伏筆。也為后繼的課程如編譯原理預(yù)習(xí)。 四、實(shí)驗(yàn)學(xué)時(shí):2小時(shí) 五、實(shí)驗(yàn)組人數(shù):3人。 六、實(shí)驗(yàn)設(shè)備環(huán)境:計(jì)算機(jī)。 七、實(shí)驗(yàn)原理及要點(diǎn)(知識(shí)點(diǎn)):堆棧,線性表,命令行參數(shù)的處理。 八、實(shí)驗(yàn)內(nèi)容和要求:學(xué)生應(yīng)至少應(yīng)實(shí)現(xiàn)處理五個(gè)運(yùn)算符:“+”、“-”、“*”、“/”、“^”(乘方)??梢杂靡粋€(gè)線性表來(lái)存儲(chǔ)臨時(shí)變量。另一個(gè)線性表來(lái)存儲(chǔ)預(yù)定義的函數(shù)名。 九、可研究與探索的問(wèn)題:查找臨時(shí)變量名的不同方法。如哈希表,二叉樹(shù)。 十、驗(yàn)收及實(shí)驗(yàn)報(bào)告要求:現(xiàn)場(chǎng)操作及運(yùn)行效果驗(yàn)收。要求程序必須上機(jī)編譯通過(guò)并且正確運(yùn)行。給出試驗(yàn)報(bào)告。 實(shí)驗(yàn) 六、平衡排序二叉樹(shù) 一、實(shí)驗(yàn)類別:設(shè)計(jì)型實(shí)驗(yàn)。 二、問(wèn)題描述:隨機(jī)生成一組整數(shù)p0,p1,…pn-1。將這組整數(shù)按生成的次序插入到一個(gè)平衡排序二叉樹(shù)中。然后將p0,p1,…pn-1隨機(jī)重新排列為q0,q1,…qn-1。再按照次次序?qū)⑦@些整數(shù)從生成的平衡排序二叉樹(shù)刪除。 三、實(shí)驗(yàn)?zāi)康模浩胶馀判蚨鏄?shù)的插入和刪除。 四、實(shí)驗(yàn)學(xué)時(shí):2小時(shí) 五、實(shí)驗(yàn)組人數(shù):3人。 六、實(shí)驗(yàn)設(shè)備環(huán)境:計(jì)算機(jī)。 七、實(shí)驗(yàn)原理及要點(diǎn)(知識(shí)點(diǎn)):平衡排序二叉樹(shù)的插入和刪除中的旋轉(zhuǎn)。 八、實(shí)驗(yàn)內(nèi)容和要求:統(tǒng)計(jì)在平衡排序二叉樹(shù)的插入和刪除過(guò)程中各種旋轉(zhuǎn)的出現(xiàn)次數(shù)。 九、可研究與探索的問(wèn)題:研究平衡排序二叉樹(shù)與一般的排序二叉樹(shù)在插入和刪除方面的性能比較。 十、驗(yàn)收及實(shí)驗(yàn)報(bào)告要求:現(xiàn)場(chǎng)操作及運(yùn)行效果驗(yàn)收。要求程序必須上機(jī)編譯通過(guò)并且正確運(yùn)行。給出試驗(yàn)報(bào)告。給出在均勻的隨機(jī)分布下,平衡排序二叉樹(shù)與一般排序二叉樹(shù)的性能比較。 實(shí)驗(yàn) 七、多重集合的實(shí)現(xiàn) 一、實(shí)驗(yàn)類別:設(shè)計(jì)型實(shí)驗(yàn)。 二、問(wèn)題描述:實(shí)現(xiàn)數(shù)學(xué)上多重集合。所謂的多重集合類似于集合,但是一件東西可以放置多個(gè)副本。就如一個(gè)菜籃子里面可以放兩個(gè)蘋果。 三、實(shí)驗(yàn)?zāi)康模翰檎医Y(jié)構(gòu)的各種實(shí)現(xiàn)。 四、實(shí)驗(yàn)學(xué)時(shí):2小時(shí) 五、實(shí)驗(yàn)組人數(shù):3人。 六、實(shí)驗(yàn)設(shè)備環(huán)境:計(jì)算機(jī)。 七、實(shí)驗(yàn)原理及要點(diǎn)(知識(shí)點(diǎn)):平衡排序二叉樹(shù)的插入和刪除、遍歷,查找。哈希查找結(jié)構(gòu)。 八、實(shí)驗(yàn)內(nèi)容和要求: 假設(shè)集合中包含的元素是可以排序的。將多重集合封裝成一個(gè)類。具體的實(shí)現(xiàn)可以是中序線索化的平衡排序二叉樹(shù),或者帶父節(jié)點(diǎn)指針的平衡排序二叉樹(shù)。多重集合的界面如下: template { Multi_set(void);//構(gòu)造函數(shù),初始化為空集合~Multi_set(void);//析構(gòu)函數(shù) Multi_set& operator=(Multi_set const a);//重載運(yùn)算符= bool contains(T const& v)const;//如果集合包含v 則返回true,否則返回false Multi_set& operator+=(Multi_set const&a);//將集合a 并到自身中。 Multi_set& operator-=(Multi_set const& a);//自身減去集合a Multi_set& operator-=(T const& a);//自身減去一個(gè)元素a };//~class Multi_set //返回集合a,b的并 template //返回集合a,b的差 template //返回 a –{v} template Multi_set 九、可研究與探索的問(wèn)題:哈希函數(shù)的選取。比較哈希與平衡排序二叉樹(shù)的優(yōu)缺點(diǎn)、性能和速度。 十、驗(yàn)收及實(shí)驗(yàn)報(bào)告要求:現(xiàn)場(chǎng)操作及運(yùn)行效果驗(yàn)收。要求程序必須上機(jī)編譯通過(guò)并且正確運(yùn)行。給出試驗(yàn)報(bào)告。給出平衡排序二叉樹(shù)實(shí)現(xiàn)的多重集合和用哈希實(shí)現(xiàn)的多重集合的性能比較。 實(shí)驗(yàn) 八、圖論 一、實(shí)驗(yàn)類別:設(shè)計(jì)型實(shí)驗(yàn)。 二、問(wèn)題描述:實(shí)現(xiàn)圖論中的各種算法。 1)最小代價(jià)生成樹(shù)的Krscal 算法和Prim算法。2)單源點(diǎn)的最短路徑的Dijstra 算法。3)深度優(yōu)先遍歷與廣度優(yōu)先遍歷。4)拓?fù)渑判?/p> 5)求所有節(jié)點(diǎn)之間的最短路徑Floyd算法 (在這五個(gè)小題中只要選作一個(gè)即可。) 三、實(shí)驗(yàn)?zāi)康模簩W(xué)習(xí)根據(jù)不同的運(yùn)算來(lái)選取不同的存儲(chǔ)結(jié)構(gòu)。 四、實(shí)驗(yàn)學(xué)時(shí):2小時(shí) 五、實(shí)驗(yàn)組人數(shù):3人。 六、實(shí)驗(yàn)設(shè)備環(huán)境:計(jì)算機(jī)。 七、實(shí)驗(yàn)原理及要點(diǎn)(知識(shí)點(diǎn)):圖論中的各種算法及其復(fù)雜度。根據(jù)不同的操作來(lái)決定圖的存儲(chǔ)結(jié)構(gòu)。 八、實(shí)驗(yàn)內(nèi)容和要求:至少實(shí)現(xiàn)上面五個(gè)小題目中的一個(gè)。從文件中讀入一個(gè)圖的信息。 九、可研究與探索的問(wèn)題:高級(jí)數(shù)據(jù)結(jié)構(gòu)如堆、并查集在圖論算法中的應(yīng)用。 十、驗(yàn)收及實(shí)驗(yàn)報(bào)告要求:現(xiàn)場(chǎng)操作及運(yùn)行效果驗(yàn)收。要求程序必須上機(jī)編譯通過(guò)并且正確運(yùn)行。給出試驗(yàn)報(bào)告。給出在均勻的隨機(jī)分布下,平衡排序二叉樹(shù)與一般排序二叉樹(shù)的性能比較。 實(shí)驗(yàn) 九、內(nèi)部排序性能的比較 一、實(shí)驗(yàn)類別:設(shè)計(jì)型實(shí)驗(yàn)。 二、問(wèn)題描述:隨機(jī)生成一組整數(shù)p0,p1,…pn-1。對(duì)這組數(shù)據(jù)進(jìn)行排序。 三、實(shí)驗(yàn)?zāi)康模罕容^不同排序算法的性能。 四、實(shí)驗(yàn)學(xué)時(shí):2小時(shí) 五、實(shí)驗(yàn)組人數(shù):3人。 六、實(shí)驗(yàn)設(shè)備環(huán)境:計(jì)算機(jī)。 七、實(shí)驗(yàn)原理及要點(diǎn)(知識(shí)點(diǎn)):各種內(nèi)部排序算法。 八、實(shí)驗(yàn)內(nèi)容和要求: 1)實(shí)現(xiàn)插入排序,選擇排序,希爾排序,堆排序以及快速排序。2)快速排序的多種版本。3)對(duì)單鏈表實(shí)現(xiàn)歸并排序。4)基數(shù)排序。 5)對(duì)小型問(wèn)題(n = 10)、中型問(wèn)題(n = 1000)以及大型問(wèn)題(n = 1百萬(wàn))分別統(tǒng)計(jì)不同排序算法的鍵值比較次數(shù)、鍵值移動(dòng)次數(shù)以及程序運(yùn)行時(shí)間。 26)排序算法的時(shí)間復(fù)雜度可以有O(n)和 O(n log n)。對(duì)相同復(fù)雜度的算法,給出他們運(yùn)行時(shí)間與時(shí)間復(fù)雜度的比值。 九、可研究與探索的問(wèn)題:研究快速排序算法的不同改進(jìn)方法。自省排序算法。只需要移動(dòng)而不需要交換的快速排序方法。 十、驗(yàn)收及實(shí)驗(yàn)報(bào)告要求:現(xiàn)場(chǎng)操作及運(yùn)行效果驗(yàn)收。要求程序必須上機(jī)編譯通過(guò)并且正確運(yùn)行。給出試驗(yàn)報(bào)告。給出在均勻的隨機(jī)分布下,對(duì)大中小問(wèn)題的最快的排序算法。 教材及主要參考文獻(xiàn) [1] 嚴(yán)蔚敏、吳偉民,數(shù)據(jù)結(jié)構(gòu)習(xí)題集,清華大學(xué)出版社,1999年 [2] John R.Hubbard, Data Structures with C++, China Machine Press, 2002.[3] Mark Allen Weiss, Data Structures and Problem Solving Using C++, 2ed, 清華大學(xué)出版社。2004年。[4] Robert Sedgewick,Algorithms in C Part 1 – 4: Fundamentals, Data Structures, Sorting, rdSearching, 3, 中國(guó)電力出版社,2003年。 [5] 嚴(yán)蔚敏、吳偉民,數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言版),清華大學(xué)出版社,2006年 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 學(xué) 生 實(shí) 驗(yàn) 報(bào) 告 冊(cè) 課程名稱: 學(xué)生學(xué)號(hào): 所屬院部: (理工類) 算法與數(shù)據(jù)結(jié)構(gòu) 專業(yè)班級(jí): 14計(jì)單(2) 1413201007 學(xué)生姓名: 毛卓 計(jì)算機(jī)工程學(xué)院 指導(dǎo)教師: 章海鷗 16 ——20 17 學(xué)年 第 二 學(xué)期 金陵科技學(xué)院教務(wù)處制 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)報(bào)告書寫要求 實(shí)驗(yàn)報(bào)告原則上要求學(xué)生手寫,要求書寫工整。若因課程特點(diǎn)需打印的,要遵照以下字體、字號(hào)、間距等的具體要求。紙張一律采用A4的紙張。 實(shí)驗(yàn)報(bào)告書寫說(shuō)明 實(shí)驗(yàn)報(bào)告中一至四項(xiàng)內(nèi)容為必填項(xiàng),包括實(shí)驗(yàn)?zāi)康暮鸵?;?shí)驗(yàn)儀器和設(shè)備;實(shí)驗(yàn)內(nèi)容與過(guò)程;實(shí)驗(yàn)結(jié)果與分析。各院部可根據(jù)學(xué)科特點(diǎn)和實(shí)驗(yàn)具體要求增加項(xiàng)目。 填寫注意事項(xiàng) (1)細(xì)致觀察,及時(shí)、準(zhǔn)確、如實(shí)記錄。(2)準(zhǔn)確說(shuō)明,層次清晰。 (3)盡量采用專用術(shù)語(yǔ)來(lái)說(shuō)明事物。 (4)外文、符號(hào)、公式要準(zhǔn)確,應(yīng)使用統(tǒng)一規(guī)定的名詞和符號(hào)。(5)應(yīng)獨(dú)立完成實(shí)驗(yàn)報(bào)告的書寫,嚴(yán)禁抄襲、復(fù)印,一經(jīng)發(fā)現(xiàn),以零分論處。 實(shí)驗(yàn)報(bào)告批改說(shuō)明 實(shí)驗(yàn)報(bào)告的批改要及時(shí)、認(rèn)真、仔細(xì),一律用紅色筆批改。實(shí)驗(yàn)報(bào)告的批改成績(jī)采用百分制,具體評(píng)分標(biāo)準(zhǔn)由各院部自行制定。 實(shí)驗(yàn)報(bào)告裝訂要求 實(shí)驗(yàn)批改完畢后,任課老師將每門課程的每個(gè)實(shí)驗(yàn)項(xiàng)目的實(shí)驗(yàn)報(bào)告以自然班為單位、按學(xué)號(hào)升序排列,裝訂成冊(cè),并附上一份該門課程的實(shí)驗(yàn)大綱。 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)項(xiàng)目名稱: 順序表 實(shí)驗(yàn)學(xué)時(shí): 2 同組學(xué)生姓名: 實(shí)驗(yàn)地點(diǎn): 實(shí)驗(yàn)日期: 實(shí)驗(yàn)成績(jī): 批改教師: 批改時(shí)間: 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)1 順序表 一、實(shí)驗(yàn)?zāi)康暮鸵?/p> 掌握順序表的定位、插入、刪除等操作。 二、實(shí)驗(yàn)儀器和設(shè)備 VC6.0 三、實(shí)驗(yàn)內(nèi)容與過(guò)程(含程序清單及流程圖) 1、必做題 (1)編寫程序建立一個(gè)順序表,并逐個(gè)輸出順序表中所有數(shù)據(jù)元素的值。編寫主函數(shù)測(cè)試結(jié)果。 (2)編寫順序表定位操作子函數(shù),在順序表中查找是否存在數(shù)據(jù)元素x。如果存在,返回順序表中和x值相等的第1個(gè)數(shù)據(jù)元素的序號(hào)(序號(hào)從0開(kāi)始編號(hào));如果不存在,返回-1。編寫主函數(shù)測(cè)試結(jié)果。(3)在遞增有序的順序表中插入一個(gè)新結(jié)點(diǎn)x,保持順序表的有序性。 解題思路:首先查找插入的位置,再移位,最后進(jìn)行插入操作;從第一個(gè)元素開(kāi)始找到第一個(gè)大于該新結(jié)點(diǎn)值x的元素位置i即為插入位置;然后將從表尾開(kāi)始依次將元素后移一個(gè)位置直至元素i;最后將新結(jié)點(diǎn)x插入到i位置。 (4)刪除順序表中所有等于X的數(shù)據(jù)元素。 2、選做題 (5)已知兩個(gè)順序表A和B按元素值遞增有序排列,要求寫一算法實(shí)現(xiàn)將A和B歸并成一個(gè)按元素值遞減有序排列的順序表(允許表中含有值相同的元素)。 程序清單: (1):/*編寫程序建立一個(gè)順序表,并逐個(gè)輸出順序表中所有數(shù)據(jù)元素的值。*/ #include 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 }sequenlist;void main(){ sequenlist L;int i,n;printf(“請(qǐng)輸入元素個(gè)數(shù):”);scanf(“%d”,&n);printf(“n請(qǐng)輸入元素:”);for(i=0;i 如果不存在,返回-1。*/ #include int fun(sequenlist L,int x,int n){ 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 } int i;for(i=0;i } int i,n,y;int x; printf(“請(qǐng)輸入元素個(gè)數(shù):”);scanf(“%d”,&n);printf(“n請(qǐng)輸入元素:”);for(i=0;i printf(“n請(qǐng)輸入要查找的數(shù)據(jù)元素:”);scanf(“%d”,&x);y=fun(L,x,n);if(y==-1)else printf(“n數(shù)據(jù)元素 %d 所在的位置為 %d n”,x,y);printf(“n所要查找的數(shù)據(jù)元素不存在。n”);(3): /*在遞增有序的順序表中插入一個(gè)新結(jié)點(diǎn)x,保持順序表的有序性。 解題思路:首先查找插入的位置,再移位,最后進(jìn)行插入操作; 從第一個(gè)元素開(kāi)始找到第一個(gè)大于該新結(jié)點(diǎn)值x的元素位置i即為插入位置; 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 然后將從表尾開(kāi)始依次將元素后移一個(gè)位置直至元素i;最后將新結(jié)點(diǎn)x插入到i位置。*/ #define maxsize 100 typedef struct{ int data[maxsize]; int last;}sequenlist;main(){ int i,x,j; sequenlist l={{1,3,5,6,7,9},5}; printf(“n插入元素前的數(shù)據(jù)為:”); for(i=0;i<=l.last;i++) printf(“%2d”,l.data[i]); printf(“n請(qǐng)輸入要插入的元素:”); scanf(“%d”,&x); for(i=1;i<=l.last;i++) if(l.data[i-1]>x)break; if(i>l.last) { l.data [l.last +1]=x; } else { for(j=l.last;j>=i-1;j--)l.data[j+1]=l.data[j];l.data[i-1]=x; } l.last++; printf(“插入元素后的數(shù)據(jù)為:n”); 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 for(j=0;j<=l.last;j++) printf(“%3d”,l.data[j]); printf(“n”);}(4): /*刪除順序表中所有等于X的數(shù)據(jù)元素。*/ #define maxsize 100 typedef struct{ int data[maxsize]; int last;}sequenlist;main(){ int i,j,x=0,k=0; sequenlist L={{1,3,5,7,2,4,6,8,2,9},9}; printf(“n原數(shù)據(jù)為:”); for(i=0;i<=L.last;i++)printf(“%3d”,L.data[i]); printf(“n請(qǐng)輸入要?jiǎng)h除的數(shù)據(jù):”); scanf(“%d”,&x); for(i=1;i<=L.last+1;i++) if(L.data[i-1]==x){ for(j=i;j<=L.last+1;j++)L.data[j-1]=L.data[j]; L.last--; i--; k=1; } if(k==1){ printf(“刪除后的數(shù)據(jù)為:n”); for(j=0;j<=L.last;j++)printf(“%3d”,L.data[j]); } else printf(“Not found!n”); 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 printf(“n”);} 四、實(shí)驗(yàn)結(jié)果與分析(程序運(yùn)行結(jié)果及其分析)(1)結(jié)果: 請(qǐng)輸入元素個(gè)數(shù):5 請(qǐng)輸入元素:1 2 3 4 5 元素輸出:1 2 3 4 5(2)結(jié)果: 請(qǐng)輸入元素個(gè)數(shù):5 請(qǐng)輸入元素:1 2 3 4 5 請(qǐng)輸入要查找的數(shù)據(jù)元素:5 數(shù)據(jù)元素5所在的位置為 4(3)結(jié)果:插入數(shù)據(jù)前的元素為:1 3 5 6 7 9 請(qǐng)輸入要插入的元素為:10 插入元素后的數(shù)據(jù)為: 5 6 7 9 10(4)結(jié)果:原數(shù)據(jù)為:1 3 5 7 2 4 6 8 2 9 請(qǐng)輸入要?jiǎng)h除的數(shù)據(jù)為:7 刪除后的數(shù)據(jù)為: 3 5 2 4 6 8 2 9 五、實(shí)驗(yàn)體會(huì)(遇到問(wèn)題及解決辦法,編程后的心得體會(huì)) 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)項(xiàng)目名稱: 單鏈表 實(shí)驗(yàn)學(xué)時(shí): 2 同組學(xué)生姓名: 實(shí)驗(yàn)地點(diǎn): 實(shí)驗(yàn)日期: 實(shí)驗(yàn)成績(jī): 批改教師: 批改時(shí)間: 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)2 單鏈表 一、實(shí)驗(yàn)?zāi)康暮鸵?/p> 1、實(shí)驗(yàn)?zāi)康?/p> 掌握單鏈表的定位、插入、刪除等操作。 2、實(shí)驗(yàn)要求 (1)注意鏈表的空間是動(dòng)態(tài)分配的,某結(jié)點(diǎn)不用之后要及時(shí)進(jìn)行物理刪除,以便釋放其內(nèi)存空間。 (2)鏈表不能實(shí)現(xiàn)直接定位,一定注意指針的保存,防止丟失。 二、實(shí)驗(yàn)儀器和設(shè)備 Visual C++6.0 三、實(shí)驗(yàn)內(nèi)容與過(guò)程(含程序清單及流程圖) 1、必做題 (1)編寫程序建立一個(gè)單鏈表,并逐個(gè)輸出單鏈表中所有數(shù)據(jù)元素。(2)在遞增有序的單鏈表中插入一個(gè)新結(jié)點(diǎn)x,保持單鏈表的有序性。 解題思路:首先查找插入的位置然后進(jìn)行插入操作;從第一個(gè)結(jié)點(diǎn)開(kāi)始找到第一個(gè)大于該新結(jié)點(diǎn)值的結(jié)點(diǎn)即為插入位置;然后在找到的此結(jié)點(diǎn)之前插入新結(jié)點(diǎn);注意保留插入位置之前結(jié)點(diǎn)的指針才能完成插入操作。 (3)編寫實(shí)現(xiàn)帶頭結(jié)點(diǎn)單鏈表就地逆置的子函數(shù),并編寫主函數(shù)測(cè)試結(jié)果。 2、選做題 已知指針LA和LB分別指向兩個(gè)無(wú)頭結(jié)點(diǎn)單鏈表的首元結(jié)點(diǎn)。要求編一算法實(shí)現(xiàn),從表LA中刪除自第i個(gè)元素起共len個(gè)元素后,將它們插入到表LB中第j個(gè)元素之前。程序清單: 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 四、實(shí)驗(yàn)結(jié)果與分析(程序運(yùn)行結(jié)果及其分析) 五、實(shí)驗(yàn)體會(huì)(遇到問(wèn)題及解決辦法,編程后的心得體會(huì)) 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)項(xiàng)目名稱: 堆棧和隊(duì)列 實(shí)驗(yàn)學(xué)時(shí): 2 同組學(xué)生姓名: 實(shí)驗(yàn)地點(diǎn): 實(shí)驗(yàn)日期: 實(shí)驗(yàn)成績(jī): 批改教師: 批改時(shí)間: 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)3 堆棧和隊(duì)列 一、實(shí)驗(yàn)?zāi)康暮鸵?/p> (1)掌握應(yīng)用棧解決問(wèn)題的方法。(2)掌握利用棧進(jìn)行表達(dá)式求和的算法。 (3)掌握隊(duì)列的存儲(chǔ)結(jié)構(gòu)及基本操作實(shí)現(xiàn),并能在相應(yīng)的應(yīng)用問(wèn)題中正確選用它們。 二、實(shí)驗(yàn)儀器和設(shè)備 Visual C++6.0 三、實(shí)驗(yàn)內(nèi)容與過(guò)程(含程序清單及流程圖) 1、必做題 (1)判斷一個(gè)算術(shù)表達(dá)式中開(kāi)括號(hào)和閉括號(hào)是否配對(duì)。(2)測(cè)試“漢諾塔”問(wèn)題。 (3)假設(shè)稱正讀和反讀都相同的字符序列為”回文”,試寫一個(gè)算法判別讀入的一個(gè)以’@’為結(jié)束符的字符序列是否是“回文”。 2、選做題 在順序存儲(chǔ)結(jié)構(gòu)上實(shí)現(xiàn)輸出受限的雙端循環(huán)隊(duì)列的入列和出列算法。設(shè)每個(gè)元素表示一個(gè)待處理的作業(yè),元素值表示作業(yè)的預(yù)計(jì)時(shí)間。入隊(duì)列采取簡(jiǎn)化的短作業(yè)優(yōu)先原則,若一個(gè)新提交的作業(yè)的預(yù)計(jì)執(zhí)行時(shí)間小于隊(duì)頭和隊(duì)尾作業(yè)的平均時(shí)間,則插入在隊(duì)頭,否則插入在隊(duì)尾。程序清單: 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 四、實(shí)驗(yàn)結(jié)果與分析(程序運(yùn)行結(jié)果及其分析) 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 五、實(shí)驗(yàn)體會(huì)(遇到問(wèn)題及解決辦法,編程后的心得體會(huì)) 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)項(xiàng)目名稱: 串 實(shí)驗(yàn)學(xué)時(shí): 2 同組學(xué)生姓名: 實(shí)驗(yàn)地點(diǎn): 實(shí)驗(yàn)日期: 實(shí)驗(yàn)成績(jī): 批改教師: 批改時(shí)間: 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)4 串 一、實(shí)驗(yàn)?zāi)康暮鸵?/p> 掌握串的存儲(chǔ)及應(yīng)用。 二、實(shí)驗(yàn)儀器和設(shè)備 Visual C++6.0 三、實(shí)驗(yàn)內(nèi)容與過(guò)程(含程序清單及流程圖) 1、必做題 (1)編寫輸出字符串s中值等于字符ch的第一個(gè)字符的函數(shù),并用主函數(shù)測(cè)試結(jié)果。 (2)編寫輸出字符串s中值等于字符ch的所有字符的函數(shù),并用主函數(shù)測(cè)試結(jié)果。 解題思路:可以將第一題程序改進(jìn)成一個(gè)子函數(shù),在本題中循環(huán)調(diào)用。(3)設(shè)字符串采用單字符的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),編程刪除串s從位置i開(kāi)始長(zhǎng)度為k的子串。 2、選做題 假設(shè)以鏈結(jié)構(gòu)表示串,編寫算法實(shí)現(xiàn)將串S插入到串T中某個(gè)字符之后,若串T中不存在這個(gè)字符,則將串S聯(lián)接在串T的末尾。 提示:為提高程序的通用性,插入位置字符應(yīng)設(shè)計(jì)為從鍵盤輸入。程序清單: 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 四、實(shí)驗(yàn)結(jié)果與分析(程序運(yùn)行結(jié)果及其分析) 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 五、實(shí)驗(yàn)體會(huì)(遇到問(wèn)題及解決辦法,編程后的心得體會(huì)) 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)項(xiàng)目名稱: 二叉樹(shù) 實(shí)驗(yàn)學(xué)時(shí): 2 同組學(xué)生姓名: 實(shí)驗(yàn)地點(diǎn): 實(shí)驗(yàn)日期: 實(shí)驗(yàn)成績(jī): 批改教師: 批改時(shí)間: 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)5 二叉樹(shù) 一、實(shí)驗(yàn)?zāi)康暮鸵?/p> (1)掌握二叉樹(shù)的生成,以及前、中、后序遍歷算法。(2)掌握應(yīng)用二叉樹(shù)遞歸遍歷思想解決問(wèn)題的方法。 二、實(shí)驗(yàn)儀器和設(shè)備 Visual C++6.0 三、實(shí)驗(yàn)內(nèi)容與過(guò)程(含程序清單及流程圖) 1、必做題 (1)建立一棵二叉樹(shù)。對(duì)此樹(shù)進(jìn)行前序遍歷、中序遍歷及后序遍歷,輸出遍歷序列。 (2)在第一題基礎(chǔ)上,求二叉樹(shù)中葉結(jié)點(diǎn)的個(gè)數(shù)。(3)在第一題基礎(chǔ)上,求二叉樹(shù)中結(jié)點(diǎn)總數(shù)。(4)在第一題基礎(chǔ)上,求二叉樹(shù)的深度。 2、選做題 已知一棵完全二叉樹(shù)存于順序表sa中,sa.elem[1…sa.last]存儲(chǔ)結(jié)點(diǎn)的值。試編寫算法由此順序存儲(chǔ)結(jié)構(gòu)建立該二叉樹(shù)的二叉鏈表。 解題思路:根據(jù)完全二叉樹(shù)順序存儲(chǔ)的性質(zhì)來(lái)確定二叉樹(shù)的父子關(guān)系即“還原”了二叉樹(shù),之后再按照二叉樹(shù)二叉鏈表的構(gòu)造方法進(jìn)行建立。完全二叉樹(shù)順序存儲(chǔ)的一個(gè)重要性質(zhì)為,第i個(gè)結(jié)點(diǎn)的左孩子是編號(hào)為2i的結(jié)點(diǎn),第i個(gè)結(jié)點(diǎn)的右孩子是編號(hào)為2i+1的結(jié)點(diǎn)。程序清單: 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 四、實(shí)驗(yàn)結(jié)果與分析(程序運(yùn)行結(jié)果及其分析) 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 五、實(shí)驗(yàn)體會(huì)(遇到問(wèn)題及解決辦法,編程后的心得體會(huì)) 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)項(xiàng)目名稱: 圖 實(shí)驗(yàn)學(xué)時(shí): 2 同組學(xué)生姓名: 實(shí)驗(yàn)地點(diǎn): 實(shí)驗(yàn)日期: 實(shí)驗(yàn)成績(jī): 批改教師: 批改時(shí)間: 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)6 圖 一、實(shí)驗(yàn)?zāi)康暮鸵?/p> (1)熟練掌握?qǐng)D的基本概念、構(gòu)造及其存儲(chǔ)結(jié)構(gòu)。 (2)熟練掌握對(duì)圖的深度優(yōu)先搜索遍歷和廣度優(yōu)先搜索遍歷的算法。 二、實(shí)驗(yàn)儀器和設(shè)備 Visual C++6.0 三、實(shí)驗(yàn)內(nèi)容與過(guò)程(含程序清單及流程圖) 1、必做題 (1)構(gòu)造一個(gè)無(wú)向圖(用鄰接矩陣表示存儲(chǔ)結(jié)構(gòu))。 (2)對(duì)上面所構(gòu)造的無(wú)向圖,進(jìn)行深度優(yōu)先遍歷和廣度優(yōu)先遍歷,輸出遍歷序列。 2、選做題 采用鄰接表存儲(chǔ)結(jié)構(gòu),編寫一個(gè)判別無(wú)向圖中任意給定的兩個(gè)頂點(diǎn)之間是否存在一條長(zhǎng)度為k的簡(jiǎn)單路徑的算法。簡(jiǎn)單路徑是指其頂點(diǎn)序列中不含有重復(fù)頂點(diǎn)的路徑。提示:兩個(gè)頂點(diǎn)及k值均作為參數(shù)給出。程序清單: 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 四、實(shí)驗(yàn)結(jié)果與分析(程序運(yùn)行結(jié)果及其分析) 五、實(shí)驗(yàn)體會(huì)(遇到問(wèn)題及解決辦法,編程后的心得體會(huì)) 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)項(xiàng)目名稱: 排序 實(shí)驗(yàn)學(xué)時(shí): 2 同組學(xué)生姓名: 實(shí)驗(yàn)地點(diǎn): 實(shí)驗(yàn)日期: 實(shí)驗(yàn)成績(jī): 批改教師: 批改時(shí)間: 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)7 排序 一、實(shí)驗(yàn)?zāi)康暮鸵?/p> (1)熟練掌握希爾排序、堆排序、直接插入排序、起泡排序、快速排序、直接選擇排序、歸并排序和基數(shù)排序的基本概念。 (2)掌握以上各種排序的算法。區(qū)分以上不同排序的優(yōu)、缺點(diǎn)。 二、實(shí)驗(yàn)儀器和設(shè)備 Visual C++6.0 三、實(shí)驗(yàn)內(nèi)容與過(guò)程(含程序清單及流程圖) 1、必做題 用隨機(jī)數(shù)產(chǎn)生100000個(gè)待排序數(shù)據(jù)元素的關(guān)鍵字值。測(cè)試下列各排序函數(shù)的機(jī)器實(shí)際執(zhí)行時(shí)間(至少測(cè)試兩個(gè)):直接插入排序、希爾排序(增量為4,2,1)、冒泡排序、快速排序、直接選擇排序、二路歸并排序、堆排序和基于鏈?zhǔn)疥?duì)列的基數(shù)排序。 2、選做題 假設(shè)含n個(gè)記錄的序列中,其所有關(guān)鍵字為值介于v和w之間的整數(shù),且其中很多關(guān)鍵字的值是相同的。則可按如下方法排序:另設(shè)數(shù)組number[v…w],令number[i]統(tǒng)計(jì)關(guān)鍵字為整數(shù)i的紀(jì)錄個(gè)數(shù),然后按number重排序列以達(dá)到有序。試編寫算法實(shí)現(xiàn)上述排序方法,并討論此種方法的優(yōu)缺點(diǎn)。程序清單: 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 四、實(shí)驗(yàn)結(jié)果與分析(程序運(yùn)行結(jié)果及其分析) 五、實(shí)驗(yàn)體會(huì)(遇到問(wèn)題及解決辦法,編程后的心得體會(huì)) 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)項(xiàng)目名稱: 查找 實(shí)驗(yàn)學(xué)時(shí): 2 同組學(xué)生姓名: 實(shí)驗(yàn)地點(diǎn): 實(shí)驗(yàn)日期: 實(shí)驗(yàn)成績(jī): 批改教師: 批改時(shí)間: 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)8 查找 一、實(shí)驗(yàn)?zāi)康暮鸵?/p> (1)掌握順序表查找、有序表查找、索引順序表查找的各種算法。(2)掌握哈希表設(shè)計(jì)。 二、實(shí)驗(yàn)儀器和設(shè)備 Visual C++6.0 三、實(shí)驗(yàn)內(nèi)容與過(guò)程(含程序清單及流程圖) 1、必做題 (1)在一個(gè)遞增有序的線性表中利用二分查找法查找數(shù)據(jù)元素X。 2、選做題 (2)構(gòu)造一個(gè)哈希表,哈希函數(shù)采用除留余數(shù)法,哈希沖突解決方法采用鏈地址法。設(shè)計(jì)一個(gè)測(cè)試程序進(jìn)行測(cè)試。 提示:構(gòu)造哈希表只是完成查找的第一步,大家應(yīng)該掌握在哈希表上進(jìn)行查找的過(guò)程,可以試著編程序?qū)崿F(xiàn)。程序清單: 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 四、實(shí)驗(yàn)結(jié)果與分析(程序運(yùn)行結(jié)果及其分析) 五、實(shí)驗(yàn)體會(huì)(遇到問(wèn)題及解決辦法,編程后的心得體會(huì)) 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 學(xué) 生 實(shí) 驗(yàn) 報(bào) 告 冊(cè) 課程名稱: 學(xué)生學(xué)號(hào): 所屬院部: (理工類) 算法與數(shù)據(jù)結(jié)構(gòu) 專業(yè)班級(jí): 學(xué)生姓名: 指導(dǎo)教師: 14 ——20 15 學(xué)年 第 二 學(xué)期 金陵科技學(xué)院教務(wù)處制 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)報(bào)告書寫要求 實(shí)驗(yàn)報(bào)告原則上要求學(xué)生手寫,要求書寫工整。若因課程特點(diǎn)需打印的,要遵照以下字體、字號(hào)、間距等的具體要求。紙張一律采用A4的紙張。 實(shí)驗(yàn)報(bào)告書寫說(shuō)明 實(shí)驗(yàn)報(bào)告中一至四項(xiàng)內(nèi)容為必填項(xiàng),包括實(shí)驗(yàn)?zāi)康暮鸵螅粚?shí)驗(yàn)儀器和設(shè)備;實(shí)驗(yàn)內(nèi)容與過(guò)程;實(shí)驗(yàn)結(jié)果與分析。各院部可根據(jù)學(xué)科特點(diǎn)和實(shí)驗(yàn)具體要求增加項(xiàng)目。 填寫注意事項(xiàng) (1)細(xì)致觀察,及時(shí)、準(zhǔn)確、如實(shí)記錄。(2)準(zhǔn)確說(shuō)明,層次清晰。 (3)盡量采用專用術(shù)語(yǔ)來(lái)說(shuō)明事物。 (4)外文、符號(hào)、公式要準(zhǔn)確,應(yīng)使用統(tǒng)一規(guī)定的名詞和符號(hào)。(5)應(yīng)獨(dú)立完成實(shí)驗(yàn)報(bào)告的書寫,嚴(yán)禁抄襲、復(fù)印,一經(jīng)發(fā)現(xiàn),以零分論處。 實(shí)驗(yàn)報(bào)告批改說(shuō)明 實(shí)驗(yàn)報(bào)告的批改要及時(shí)、認(rèn)真、仔細(xì),一律用紅色筆批改。實(shí)驗(yàn)報(bào)告的批改成績(jī)采用百分制,具體評(píng)分標(biāo)準(zhǔn)由各院部自行制定。 實(shí)驗(yàn)報(bào)告裝訂要求 實(shí)驗(yàn)批改完畢后,任課老師將每門課程的每個(gè)實(shí)驗(yàn)項(xiàng)目的實(shí)驗(yàn)報(bào)告以自然班為單位、按學(xué)號(hào)升序排列,裝訂成冊(cè),并附上一份該門課程的實(shí)驗(yàn)大綱。 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)項(xiàng)目名稱: 順序表 實(shí)驗(yàn)學(xué)時(shí): 2 同組學(xué)生姓名: 實(shí)驗(yàn)地點(diǎn): 實(shí)驗(yàn)日期: 實(shí)驗(yàn)成績(jī): 批改教師: 批改時(shí)間: 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)1 順序表 一、實(shí)驗(yàn)?zāi)康暮鸵?/p> 掌握順序表的定位、插入、刪除等操作。 二、實(shí)驗(yàn)儀器和設(shè)備 Turbo C 2.0 三、實(shí)驗(yàn)內(nèi)容與過(guò)程(含程序清單及流程圖) 1、必做題 (1)編寫程序建立一個(gè)順序表,并逐個(gè)輸出順序表中所有數(shù)據(jù)元素的值。編寫主函數(shù)測(cè)試結(jié)果。 (2)編寫順序表定位操作子函數(shù),在順序表中查找是否存在數(shù)據(jù)元素x。如果存在,返回順序表中和x值相等的第1個(gè)數(shù)據(jù)元素的序號(hào)(序號(hào)從0開(kāi)始編號(hào));如果不存在,返回-1。編寫主函數(shù)測(cè)試結(jié)果。(3)在遞增有序的順序表中插入一個(gè)新結(jié)點(diǎn)x,保持順序表的有序性。 解題思路:首先查找插入的位置,再移位,最后進(jìn)行插入操作;從第一個(gè)元素開(kāi)始找到第一個(gè)大于該新結(jié)點(diǎn)值x的元素位置i即為插入位置;然后將從表尾開(kāi)始依次將元素后移一個(gè)位置直至元素i;最后將新結(jié)點(diǎn)x插入到i位置。 (4)刪除順序表中所有等于X的數(shù)據(jù)元素。 2、選做題 (5)已知兩個(gè)順序表A和B按元素值遞增有序排列,要求寫一算法實(shí)現(xiàn)將A和B歸并成一個(gè)按元素值遞減有序排列的順序表(允許表中含有值相同的元素)。 程序清單: 1、(1)#include datatype a[maxsize]; int size;}sequence_list;sequence_list mylist;void display(sequence_list slt) 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 { int i; if(slt.size==0) printf(“n 順表表是空的”); else for(i=0;i printf(“%5d”,slt.a[i]);} void init(sequence_list *slt){ slt->size=0;} void main(){ int i,number;init(&mylist);printf(“順序表是空的請(qǐng)建立順序表!”);printf(“n”);printf(“請(qǐng)輸入順序表中的元素個(gè)數(shù)!n”);scanf(“%d”,&number);mylist.size=number;for(i=0;i scanf(“%d”,&mylist.a[i]);} }(2)#include datatype a[maxsize]; int size;}sequence_list;sequence_list mylist;void display(sequence_list slt){ int i;display(mylist);printf(“n”); 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 if(slt.size==0) printf(“n 順表表是空的”); else for(i=0;i printf(“%5d”,slt.a[i]);} void init(sequence_list *slt){ slt->size=0;} int find(sequence_list *slt,int x){ int i,a;for(i=0;i if(x==slt->a[i]) { a=i; break; } } if(i!=slt->size) return a; else return-1;} void main(){ int i,number,a,b;init(&mylist);printf(“順序表是空的請(qǐng)建立順序表!”);printf(“n”);printf(“請(qǐng)輸入順序表中的元素個(gè)數(shù)!n”);scanf(“%d”,&number);mylist.size=number;for(i=0;i scanf(“%d”,&mylist.a[i]);} display(mylist);printf(“n”);printf(“輸入要查找的數(shù):”);scanf(“%d”,&a);b=find(&mylist,a); 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 } if(b!=-1){ printf(“順序表的下標(biāo)為:%dn”,b);} else printf(“can not be found!”);(3)#include for(i=0;i for(j=i+1;j { if(slt->a[i]>slt->a[j]) { temp=slt->a[i]; slt->a[i]=slt->a[j]; 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 slt->a[j]=temp; } } } } void append(sequence_list *slt,int x){ slt->a[slt->size]=x;slt->size++;sort(&mylist);} void main(){ int i,number,x;init(&mylist);printf(“順序表是空的請(qǐng)建立順序表!”);printf(“n”);printf(“請(qǐng)輸入順序表中的元素個(gè)數(shù)!n”);scanf(“%d”,&number);mylist.size=number;for(i=0;i scanf(“%d”,&mylist.a[i]);} display(mylist);sort(&mylist);printf(“n”);display(mylist);printf(“n”);printf(“輸入要插入的元素:”);printf(“n”);scanf(“%d”,&x);append(&mylist,x);display(mylist);printf(“n”);}(4)#include typedef int datatype;typedef struct 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 { datatype a[maxsize];int size;}sequence_list;sequence_list mylist;void display(sequence_list slt){ int i;if(slt.size == 0) printf(“n 順表表是空的”);else for(i = 0;i printf(“%5d”, slt.a[i]);} void init(sequence_list *slt){ slt->size = 0;} void sort(sequence_list *slt){ int i, j, temp;//交換法排序 for(i = 0;i for(j = i + 1;j { if(slt->a[i]>slt->a[j]) { temp = slt->a[i]; slt->a[i] = slt->a[j]; slt->a[j] = temp; } } } } void del(sequence_list *slt, int x){ int m[maxsize];int i, n = 0, j, a = 0;for(i = 0;i if(slt->a[i]!= x) { 金陵科技學(xué)院實(shí)驗(yàn)報(bào)告 m[n++] = slt->a[i]; } else a++; } slt->size = slt->size1, from, to, denpend_on);//先將初始塔的前n-1個(gè)盤子借助目的塔移動(dòng)到借用塔上 move(n, from, to);//將剩下的一個(gè)盤子移動(dòng)到目的塔上 hanoi(n1);} int IsPalindrome(char * str){ int len = StrLen(str);int i = 0;for(;i if(str[i]!= str[len1])return 0;} return 1;} void main(){ char * str =(char *)malloc(INIT_SIZE * sizeof(char));char ch;int i = 0;//字符串當(dāng)前字符數(shù) int len = INIT_SIZE;//字符串空間大小 while(ch = getchar()){ // 循環(huán)錄入字符串 if(ch == '@'){ ///如果按回車鍵,則結(jié)束 str[i] = '
第二篇:算法與數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)指導(dǎo)書
第三篇:算法與數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)冊(cè)
第四篇:算法與數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)冊(cè)