第一篇:算法與數(shù)據(jù)結(jié)構(gòu)實驗冊
金陵科技學(xué)院實驗報告
學(xué) 生 實 驗 報 告 冊
課程名稱:
學(xué)生學(xué)號:
所屬院部:
(理工類)
算法與數(shù)據(jù)結(jié)構(gòu) 專業(yè)班級:
學(xué)生姓名:
指導(dǎo)教師: ——20 學(xué)年 第 學(xué)期
金陵科技學(xué)院教務(wù)處制
金陵科技學(xué)院實驗報告
實驗報告書寫要求
實驗報告原則上要求學(xué)生手寫,要求書寫工整。若因課程特點需打印的,要遵照以下字體、字號、間距等的具體要求。紙張一律采用A4的紙張。
實驗報告書寫說明
實驗報告中一至四項內(nèi)容為必填項,包括實驗?zāi)康暮鸵?;實驗儀器和設(shè)備;實驗內(nèi)容與過程;實驗結(jié)果與分析。各院部可根據(jù)學(xué)科特點和實驗具體要求增加項目。
填寫注意事項
(1)細(xì)致觀察,及時、準(zhǔn)確、如實記錄。(2)準(zhǔn)確說明,層次清晰。
(3)盡量采用專用術(shù)語來說明事物。
(4)外文、符號、公式要準(zhǔn)確,應(yīng)使用統(tǒng)一規(guī)定的名詞和符號。(5)應(yīng)獨立完成實驗報告的書寫,嚴(yán)禁抄襲、復(fù)印,一經(jīng)發(fā)現(xiàn),以零分論處。
實驗報告批改說明
實驗報告的批改要及時、認(rèn)真、仔細(xì),一律用紅色筆批改。實驗報告的批改成績采用百分制,具體評分標(biāo)準(zhǔn)由各院部自行制定。
實驗報告裝訂要求
實驗批改完畢后,任課老師將每門課程的每個實驗項目的實驗報告以自然班為單位、按學(xué)號升序排列,裝訂成冊,并附上一份該門課程的實驗大綱。
金陵科技學(xué)院實驗報告
實驗項目名稱: 順序表 實驗學(xué)時: 2 同組學(xué)生姓名: 實驗地點: 實驗日期: 實驗成績: 批改教師: 批改時間:
金陵科技學(xué)院實驗報告
實驗1 順序表
一、實驗?zāi)康暮鸵?/p>
掌握順序表的定位、插入、刪除等操作。
二、實驗儀器和設(shè)備
VC6.0
三、實驗內(nèi)容與過程(含程序清單及流程圖)
1、必做題
(1)編寫程序建立一個順序表,并逐個輸出順序表中所有數(shù)據(jù)元素的值。編寫主函數(shù)測試結(jié)果。
(2)編寫順序表定位操作子函數(shù),在順序表中查找是否存在數(shù)據(jù)元素x。如果存在,返回順序表中和x值相等的第1個數(shù)據(jù)元素的序號(序號從0開始編號);如果不存在,返回-1。編寫主函數(shù)測試結(jié)果。(3)在遞增有序的順序表中插入一個新結(jié)點x,保持順序表的有序性。
解題思路:首先查找插入的位置,再移位,最后進(jìn)行插入操作;從第一個元素開始找到第一個大于該新結(jié)點值x的元素位置i即為插入位置;然后將從表尾開始依次將元素后移一個位置直至元素i;最后將新結(jié)點x插入到i位置。
(4)刪除順序表中所有等于X的數(shù)據(jù)元素。
2、選做題
(5)已知兩個順序表A和B按元素值遞增有序排列,要求寫一算法實現(xiàn)將A和B歸并成一個按元素值遞減有序排列的順序表(允許表中含有值相同的元素)。
程序清單:
金陵科技學(xué)院實驗報告
金陵科技學(xué)院實驗報告
四、實驗結(jié)果與分析(程序運(yùn)行結(jié)果及其分析)
五、實驗體會(遇到問題及解決辦法,編程后的心得體會)
金陵科技學(xué)院實驗報告
實驗項目名稱: 單鏈表 實驗學(xué)時: 2 同組學(xué)生姓名: 實驗地點: 實驗日期: 實驗成績: 批改教師: 批改時間:
金陵科技學(xué)院實驗報告
實驗2 單鏈表
一、實驗?zāi)康暮鸵?/p>
1、實驗?zāi)康?/p>
掌握單鏈表的定位、插入、刪除等操作。
2、實驗要求
(1)注意鏈表的空間是動態(tài)分配的,某結(jié)點不用之后要及時進(jìn)行物理刪除,以便釋放其內(nèi)存空間。
(2)鏈表不能實現(xiàn)直接定位,一定注意指針的保存,防止丟失。
二、實驗儀器和設(shè)備
Visual C++6.0
三、實驗內(nèi)容與過程(含程序清單及流程圖)
1、必做題
(1)編寫程序建立一個單鏈表,并逐個輸出單鏈表中所有數(shù)據(jù)元素。(2)在遞增有序的單鏈表中插入一個新結(jié)點x,保持單鏈表的有序性。
解題思路:首先查找插入的位置然后進(jìn)行插入操作;從第一個結(jié)點開始找到第一個大于該新結(jié)點值的結(jié)點即為插入位置;然后在找到的此結(jié)點之前插入新結(jié)點;注意保留插入位置之前結(jié)點的指針才能完成插入操作。
(3)編寫實現(xiàn)帶頭結(jié)點單鏈表就地逆置的子函數(shù),并編寫主函數(shù)測試結(jié)果。
2、選做題
已知指針LA和LB分別指向兩個無頭結(jié)點單鏈表的首元結(jié)點。要求編一算法實現(xiàn),從表LA中刪除自第i個元素起共len個元素后,將它們插入到表LB中第j個元素之前。程序清單:
金陵科技學(xué)院實驗報告
金陵科技學(xué)院實驗報告
四、實驗結(jié)果與分析(程序運(yùn)行結(jié)果及其分析)
五、實驗體會(遇到問題及解決辦法,編程后的心得體會)
金陵科技學(xué)院實驗報告
實驗項目名稱: 堆棧和隊列 實驗學(xué)時: 2 同組學(xué)生姓名: 實驗地點: 實驗日期: 實驗成績: 批改教師: 批改時間:
金陵科技學(xué)院實驗報告
實驗3 堆棧和隊列
一、實驗?zāi)康暮鸵?/p>
(1)掌握應(yīng)用棧解決問題的方法。(2)掌握利用棧進(jìn)行表達(dá)式求和的算法。
(3)掌握隊列的存儲結(jié)構(gòu)及基本操作實現(xiàn),并能在相應(yīng)的應(yīng)用問題中正確選用它們。
二、實驗儀器和設(shè)備
Visual C++6.0
三、實驗內(nèi)容與過程(含程序清單及流程圖)
1、必做題
(1)判斷一個算術(shù)表達(dá)式中開括號和閉括號是否配對。(2)測試“漢諾塔”問題。
(3)假設(shè)稱正讀和反讀都相同的字符序列為”回文”,試寫一個算法判別讀入的一個以’@’為結(jié)束符的字符序列是否是“回文”。
2、選做題
在順序存儲結(jié)構(gòu)上實現(xiàn)輸出受限的雙端循環(huán)隊列的入列和出列算法。設(shè)每個元素表示一個待處理的作業(yè),元素值表示作業(yè)的預(yù)計時間。入隊列采取簡化的短作業(yè)優(yōu)先原則,若一個新提交的作業(yè)的預(yù)計執(zhí)行時間小于隊頭和隊尾作業(yè)的平均時間,則插入在隊頭,否則插入在隊尾。程序清單:
金陵科技學(xué)院實驗報告
四、實驗結(jié)果與分析(程序運(yùn)行結(jié)果及其分析)
金陵科技學(xué)院實驗報告
五、實驗體會(遇到問題及解決辦法,編程后的心得體會)
金陵科技學(xué)院實驗報告
實驗項目名稱: 串 實驗學(xué)時: 2 同組學(xué)生姓名: 實驗地點: 實驗日期: 實驗成績: 批改教師: 批改時間:
金陵科技學(xué)院實驗報告
實驗4 串
一、實驗?zāi)康暮鸵?/p>
掌握串的存儲及應(yīng)用。
二、實驗儀器和設(shè)備
Visual C++6.0
三、實驗內(nèi)容與過程(含程序清單及流程圖)
1、必做題
(1)編寫輸出字符串s中值等于字符ch的第一個字符的函數(shù),并用主函數(shù)測試結(jié)果。
(2)編寫輸出字符串s中值等于字符ch的所有字符的函數(shù),并用主函數(shù)測試結(jié)果。
解題思路:可以將第一題程序改進(jìn)成一個子函數(shù),在本題中循環(huán)調(diào)用。(3)設(shè)字符串采用單字符的鏈?zhǔn)酱鎯Y(jié)構(gòu),編程刪除串s從位置i開始長度為k的子串。
2、選做題
假設(shè)以鏈結(jié)構(gòu)表示串,編寫算法實現(xiàn)將串S插入到串T中某個字符之后,若串T中不存在這個字符,則將串S聯(lián)接在串T的末尾。
提示:為提高程序的通用性,插入位置字符應(yīng)設(shè)計為從鍵盤輸入。程序清單:
金陵科技學(xué)院實驗報告
四、實驗結(jié)果與分析(程序運(yùn)行結(jié)果及其分析)
金陵科技學(xué)院實驗報告
五、實驗體會(遇到問題及解決辦法,編程后的心得體會)
金陵科技學(xué)院實驗報告
實驗項目名稱: 二叉樹 實驗學(xué)時: 2 同組學(xué)生姓名: 實驗地點: 實驗日期: 實驗成績: 批改教師: 批改時間:
金陵科技學(xué)院實驗報告
實驗5 二叉樹
一、實驗?zāi)康暮鸵?/p>
(1)掌握二叉樹的生成,以及前、中、后序遍歷算法。(2)掌握應(yīng)用二叉樹遞歸遍歷思想解決問題的方法。
二、實驗儀器和設(shè)備
Visual C++6.0
三、實驗內(nèi)容與過程(含程序清單及流程圖)
1、必做題
(1)建立一棵二叉樹。對此樹進(jìn)行前序遍歷、中序遍歷及后序遍歷,輸出遍歷序列。
(2)在第一題基礎(chǔ)上,求二叉樹中葉結(jié)點的個數(shù)。(3)在第一題基礎(chǔ)上,求二叉樹中結(jié)點總數(shù)。(4)在第一題基礎(chǔ)上,求二叉樹的深度。
2、選做題
已知一棵完全二叉樹存于順序表sa中,sa.elem[1…sa.last]存儲結(jié)點的值。試編寫算法由此順序存儲結(jié)構(gòu)建立該二叉樹的二叉鏈表。
解題思路:根據(jù)完全二叉樹順序存儲的性質(zhì)來確定二叉樹的父子關(guān)系即“還原”了二叉樹,之后再按照二叉樹二叉鏈表的構(gòu)造方法進(jìn)行建立。完全二叉樹順序存儲的一個重要性質(zhì)為,第i個結(jié)點的左孩子是編號為2i的結(jié)點,第i個結(jié)點的右孩子是編號為2i+1的結(jié)點。程序清單:
金陵科技學(xué)院實驗報告
四、實驗結(jié)果與分析(程序運(yùn)行結(jié)果及其分析)
金陵科技學(xué)院實驗報告
五、實驗體會(遇到問題及解決辦法,編程后的心得體會)
金陵科技學(xué)院實驗報告
實驗項目名稱: 圖 實驗學(xué)時: 2 同組學(xué)生姓名: 實驗地點: 實驗日期: 實驗成績: 批改教師: 批改時間:
金陵科技學(xué)院實驗報告
實驗6 圖
一、實驗?zāi)康暮鸵?/p>
(1)熟練掌握圖的基本概念、構(gòu)造及其存儲結(jié)構(gòu)。
(2)熟練掌握對圖的深度優(yōu)先搜索遍歷和廣度優(yōu)先搜索遍歷的算法。
二、實驗儀器和設(shè)備
Visual C++6.0
三、實驗內(nèi)容與過程(含程序清單及流程圖)
1、必做題
(1)構(gòu)造一個無向圖(用鄰接矩陣表示存儲結(jié)構(gòu))。
(2)對上面所構(gòu)造的無向圖,進(jìn)行深度優(yōu)先遍歷和廣度優(yōu)先遍歷,輸出遍歷序列。
2、選做題
采用鄰接表存儲結(jié)構(gòu),編寫一個判別無向圖中任意給定的兩個頂點之間是否存在一條長度為k的簡單路徑的算法。簡單路徑是指其頂點序列中不含有重復(fù)頂點的路徑。提示:兩個頂點及k值均作為參數(shù)給出。程序清單:
金陵科技學(xué)院實驗報告
四、實驗結(jié)果與分析(程序運(yùn)行結(jié)果及其分析)
五、實驗體會(遇到問題及解決辦法,編程后的心得體會)
金陵科技學(xué)院實驗報告
實驗項目名稱: 排序 實驗學(xué)時: 2 同組學(xué)生姓名: 實驗地點: 實驗日期: 實驗成績: 批改教師: 批改時間:
金陵科技學(xué)院實驗報告
實驗7 排序
一、實驗?zāi)康暮鸵?/p>
(1)熟練掌握希爾排序、堆排序、直接插入排序、起泡排序、快速排序、直接選擇排序、歸并排序和基數(shù)排序的基本概念。
(2)掌握以上各種排序的算法。區(qū)分以上不同排序的優(yōu)、缺點。
二、實驗儀器和設(shè)備
Visual C++6.0
三、實驗內(nèi)容與過程(含程序清單及流程圖)
1、必做題
用隨機(jī)數(shù)產(chǎn)生100000個待排序數(shù)據(jù)元素的關(guān)鍵字值。測試下列各排序函數(shù)的機(jī)器實際執(zhí)行時間(至少測試兩個):直接插入排序、希爾排序(增量為4,2,1)、冒泡排序、快速排序、直接選擇排序、二路歸并排序、堆排序和基于鏈?zhǔn)疥犃械幕鶖?shù)排序。
2、選做題
假設(shè)含n個記錄的序列中,其所有關(guān)鍵字為值介于v和w之間的整數(shù),且其中很多關(guān)鍵字的值是相同的。則可按如下方法排序:另設(shè)數(shù)組number[v…w],令number[i]統(tǒng)計關(guān)鍵字為整數(shù)i的紀(jì)錄個數(shù),然后按number重排序列以達(dá)到有序。試編寫算法實現(xiàn)上述排序方法,并討論此種方法的優(yōu)缺點。程序清單:
金陵科技學(xué)院實驗報告
金陵科技學(xué)院實驗報告
四、實驗結(jié)果與分析(程序運(yùn)行結(jié)果及其分析)
五、實驗體會(遇到問題及解決辦法,編程后的心得體會)
金陵科技學(xué)院實驗報告
實驗項目名稱: 查找 實驗學(xué)時: 2 同組學(xué)生姓名: 實驗地點: 實驗日期: 實驗成績: 批改教師: 批改時間:
金陵科技學(xué)院實驗報告
實驗8 查找
一、實驗?zāi)康暮鸵?/p>
(1)掌握順序表查找、有序表查找、索引順序表查找的各種算法。(2)掌握哈希表設(shè)計。
二、實驗儀器和設(shè)備
Visual C++6.0
三、實驗內(nèi)容與過程(含程序清單及流程圖)
1、必做題
(1)在一個遞增有序的線性表中利用二分查找法查找數(shù)據(jù)元素X。
2、選做題
(2)構(gòu)造一個哈希表,哈希函數(shù)采用除留余數(shù)法,哈希沖突解決方法采用鏈地址法。設(shè)計一個測試程序進(jìn)行測試。
提示:構(gòu)造哈希表只是完成查找的第一步,大家應(yīng)該掌握在哈希表上進(jìn)行查找的過程,可以試著編程序?qū)崿F(xiàn)。程序清單:
金陵科技學(xué)院實驗報告
四、實驗結(jié)果與分析(程序運(yùn)行結(jié)果及其分析)
五、實驗體會(遇到問題及解決辦法,編程后的心得體會)
第二篇:算法與數(shù)據(jù)結(jié)構(gòu)實驗冊
金陵科技學(xué)院實驗報告
學(xué) 生 實 驗 報 告 冊
課程名稱:
學(xué)生學(xué)號:
所屬院部:
(理工類)
算法與數(shù)據(jù)結(jié)構(gòu) 專業(yè)班級: 14計單(2)
1413201007 學(xué)生姓名: 毛卓
計算機(jī)工程學(xué)院 指導(dǎo)教師: 章海鷗 16 ——20 17 學(xué)年 第 二 學(xué)期
金陵科技學(xué)院教務(wù)處制
金陵科技學(xué)院實驗報告
實驗報告書寫要求
實驗報告原則上要求學(xué)生手寫,要求書寫工整。若因課程特點需打印的,要遵照以下字體、字號、間距等的具體要求。紙張一律采用A4的紙張。
實驗報告書寫說明
實驗報告中一至四項內(nèi)容為必填項,包括實驗?zāi)康暮鸵螅粚嶒瀮x器和設(shè)備;實驗內(nèi)容與過程;實驗結(jié)果與分析。各院部可根據(jù)學(xué)科特點和實驗具體要求增加項目。
填寫注意事項
(1)細(xì)致觀察,及時、準(zhǔn)確、如實記錄。(2)準(zhǔn)確說明,層次清晰。
(3)盡量采用專用術(shù)語來說明事物。
(4)外文、符號、公式要準(zhǔn)確,應(yīng)使用統(tǒng)一規(guī)定的名詞和符號。(5)應(yīng)獨立完成實驗報告的書寫,嚴(yán)禁抄襲、復(fù)印,一經(jīng)發(fā)現(xiàn),以零分論處。
實驗報告批改說明
實驗報告的批改要及時、認(rèn)真、仔細(xì),一律用紅色筆批改。實驗報告的批改成績采用百分制,具體評分標(biāo)準(zhǔn)由各院部自行制定。
實驗報告裝訂要求
實驗批改完畢后,任課老師將每門課程的每個實驗項目的實驗報告以自然班為單位、按學(xué)號升序排列,裝訂成冊,并附上一份該門課程的實驗大綱。
金陵科技學(xué)院實驗報告
實驗項目名稱: 順序表 實驗學(xué)時: 2 同組學(xué)生姓名: 實驗地點: 實驗日期: 實驗成績: 批改教師: 批改時間:
金陵科技學(xué)院實驗報告
實驗1 順序表
一、實驗?zāi)康暮鸵?/p>
掌握順序表的定位、插入、刪除等操作。
二、實驗儀器和設(shè)備
VC6.0
三、實驗內(nèi)容與過程(含程序清單及流程圖)
1、必做題
(1)編寫程序建立一個順序表,并逐個輸出順序表中所有數(shù)據(jù)元素的值。編寫主函數(shù)測試結(jié)果。
(2)編寫順序表定位操作子函數(shù),在順序表中查找是否存在數(shù)據(jù)元素x。如果存在,返回順序表中和x值相等的第1個數(shù)據(jù)元素的序號(序號從0開始編號);如果不存在,返回-1。編寫主函數(shù)測試結(jié)果。(3)在遞增有序的順序表中插入一個新結(jié)點x,保持順序表的有序性。
解題思路:首先查找插入的位置,再移位,最后進(jìn)行插入操作;從第一個元素開始找到第一個大于該新結(jié)點值x的元素位置i即為插入位置;然后將從表尾開始依次將元素后移一個位置直至元素i;最后將新結(jié)點x插入到i位置。
(4)刪除順序表中所有等于X的數(shù)據(jù)元素。
2、選做題
(5)已知兩個順序表A和B按元素值遞增有序排列,要求寫一算法實現(xiàn)將A和B歸并成一個按元素值遞減有序排列的順序表(允許表中含有值相同的元素)。
程序清單:
(1):/*編寫程序建立一個順序表,并逐個輸出順序表中所有數(shù)據(jù)元素的值。*/ #include
金陵科技學(xué)院實驗報告
}sequenlist;void main(){ sequenlist L;int i,n;printf(“請輸入元素個數(shù):”);scanf(“%d”,&n);printf(“n請輸入元素:”);for(i=0;i 如果不存在,返回-1。*/ #include int fun(sequenlist L,int x,int n){ 金陵科技學(xué)院實驗報告 } int i;for(i=0;i } int i,n,y;int x; printf(“請輸入元素個數(shù):”);scanf(“%d”,&n);printf(“n請輸入元素:”);for(i=0;i printf(“n請輸入要查找的數(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): /*在遞增有序的順序表中插入一個新結(jié)點x,保持順序表的有序性。 解題思路:首先查找插入的位置,再移位,最后進(jìn)行插入操作; 從第一個元素開始找到第一個大于該新結(jié)點值x的元素位置i即為插入位置; 金陵科技學(xué)院實驗報告 然后將從表尾開始依次將元素后移一個位置直至元素i;最后將新結(jié)點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請輸入要插入的元素:”); 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é)院實驗報告 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請輸入要刪除的數(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é)院實驗報告 printf(“n”);} 四、實驗結(jié)果與分析(程序運(yùn)行結(jié)果及其分析)(1)結(jié)果: 請輸入元素個數(shù):5 請輸入元素:1 2 3 4 5 元素輸出:1 2 3 4 5(2)結(jié)果: 請輸入元素個數(shù):5 請輸入元素:1 2 3 4 5 請輸入要查找的數(shù)據(jù)元素:5 數(shù)據(jù)元素5所在的位置為 4(3)結(jié)果:插入數(shù)據(jù)前的元素為:1 3 5 6 7 9 請輸入要插入的元素為:10 插入元素后的數(shù)據(jù)為: 5 6 7 9 10(4)結(jié)果:原數(shù)據(jù)為:1 3 5 7 2 4 6 8 2 9 請輸入要刪除的數(shù)據(jù)為:7 刪除后的數(shù)據(jù)為: 3 5 2 4 6 8 2 9 五、實驗體會(遇到問題及解決辦法,編程后的心得體會) 金陵科技學(xué)院實驗報告 實驗項目名稱: 單鏈表 實驗學(xué)時: 2 同組學(xué)生姓名: 實驗地點: 實驗日期: 實驗成績: 批改教師: 批改時間: 金陵科技學(xué)院實驗報告 實驗2 單鏈表 一、實驗?zāi)康暮鸵?/p> 1、實驗?zāi)康?/p> 掌握單鏈表的定位、插入、刪除等操作。 2、實驗要求 (1)注意鏈表的空間是動態(tài)分配的,某結(jié)點不用之后要及時進(jìn)行物理刪除,以便釋放其內(nèi)存空間。 (2)鏈表不能實現(xiàn)直接定位,一定注意指針的保存,防止丟失。 二、實驗儀器和設(shè)備 Visual C++6.0 三、實驗內(nèi)容與過程(含程序清單及流程圖) 1、必做題 (1)編寫程序建立一個單鏈表,并逐個輸出單鏈表中所有數(shù)據(jù)元素。(2)在遞增有序的單鏈表中插入一個新結(jié)點x,保持單鏈表的有序性。 解題思路:首先查找插入的位置然后進(jìn)行插入操作;從第一個結(jié)點開始找到第一個大于該新結(jié)點值的結(jié)點即為插入位置;然后在找到的此結(jié)點之前插入新結(jié)點;注意保留插入位置之前結(jié)點的指針才能完成插入操作。 (3)編寫實現(xiàn)帶頭結(jié)點單鏈表就地逆置的子函數(shù),并編寫主函數(shù)測試結(jié)果。 2、選做題 已知指針LA和LB分別指向兩個無頭結(jié)點單鏈表的首元結(jié)點。要求編一算法實現(xiàn),從表LA中刪除自第i個元素起共len個元素后,將它們插入到表LB中第j個元素之前。程序清單: 金陵科技學(xué)院實驗報告 金陵科技學(xué)院實驗報告 四、實驗結(jié)果與分析(程序運(yùn)行結(jié)果及其分析) 五、實驗體會(遇到問題及解決辦法,編程后的心得體會) 金陵科技學(xué)院實驗報告 實驗項目名稱: 堆棧和隊列 實驗學(xué)時: 2 同組學(xué)生姓名: 實驗地點: 實驗日期: 實驗成績: 批改教師: 批改時間: 金陵科技學(xué)院實驗報告 實驗3 堆棧和隊列 一、實驗?zāi)康暮鸵?/p> (1)掌握應(yīng)用棧解決問題的方法。(2)掌握利用棧進(jìn)行表達(dá)式求和的算法。 (3)掌握隊列的存儲結(jié)構(gòu)及基本操作實現(xiàn),并能在相應(yīng)的應(yīng)用問題中正確選用它們。 二、實驗儀器和設(shè)備 Visual C++6.0 三、實驗內(nèi)容與過程(含程序清單及流程圖) 1、必做題 (1)判斷一個算術(shù)表達(dá)式中開括號和閉括號是否配對。(2)測試“漢諾塔”問題。 (3)假設(shè)稱正讀和反讀都相同的字符序列為”回文”,試寫一個算法判別讀入的一個以’@’為結(jié)束符的字符序列是否是“回文”。 2、選做題 在順序存儲結(jié)構(gòu)上實現(xiàn)輸出受限的雙端循環(huán)隊列的入列和出列算法。設(shè)每個元素表示一個待處理的作業(yè),元素值表示作業(yè)的預(yù)計時間。入隊列采取簡化的短作業(yè)優(yōu)先原則,若一個新提交的作業(yè)的預(yù)計執(zhí)行時間小于隊頭和隊尾作業(yè)的平均時間,則插入在隊頭,否則插入在隊尾。程序清單: 金陵科技學(xué)院實驗報告 四、實驗結(jié)果與分析(程序運(yùn)行結(jié)果及其分析) 金陵科技學(xué)院實驗報告 五、實驗體會(遇到問題及解決辦法,編程后的心得體會) 金陵科技學(xué)院實驗報告 實驗項目名稱: 串 實驗學(xué)時: 2 同組學(xué)生姓名: 實驗地點: 實驗日期: 實驗成績: 批改教師: 批改時間: 金陵科技學(xué)院實驗報告 實驗4 串 一、實驗?zāi)康暮鸵?/p> 掌握串的存儲及應(yīng)用。 二、實驗儀器和設(shè)備 Visual C++6.0 三、實驗內(nèi)容與過程(含程序清單及流程圖) 1、必做題 (1)編寫輸出字符串s中值等于字符ch的第一個字符的函數(shù),并用主函數(shù)測試結(jié)果。 (2)編寫輸出字符串s中值等于字符ch的所有字符的函數(shù),并用主函數(shù)測試結(jié)果。 解題思路:可以將第一題程序改進(jìn)成一個子函數(shù),在本題中循環(huán)調(diào)用。(3)設(shè)字符串采用單字符的鏈?zhǔn)酱鎯Y(jié)構(gòu),編程刪除串s從位置i開始長度為k的子串。 2、選做題 假設(shè)以鏈結(jié)構(gòu)表示串,編寫算法實現(xiàn)將串S插入到串T中某個字符之后,若串T中不存在這個字符,則將串S聯(lián)接在串T的末尾。 提示:為提高程序的通用性,插入位置字符應(yīng)設(shè)計為從鍵盤輸入。程序清單: 金陵科技學(xué)院實驗報告 四、實驗結(jié)果與分析(程序運(yùn)行結(jié)果及其分析) 金陵科技學(xué)院實驗報告 五、實驗體會(遇到問題及解決辦法,編程后的心得體會) 金陵科技學(xué)院實驗報告 實驗項目名稱: 二叉樹 實驗學(xué)時: 2 同組學(xué)生姓名: 實驗地點: 實驗日期: 實驗成績: 批改教師: 批改時間: 金陵科技學(xué)院實驗報告 實驗5 二叉樹 一、實驗?zāi)康暮鸵?/p> (1)掌握二叉樹的生成,以及前、中、后序遍歷算法。(2)掌握應(yīng)用二叉樹遞歸遍歷思想解決問題的方法。 二、實驗儀器和設(shè)備 Visual C++6.0 三、實驗內(nèi)容與過程(含程序清單及流程圖) 1、必做題 (1)建立一棵二叉樹。對此樹進(jìn)行前序遍歷、中序遍歷及后序遍歷,輸出遍歷序列。 (2)在第一題基礎(chǔ)上,求二叉樹中葉結(jié)點的個數(shù)。(3)在第一題基礎(chǔ)上,求二叉樹中結(jié)點總數(shù)。(4)在第一題基礎(chǔ)上,求二叉樹的深度。 2、選做題 已知一棵完全二叉樹存于順序表sa中,sa.elem[1…sa.last]存儲結(jié)點的值。試編寫算法由此順序存儲結(jié)構(gòu)建立該二叉樹的二叉鏈表。 解題思路:根據(jù)完全二叉樹順序存儲的性質(zhì)來確定二叉樹的父子關(guān)系即“還原”了二叉樹,之后再按照二叉樹二叉鏈表的構(gòu)造方法進(jìn)行建立。完全二叉樹順序存儲的一個重要性質(zhì)為,第i個結(jié)點的左孩子是編號為2i的結(jié)點,第i個結(jié)點的右孩子是編號為2i+1的結(jié)點。程序清單: 金陵科技學(xué)院實驗報告 四、實驗結(jié)果與分析(程序運(yùn)行結(jié)果及其分析) 金陵科技學(xué)院實驗報告 五、實驗體會(遇到問題及解決辦法,編程后的心得體會) 金陵科技學(xué)院實驗報告 實驗項目名稱: 圖 實驗學(xué)時: 2 同組學(xué)生姓名: 實驗地點: 實驗日期: 實驗成績: 批改教師: 批改時間: 金陵科技學(xué)院實驗報告 實驗6 圖 一、實驗?zāi)康暮鸵?/p> (1)熟練掌握圖的基本概念、構(gòu)造及其存儲結(jié)構(gòu)。 (2)熟練掌握對圖的深度優(yōu)先搜索遍歷和廣度優(yōu)先搜索遍歷的算法。 二、實驗儀器和設(shè)備 Visual C++6.0 三、實驗內(nèi)容與過程(含程序清單及流程圖) 1、必做題 (1)構(gòu)造一個無向圖(用鄰接矩陣表示存儲結(jié)構(gòu))。 (2)對上面所構(gòu)造的無向圖,進(jìn)行深度優(yōu)先遍歷和廣度優(yōu)先遍歷,輸出遍歷序列。 2、選做題 采用鄰接表存儲結(jié)構(gòu),編寫一個判別無向圖中任意給定的兩個頂點之間是否存在一條長度為k的簡單路徑的算法。簡單路徑是指其頂點序列中不含有重復(fù)頂點的路徑。提示:兩個頂點及k值均作為參數(shù)給出。程序清單: 金陵科技學(xué)院實驗報告 四、實驗結(jié)果與分析(程序運(yùn)行結(jié)果及其分析) 五、實驗體會(遇到問題及解決辦法,編程后的心得體會) 金陵科技學(xué)院實驗報告 實驗項目名稱: 排序 實驗學(xué)時: 2 同組學(xué)生姓名: 實驗地點: 實驗日期: 實驗成績: 批改教師: 批改時間: 金陵科技學(xué)院實驗報告 實驗7 排序 一、實驗?zāi)康暮鸵?/p> (1)熟練掌握希爾排序、堆排序、直接插入排序、起泡排序、快速排序、直接選擇排序、歸并排序和基數(shù)排序的基本概念。 (2)掌握以上各種排序的算法。區(qū)分以上不同排序的優(yōu)、缺點。 二、實驗儀器和設(shè)備 Visual C++6.0 三、實驗內(nèi)容與過程(含程序清單及流程圖) 1、必做題 用隨機(jī)數(shù)產(chǎn)生100000個待排序數(shù)據(jù)元素的關(guān)鍵字值。測試下列各排序函數(shù)的機(jī)器實際執(zhí)行時間(至少測試兩個):直接插入排序、希爾排序(增量為4,2,1)、冒泡排序、快速排序、直接選擇排序、二路歸并排序、堆排序和基于鏈?zhǔn)疥犃械幕鶖?shù)排序。 2、選做題 假設(shè)含n個記錄的序列中,其所有關(guān)鍵字為值介于v和w之間的整數(shù),且其中很多關(guān)鍵字的值是相同的。則可按如下方法排序:另設(shè)數(shù)組number[v…w],令number[i]統(tǒng)計關(guān)鍵字為整數(shù)i的紀(jì)錄個數(shù),然后按number重排序列以達(dá)到有序。試編寫算法實現(xiàn)上述排序方法,并討論此種方法的優(yōu)缺點。程序清單: 金陵科技學(xué)院實驗報告 金陵科技學(xué)院實驗報告 四、實驗結(jié)果與分析(程序運(yùn)行結(jié)果及其分析) 五、實驗體會(遇到問題及解決辦法,編程后的心得體會) 金陵科技學(xué)院實驗報告 實驗項目名稱: 查找 實驗學(xué)時: 2 同組學(xué)生姓名: 實驗地點: 實驗日期: 實驗成績: 批改教師: 批改時間: 金陵科技學(xué)院實驗報告 實驗8 查找 一、實驗?zāi)康暮鸵?/p> (1)掌握順序表查找、有序表查找、索引順序表查找的各種算法。(2)掌握哈希表設(shè)計。 二、實驗儀器和設(shè)備 Visual C++6.0 三、實驗內(nèi)容與過程(含程序清單及流程圖) 1、必做題 (1)在一個遞增有序的線性表中利用二分查找法查找數(shù)據(jù)元素X。 2、選做題 (2)構(gòu)造一個哈希表,哈希函數(shù)采用除留余數(shù)法,哈希沖突解決方法采用鏈地址法。設(shè)計一個測試程序進(jìn)行測試。 提示:構(gòu)造哈希表只是完成查找的第一步,大家應(yīng)該掌握在哈希表上進(jìn)行查找的過程,可以試著編程序?qū)崿F(xiàn)。程序清單: 金陵科技學(xué)院實驗報告 四、實驗結(jié)果與分析(程序運(yùn)行結(jié)果及其分析) 五、實驗體會(遇到問題及解決辦法,編程后的心得體會) 金陵科技學(xué)院實驗報告 學(xué) 生 實 驗 報 告 冊 課程名稱: 學(xué)生學(xué)號: 所屬院部: (理工類) 算法與數(shù)據(jù)結(jié)構(gòu) 專業(yè)班級: 學(xué)生姓名: 指導(dǎo)教師: 14 ——20 15 學(xué)年 第 二 學(xué)期 金陵科技學(xué)院教務(wù)處制 金陵科技學(xué)院實驗報告 實驗報告書寫要求 實驗報告原則上要求學(xué)生手寫,要求書寫工整。若因課程特點需打印的,要遵照以下字體、字號、間距等的具體要求。紙張一律采用A4的紙張。 實驗報告書寫說明 實驗報告中一至四項內(nèi)容為必填項,包括實驗?zāi)康暮鸵?;實驗儀器和設(shè)備;實驗內(nèi)容與過程;實驗結(jié)果與分析。各院部可根據(jù)學(xué)科特點和實驗具體要求增加項目。 填寫注意事項 (1)細(xì)致觀察,及時、準(zhǔn)確、如實記錄。(2)準(zhǔn)確說明,層次清晰。 (3)盡量采用專用術(shù)語來說明事物。 (4)外文、符號、公式要準(zhǔn)確,應(yīng)使用統(tǒng)一規(guī)定的名詞和符號。(5)應(yīng)獨立完成實驗報告的書寫,嚴(yán)禁抄襲、復(fù)印,一經(jīng)發(fā)現(xiàn),以零分論處。 實驗報告批改說明 實驗報告的批改要及時、認(rèn)真、仔細(xì),一律用紅色筆批改。實驗報告的批改成績采用百分制,具體評分標(biāo)準(zhǔn)由各院部自行制定。 實驗報告裝訂要求 實驗批改完畢后,任課老師將每門課程的每個實驗項目的實驗報告以自然班為單位、按學(xué)號升序排列,裝訂成冊,并附上一份該門課程的實驗大綱。 金陵科技學(xué)院實驗報告 實驗項目名稱: 順序表 實驗學(xué)時: 2 同組學(xué)生姓名: 實驗地點: 實驗日期: 實驗成績: 批改教師: 批改時間: 金陵科技學(xué)院實驗報告 實驗1 順序表 一、實驗?zāi)康暮鸵?/p> 掌握順序表的定位、插入、刪除等操作。 二、實驗儀器和設(shè)備 Turbo C 2.0 三、實驗內(nèi)容與過程(含程序清單及流程圖) 1、必做題 (1)編寫程序建立一個順序表,并逐個輸出順序表中所有數(shù)據(jù)元素的值。編寫主函數(shù)測試結(jié)果。 (2)編寫順序表定位操作子函數(shù),在順序表中查找是否存在數(shù)據(jù)元素x。如果存在,返回順序表中和x值相等的第1個數(shù)據(jù)元素的序號(序號從0開始編號);如果不存在,返回-1。編寫主函數(shù)測試結(jié)果。(3)在遞增有序的順序表中插入一個新結(jié)點x,保持順序表的有序性。 解題思路:首先查找插入的位置,再移位,最后進(jìn)行插入操作;從第一個元素開始找到第一個大于該新結(jié)點值x的元素位置i即為插入位置;然后將從表尾開始依次將元素后移一個位置直至元素i;最后將新結(jié)點x插入到i位置。 (4)刪除順序表中所有等于X的數(shù)據(jù)元素。 2、選做題 (5)已知兩個順序表A和B按元素值遞增有序排列,要求寫一算法實現(xiàn)將A和B歸并成一個按元素值遞減有序排列的順序表(允許表中含有值相同的元素)。 程序清單: 1、(1)#include datatype a[maxsize]; int size;}sequence_list;sequence_list mylist;void display(sequence_list slt) 金陵科技學(xué)院實驗報告 { 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(“順序表是空的請建立順序表!”);printf(“n”);printf(“請輸入順序表中的元素個數(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é)院實驗報告 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(“順序表是空的請建立順序表!”);printf(“n”);printf(“請輸入順序表中的元素個數(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é)院實驗報告 } 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é)院實驗報告 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(“順序表是空的請建立順序表!”);printf(“n”);printf(“請輸入順序表中的元素個數(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é)院實驗報告 { 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é)院實驗報告 m[n++] = slt->a[i]; } else a++; } slt->size = slt->size1, from, to, denpend_on);//先將初始塔的前n-1個盤子借助目的塔移動到借用塔上 move(n, from, to);//將剩下的一個盤子移動到目的塔上 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)實驗冊