欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      算法與數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)

      時(shí)間:2019-05-12 12:49:17下載本文作者:會(huì)員上傳
      簡(jiǎn)介:寫寫幫文庫(kù)小編為你整理了多篇相關(guān)的《算法與數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)》,但愿對(duì)你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫(kù)還可以找到更多《算法與數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)》。

      第一篇:算法與數(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 #include #define MAXSIZE 100 typedef struct { int data[MAXSIZE];int last;

      金陵科技學(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ì))

      第二篇:算法與數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)指導(dǎo)書

      北 京 郵 電 大 學(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 //假設(shè)類型 T 是可以排序的 class Multi_set

      {

      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 Multi_set Mult_set:: operator+(Multi_set const& a,Multi_set const& b);

      //返回集合a,b的差

      template Multi_set Mult_set:: operator-(Multi_set const& a,Multi_set const& b);

      //返回 a –{v}

      template

      Multi_set Multi_set::operator-(Multi_set const& a,T const& v);

      九、可研究與探索的問(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年

      第三篇:算法與數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)冊(cè)

      金陵科技學(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 typedef int datatype;#define maxsize 1024 typedef struct { datatype data[maxsize];int last;

      金陵科技學(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 typedef int datatype;#define maxsize 1024 typedef struct { datatype data[maxsize];int last;}sequenlist;

      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ì))

      第四篇:算法與數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)冊(cè)

      金陵科技學(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 #include #define maxsize 100 typedef int datatype;typedef struct {

      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 #include #define maxsize 100 typedef int datatype;typedef struct {

      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;isize;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 #include #define maxsize 100 typedef int datatype;typedef struct { 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;isize=0;} void sort(sequence_list *slt){ int i,j,temp;//交換法排序

      for(i=0;isize;i++){

      for(j=i+1;jsize;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 #include #define maxsize 100

      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;isize;i++){

      for(j = i + 1;jsize;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;isize;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] = '