總結是對過去一定時期的工作、學習或思想情況進行回顧、分析,并做出客觀評價的書面材料,它有助于我們尋找工作和事物發展的規律,從而掌握并運用這些規律,是時候寫一份總結了。那么我們該如何寫一篇較為完美的總結呢?這里給大家分享一些最新的總結書范文,方便大家學習。
算法與數據結構實驗總結篇一
學 生 實 驗 報 告 冊
課程名稱:
學生學號:
所屬院部:
(理工類)
算法與數據結構 專業班級: 14計單(2)
1413201007 學生姓名: 毛卓
計算機工程學院 指導教師: 章海鷗 16 ——20 17 學年 第 二 學期
金陵科技學院教務處制
實驗報告書寫要求
實驗報告原則上要求學生手寫,要求書寫工整。若因課程特點需打印的,要遵照以下字體、字號、間距等的具體要求。紙張一律采用a4的紙張。
實驗報告書寫說明
實驗報告中一至四項內容為必填項,包括實驗目的和要求;實驗儀器和設備;實驗內容與過程;實驗結果與分析。各院部可根據學科特點和實驗具體要求增加項目。
填寫注意事項
(1)細致觀察,及時、準確、如實記錄。(2)準確說明,層次清晰。
(3)盡量采用專用術語來說明事物。
(4)外文、符號、公式要準確,應使用統一規定的名詞和符號。(5)應獨立完成實驗報告的書寫,嚴禁抄襲、復印,一經發現,以零分論處。
實驗報告批改說明
實驗報告的批改要及時、認真、仔細,一律用紅色筆批改。實驗報告的批改成績采用百分制,具體評分標準由各院部自行制定。
實驗報告裝訂要求
實驗批改完畢后,任課老師將每門課程的每個實驗項目的實驗報告以自然班為單位、按學號升序排列,裝訂成冊,并附上一份該門課程的實驗大綱。
實驗項目名稱: 順序表 實驗學時: 2 同組學生姓名: 實驗地點: 實驗日期: 實驗成績: 批改教師: 批改時間:
實驗1 順序表
一、實驗目的和要求
掌握順序表的定位、插入、刪除等操作。
二、實驗儀器和設備
vc6.0
三、實驗內容與過程(含程序清單及流程圖)
1、必做題
(1)編寫程序建立一個順序表,并逐個輸出順序表中所有數據元素的值。編寫主函數測試結果。
(2)編寫順序表定位操作子函數,在順序表中查找是否存在數據元素x。如果存在,返回順序表中和x值相等的第1個數據元素的序號(序號從0開始編號);如果不存在,返回-1。編寫主函數測試結果。(3)在遞增有序的順序表中插入一個新結點x,保持順序表的有序性。
解題思路:首先查找插入的位置,再移位,最后進行插入操作;從第一個元素開始找到第一個大于該新結點值x的元素位置i即為插入位置;然后將從表尾開始依次將元素后移一個位置直至元素i;最后將新結點x插入到i位置。
(4)刪除順序表中所有等于x的數據元素。
2、選做題
(5)已知兩個順序表a和b按元素值遞增有序排列,要求寫一算法實現將a和b歸并成一個按元素值遞減有序排列的順序表(允許表中含有值相同的元素)。
程序清單:
(1):/*編寫程序建立一個順序表,并逐個輸出順序表中所有數據元素的值。*/ #include
typedef int datatype;#define maxsize 1024 typedef struct { datatype data[maxsize];int last;
}sequenlist;void main(){ sequenlist l;int i,n;printf(“請輸入元素個數:”);scanf(“%d”,&n);printf(“n請輸入元素:”);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){} int i;for(i=0;i
} int i,n,y;int x;
printf(“請輸入元素個數:”);scanf(“%d”,&n);printf(“n請輸入元素:”);for(i=0;i
printf(“n請輸入要查找的數據元素:”);scanf(“%d”,&x);y=fun(l,x,n);if(y==-1)else printf(“n數據元素 %d 所在的位置為 %d n”,x,y);printf(“n所要查找的數據元素不存在。n”);(3): /*在遞增有序的順序表中插入一個新結點x,保持順序表的有序性。
解題思路:首先查找插入的位置,再移位,最后進行插入操作;
從第一個元素開始找到第一個大于該新結點值x的元素位置i即為插入位置;
然后將從表尾開始依次將元素后移一個位置直至元素i;最后將新結點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插入元素前的數據為:”);
for(i=0;i<=;i++)
printf(“%2d”,[i]);
printf(“n請輸入要插入的元素:”);
scanf(“%d”,&x);
for(i=1;i<=;i++)
if([i-1]>x)break;
if(i>)
{
[ +1]=x;
}
else
{
for(j=;j>=i-1;j--)[j+1]=[j];[i-1]=x;
}
++;
printf(“插入元素后的數據為:n”);
for(j=0;j<=;j++)
printf(“%3d”,[j]);
printf(“n”);}(4): /*刪除順序表中所有等于x的數據元素。*/ #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原數據為:”);
for(i=0;i<=;i++)printf(“%3d”,[i]);
printf(“n請輸入要刪除的數據:”);
scanf(“%d”,&x);
for(i=1;i<=+1;i++)
if([i-1]==x){
for(j=i;j<=+1;j++)[j-1]=[j];
--;
i--;
k=1;
}
if(k==1){
printf(“刪除后的數據為:n”);
for(j=0;j<=;j++)printf(“%3d”,[j]);
}
else printf(“not found!n”);
printf(“n”);}
四、實驗結果與分析(程序運行結果及其分析)(1)結果: 請輸入元素個數:5
請輸入元素:1 2 3 4 5
元素輸出:1 2 3 4 5(2)結果: 請輸入元素個數:5
請輸入元素:1 2 3 4 5
請輸入要查找的數據元素:5
數據元素5所在的位置為 4(3)結果:插入數據前的元素為:1 3 5 6 7 9
請輸入要插入的元素為:10
插入元素后的數據為:
5 6 7 9 10(4)結果:原數據為:1 3 5 7 2 4 6 8 2 9
請輸入要刪除的數據為:7
刪除后的數據為: 3 5 2 4 6 8 2 9
五、實驗體會(遇到問題及解決辦法,編程后的心得體會)
實驗項目名稱: 單鏈表 實驗學時: 2 同組學生姓名: 實驗地點: 實驗日期: 實驗成績: 批改教師: 批改時間:
實驗2 單鏈表
一、實驗目的和要求
1、實驗目的
掌握單鏈表的定位、插入、刪除等操作。
2、實驗要求
(1)注意鏈表的空間是動態分配的,某結點不用之后要及時進行物理刪除,以便釋放其內存空間。
(2)鏈表不能實現直接定位,一定注意指針的保存,防止丟失。
二、實驗儀器和設備
visual c++6.0
三、實驗內容與過程(含程序清單及流程圖)
1、必做題
(1)編寫程序建立一個單鏈表,并逐個輸出單鏈表中所有數據元素。(2)在遞增有序的單鏈表中插入一個新結點x,保持單鏈表的有序性。
解題思路:首先查找插入的位置然后進行插入操作;從第一個結點開始找到第一個大于該新結點值的結點即為插入位置;然后在找到的此結點之前插入新結點;注意保留插入位置之前結點的指針才能完成插入操作。
(3)編寫實現帶頭結點單鏈表就地逆置的子函數,并編寫主函數測試結果。
2、選做題
已知指針la和lb分別指向兩個無頭結點單鏈表的首元結點。要求編一算法實現,從表la中刪除自第i個元素起共len個元素后,將它們插入到表lb中第j個元素之前。程序清單:
四、實驗結果與分析(程序運行結果及其分析)
五、實驗體會(遇到問題及解決辦法,編程后的心得體會)
實驗項目名稱: 堆棧和隊列 實驗學時: 2 同組學生姓名: 實驗地點: 實驗日期: 實驗成績: 批改教師: 批改時間:
實驗3 堆棧和隊列
一、實驗目的和要求
(1)掌握應用棧解決問題的方法。(2)掌握利用棧進行表達式求和的算法。
(3)掌握隊列的存儲結構及基本操作實現,并能在相應的應用問題中正確選用它們。
二、實驗儀器和設備
visual c++6.0
三、實驗內容與過程(含程序清單及流程圖)
1、必做題
(1)判斷一個算術表達式中開括號和閉括號是否配對。(2)測試“漢諾塔”問題。
(3)假設稱正讀和反讀都相同的字符序列為”回文”,試寫一個算法判別讀入的一個以’@’為結束符的字符序列是否是“回文”。
2、選做題
在順序存儲結構上實現輸出受限的雙端循環隊列的入列和出列算法。設每個元素表示一個待處理的作業,元素值表示作業的預計時間。入隊列采取簡化的短作業優先原則,若一個新提交的作業的預計執行時間小于隊頭和隊尾作業的平均時間,則插入在隊頭,否則插入在隊尾。程序清單:
四、實驗結果與分析(程序運行結果及其分析)
五、實驗體會(遇到問題及解決辦法,編程后的心得體會)
實驗項目名稱: 串 實驗學時: 2 同組學生姓名: 實驗地點: 實驗日期: 實驗成績: 批改教師: 批改時間:
實驗4 串
一、實驗目的和要求
掌握串的存儲及應用。
二、實驗儀器和設備
visual c++6.0
三、實驗內容與過程(含程序清單及流程圖)
1、必做題
(1)編寫輸出字符串s中值等于字符ch的第一個字符的函數,并用主函數測試結果。
(2)編寫輸出字符串s中值等于字符ch的所有字符的函數,并用主函數測試結果。
解題思路:可以將第一題程序改進成一個子函數,在本題中循環調用。(3)設字符串采用單字符的鏈式存儲結構,編程刪除串s從位置i開始長度為k的子串。
2、選做題
假設以鏈結構表示串,編寫算法實現將串s插入到串t中某個字符之后,若串t中不存在這個字符,則將串s聯接在串t的末尾。
提示:為提高程序的通用性,插入位置字符應設計為從鍵盤輸入。程序清單:
四、實驗結果與分析(程序運行結果及其分析)
五、實驗體會(遇到問題及解決辦法,編程后的心得體會)
實驗項目名稱: 二叉樹 實驗學時: 2 同組學生姓名: 實驗地點: 實驗日期: 實驗成績: 批改教師: 批改時間:
實驗5 二叉樹
一、實驗目的和要求
(1)掌握二叉樹的生成,以及前、中、后序遍歷算法。(2)掌握應用二叉樹遞歸遍歷思想解決問題的方法。
二、實驗儀器和設備
visual c++6.0
三、實驗內容與過程(含程序清單及流程圖)
1、必做題
(1)建立一棵二叉樹。對此樹進行前序遍歷、中序遍歷及后序遍歷,輸出遍歷序列。
(2)在第一題基礎上,求二叉樹中葉結點的個數。(3)在第一題基礎上,求二叉樹中結點總數。(4)在第一題基礎上,求二叉樹的深度。
2、選做題
已知一棵完全二叉樹存于順序表sa中,[1…]存儲結點的值。試編寫算法由此順序存儲結構建立該二叉樹的二叉鏈表。
解題思路:根據完全二叉樹順序存儲的性質來確定二叉樹的父子關系即“還原”了二叉樹,之后再按照二叉樹二叉鏈表的構造方法進行建立。完全二叉樹順序存儲的一個重要性質為,第i個結點的左孩子是編號為2i的結點,第i個結點的右孩子是編號為2i+1的結點。程序清單:
四、實驗結果與分析(程序運行結果及其分析)
五、實驗體會(遇到問題及解決辦法,編程后的心得體會)
實驗項目名稱: 圖 實驗學時: 2 同組學生姓名: 實驗地點: 實驗日期: 實驗成績: 批改教師: 批改時間:
實驗6 圖
一、實驗目的和要求
(1)熟練掌握圖的基本概念、構造及其存儲結構。
(2)熟練掌握對圖的深度優先搜索遍歷和廣度優先搜索遍歷的算法。
二、實驗儀器和設備
visual c++6.0
三、實驗內容與過程(含程序清單及流程圖)
1、必做題
(1)構造一個無向圖(用鄰接矩陣表示存儲結構)。
(2)對上面所構造的無向圖,進行深度優先遍歷和廣度優先遍歷,輸出遍歷序列。
2、選做題
采用鄰接表存儲結構,編寫一個判別無向圖中任意給定的兩個頂點之間是否存在一條長度為k的簡單路徑的算法。簡單路徑是指其頂點序列中不含有重復頂點的路徑。提示:兩個頂點及k值均作為參數給出。程序清單:
四、實驗結果與分析(程序運行結果及其分析)
五、實驗體會(遇到問題及解決辦法,編程后的心得體會)
實驗項目名稱: 排序 實驗學時: 2 同組學生姓名: 實驗地點: 實驗日期: 實驗成績: 批改教師: 批改時間:
實驗7 排序
一、實驗目的和要求
(1)熟練掌握希爾排序、堆排序、直接插入排序、起泡排序、快速排序、直接選擇排序、歸并排序和基數排序的基本概念。
(2)掌握以上各種排序的算法。區分以上不同排序的優、缺點。
二、實驗儀器和設備
visual c++6.0
三、實驗內容與過程(含程序清單及流程圖)
1、必做題
用隨機數產生100000個待排序數據元素的關鍵字值。測試下列各排序函數的機器實際執行時間(至少測試兩個):直接插入排序、希爾排序(增量為4,2,1)、冒泡排序、快速排序、直接選擇排序、二路歸并排序、堆排序和基于鏈式隊列的基數排序。
2、選做題
假設含n個記錄的序列中,其所有關鍵字為值介于v和w之間的整數,且其中很多關鍵字的值是相同的。則可按如下方法排序:另設數組number[v…w],令number[i]統計關鍵字為整數i的紀錄個數,然后按number重排序列以達到有序。試編寫算法實現上述排序方法,并討論此種方法的優缺點。程序清單:
四、實驗結果與分析(程序運行結果及其分析)
五、實驗體會(遇到問題及解決辦法,編程后的心得體會)
實驗項目名稱: 查找 實驗學時: 2 同組學生姓名: 實驗地點: 實驗日期: 實驗成績: 批改教師: 批改時間:
實驗8 查找
一、實驗目的和要求
(1)掌握順序表查找、有序表查找、索引順序表查找的各種算法。(2)掌握哈希表設計。
二、實驗儀器和設備
visual c++6.0
三、實驗內容與過程(含程序清單及流程圖)
1、必做題
(1)在一個遞增有序的線性表中利用二分查找法查找數據元素x。
2、選做題
(2)構造一個哈希表,哈希函數采用除留余數法,哈希沖突解決方法采用鏈地址法。設計一個測試程序進行測試。
提示:構造哈希表只是完成查找的第一步,大家應該掌握在哈希表上進行查找的過程,可以試著編程序實現。程序清單:
四、實驗結果與分析(程序運行結果及其分析)
五、實驗體會(遇到問題及解決辦法,編程后的心得體會)
算法與數據結構實驗總結篇二
金陵科技學院實驗報告
學 生 實 驗 報 告 冊
課程名稱:
學生學號:
所屬院部:
(理工類)
算法與數據結構 專業班級: 13網絡工程
1305106009 學生姓名: 陳韜
網絡與通信工程學院 指導教師: 沈奇 14 ——20 15 學年 第 1 學期
金陵科技學院教務處制
金陵科技學院實驗報告
實驗報告書寫要求
實驗報告原則上要求學生手寫,要求書寫工整。若因課程特點需打印的,要遵照以下字體、字號、間距等的具體要求。紙張一律采用a4的紙張。
實驗報告書寫說明
實驗報告中一至四項內容為必填項,包括實驗目的和要求;實驗儀器和設備;實驗內容與過程;實驗結果與分析。各院部可根據學科特點和實驗具體要求增加項目。
填寫注意事項
(1)細致觀察,及時、準確、如實記錄。(2)準確說明,層次清晰。
(3)盡量采用專用術語來說明事物。
(4)外文、符號、公式要準確,應使用統一規定的名詞和符號。(5)應獨立完成實驗報告的書寫,嚴禁抄襲、復印,一經發現,以零分論處。
實驗報告批改說明
實驗報告的批改要及時、認真、仔細,一律用紅色筆批改。實驗報告的批改成績采用百分制,具體評分標準由各院部自行制定。
實驗報告裝訂要求
實驗批改完畢后,任課老師將每門課程的每個實驗項目的實驗報告以自然班為單位、按學號升序排列,裝訂成冊,并附上一份該門課程的實驗大綱。
金陵科技學院實驗報告
實驗項目名稱: 順序表 實驗學時: 2 同組學生姓名: 實驗地點: 實驗日期: 實驗成績: 批改教師: 批改時間:
金陵科技學院實驗報告
實驗1 順序表
一、實驗目的和要求
掌握順序表的定位、插入、刪除等操作。
二、實驗儀器和設備
turbo c 2.0/ visual c++
三、實驗內容與過程(含程序清單及流程圖)
1、必做題
(1)編寫程序建立一個順序表,并逐個輸出順序表中所有數據元素的值。編寫主函數測試結果。
(2)編寫順序表定位操作子函數,在順序表中查找是否存在數據元素x。如果存在,返回順序表中和x值相等的第1個數據元素的序號(序號從0開始編號);如果不存在,返回-1。編寫主函數測試結果。(3)在遞增有序的順序表中插入一個新結點x,保持順序表的有序性。
解題思路:首先查找插入的位置,再移位,最后進行插入操作;從第一個元素開始找到第一個大于該新結點值x的元素位置i即為插入位置;然后將從表尾開始依次將元素后移一個位置直至元素i;最后將新結點x插入到i位置。
(4)刪除順序表中所有等于x的數據元素。
2、選做題
(5)已知兩個順序表a和b按元素值遞增有序排列,要求寫一算法實現將a和b歸并成一個按元素值遞減有序排列的順序表(允許表中含有值相同的元素)。
程序清單:
#include
#include
#define maxsize 100 typedef struct { int data[maxsize];int last;
金陵科技學院實驗報告} sequenlist;sequenlist l={{1,3,5,5,7,8,10,12,17},8};void print_list(){ int i;for(i=0;i<=;i++)printf(“%4d”,[i]);} void find_all_x(int x){ int found=0,i;for(i=0;i<=;i++)if([i]==x){ printf(“%3d”,i+1);found=1;} if(found==0)printf(“-1n”);} void insert_x(int x){ int loc,i;for(i=0;i<=;i++)if(x
金陵科技學院實驗報告
loc=i;for(i=;i>=loc;i--)[i+1]=[i];[loc]=x;++;} void delete_x(int x){ int i,j,found=0;for(i=0;i<=;i++)if(x==[i]){ found=1;for(j=i+1;j<=;j++)[j-1]=[j];i--;--;} if(found==0)printf(“x is not foundn”);else { printf(“x is deletedn”);printf(“the list after deletion is:n”);print_list();
金陵科技學院實驗報告
} }
void main(){ int x,choice;while(1){ printf(“**********menu**********n”);printf(“ 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”);
金陵科技學院實驗報告
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);} } }
金陵科技學院實驗報告
金陵科技學院實驗報告
四、實驗結果與分析(程序運行結果及其分析)
五、實驗體會(遇到問題及解決辦法,編程后的心得體會)
金陵科技學院實驗報告
實驗項目名稱: 單鏈表 實驗學時: 2 同組學生姓名: 實驗地點: 實驗日期: 實驗成績: 批改教師: 批改時間:
金陵科技學院實驗報告
實驗2 單鏈表
一、實驗目的和要求
1、實驗目的
掌握單鏈表的定位、插入、刪除等操作。
2、實驗要求
(1)注意鏈表的空間是動態分配的,某結點不用之后要及時進行物理刪除,以便釋放其內存空間。
(2)鏈表不能實現直接定位,一定注意指針的保存,防止丟失。
二、實驗儀器和設備
turbo c 2.0/ visual c++
三、實驗內容與過程(含程序清單及流程圖)
1、必做題
(1)編寫程序建立一個單鏈表,并逐個輸出單鏈表中所有數據元素。(2)在遞增有序的單鏈表中插入一個新結點x,保持單鏈表的有序性。
解題思路:首先查找插入的位置然后進行插入操作;從第一個結點開始找到第一個大于該新結點值的結點即為插入位置;然后在找到的此結點之前插入新結點;注意保留插入位置之前結點的指針才能完成插入操作。
(3)編寫實現帶頭結點單鏈表就地逆置的子函數,并編寫主函數測試結果。
2、選做題
已知指針la和lb分別指向兩個無頭結點單鏈表的首元結點。要求編一算法實現,從表la中刪除自第i個元素起共len個元素后,將它們插入到表lb中第j個元素之前。程序清單:
金陵科技學院實驗報告
金陵科技學院實驗報告
四、實驗結果與分析(程序運行結果及其分析)
五、實驗體會(遇到問題及解決辦法,編程后的心得體會)
金陵科技學院實驗報告
實驗項目名稱: 堆棧和隊列 實驗學時: 2 同組學生姓名: 實驗地點: 實驗日期: 實驗成績: 批改教師: 批改時間:
金陵科技學院實驗報告
實驗3 堆棧和隊列
一、實驗目的和要求
(1)掌握應用棧解決問題的方法。(2)掌握利用棧進行表達式求和的算法。
(3)掌握隊列的存儲結構及基本操作實現,并能在相應的應用問題中正確選用它們。
二、實驗儀器和設備
turbo c 2.0/ visual c++
三、實驗內容與過程(含程序清單及流程圖)
1、必做題
(1)判斷一個算術表達式中開括號和閉括號是否配對。(2)測試“漢諾塔”問題。
(3)假設稱正讀和反讀都相同的字符序列為”回文”,試寫一個算法判別讀入的一個以’@’為結束符的字符序列是否是“回文”。
2、選做題
在順序存儲結構上實現輸出受限的雙端循環隊列的入列和出列算法。設每個元素表示一個待處理的作業,元素值表示作業的預計時間。入隊列采取簡化的短作業優先原則,若一個新提交的作業的預計執行時間小于隊頭和隊尾作業的平均時間,則插入在隊頭,否則插入在隊尾。程序清單:
金陵科技學院實驗報告
四、實驗結果與分析(程序運行結果及其分析)
金陵科技學院實驗報告
五、實驗體會(遇到問題及解決辦法,編程后的心得體會)
金陵科技學院實驗報告
實驗項目名稱: 串 實驗學時: 2 同組學生姓名: 實驗地點: 實驗日期: 實驗成績: 批改教師: 批改時間:
金陵科技學院實驗報告
實驗4 串
一、實驗目的和要求
掌握串的存儲及應用。
二、實驗儀器和設備
turbo c 2.0/ visual c++
三、實驗內容與過程(含程序清單及流程圖)
1、必做題
(1)編寫輸出字符串s中值等于字符ch的第一個字符的函數,并用主函數測試結果。
(2)編寫輸出字符串s中值等于字符ch的所有字符的函數,并用主函數測試結果。
解題思路:可以將第一題程序改進成一個子函數,在本題中循環調用。(3)設字符串采用單字符的鏈式存儲結構,編程刪除串s從位置i開始長度為k的子串。
2、選做題
假設以鏈結構表示串,編寫算法實現將串s插入到串t中某個字符之后,若串t中不存在這個字符,則將串s聯接在串t的末尾。
提示:為提高程序的通用性,插入位置字符應設計為從鍵盤輸入。程序清單:
金陵科技學院實驗報告
四、實驗結果與分析(程序運行結果及其分析)
金陵科技學院實驗報告
五、實驗體會(遇到問題及解決辦法,編程后的心得體會)
金陵科技學院實驗報告
實驗項目名稱: 二叉樹 實驗學時: 2 同組學生姓名: 實驗地點: 實驗日期: 實驗成績: 批改教師: 批改時間:
金陵科技學院實驗報告
實驗5 二叉樹
一、實驗目的和要求
(1)掌握二叉樹的生成,以及前、中、后序遍歷算法。(2)掌握應用二叉樹遞歸遍歷思想解決問題的方法。
二、實驗儀器和設備
turbo c 2.0/ visual c++
三、實驗內容與過程(含程序清單及流程圖)
1、必做題
(1)建立一棵二叉樹。對此樹進行前序遍歷、中序遍歷及后序遍歷,輸出遍歷序列。
(2)在第一題基礎上,求二叉樹中葉結點的個數。(3)在第一題基礎上,求二叉樹中結點總數。(4)在第一題基礎上,求二叉樹的深度。
2、選做題
已知一棵完全二叉樹存于順序表sa中,[1…]存儲結點的值。試編寫算法由此順序存儲結構建立該二叉樹的二叉鏈表。
解題思路:根據完全二叉樹順序存儲的性質來確定二叉樹的父子關系即“還原”了二叉樹,之后再按照二叉樹二叉鏈表的構造方法進行建立。完全二叉樹順序存儲的一個重要性質為,第i個結點的左孩子是編號為2i的結點,第i個結點的右孩子是編號為2i+1的結點。程序清單:
金陵科技學院實驗報告
四、實驗結果與分析(程序運行結果及其分析)
金陵科技學院實驗報告
五、實驗體會(遇到問題及解決辦法,編程后的心得體會)
金陵科技學院實驗報告
實驗項目名稱: 圖 實驗學時: 2 同組學生姓名: 實驗地點: 實驗日期: 實驗成績: 批改教師: 批改時間:
金陵科技學院實驗報告
實驗6 圖
一、實驗目的和要求
(1)熟練掌握圖的基本概念、構造及其存儲結構。
(2)熟練掌握對圖的深度優先搜索遍歷和廣度優先搜索遍歷的算法。
二、實驗儀器和設備
turbo c 2.0/ visual c++
三、實驗內容與過程(含程序清單及流程圖)
1、必做題
(1)構造一個無向圖(用鄰接矩陣表示存儲結構)。
(2)對上面所構造的無向圖,進行深度優先遍歷和廣度優先遍歷,輸出遍歷序列。
2、選做題
采用鄰接表存儲結構,編寫一個判別無向圖中任意給定的兩個頂點之間是否存在一條長度為k的簡單路徑的算法。簡單路徑是指其頂點序列中不含有重復頂點的路徑。提示:兩個頂點及k值均作為參數給出。程序清單:
金陵科技學院實驗報告
四、實驗結果與分析(程序運行結果及其分析)
五、實驗體會(遇到問題及解決辦法,編程后的心得體會)
金陵科技學院實驗報告
實驗項目名稱: 排序 實驗學時: 2 同組學生姓名: 實驗地點: 實驗日期: 實驗成績: 批改教師: 批改時間:
金陵科技學院實驗報告
實驗7 排序
一、實驗目的和要求
(1)熟練掌握希爾排序、堆排序、直接插入排序、起泡排序、快速排序、直接選擇排序、歸并排序和基數排序的基本概念。
(2)掌握以上各種排序的算法。區分以上不同排序的優、缺點。
二、實驗儀器和設備
turbo c 2.0/ visual c++
三、實驗內容與過程(含程序清單及流程圖)
1、必做題
用隨機數產生100000個待排序數據元素的關鍵字值。測試下列各排序函數的機器實際執行時間(至少測試兩個):直接插入排序、希爾排序(增量為4,2,1)、冒泡排序、快速排序、直接選擇排序、堆排序。
2、選做題
假設含n個記錄的序列中,其所有關鍵字為值介于v和w之間的整數,且其中很多關鍵字的值是相同的。則可按如下方法排序:另設數組number[v…w],令number[i]統計關鍵字為整數i的紀錄個數,然后按number重排序列以達到有序。試編寫算法實現上述排序方法,并討論此種方法的優缺點。程序清單:
金陵科技學院實驗報告
四、實驗結果與分析(程序運行結果及其分析)
金陵科技學院實驗報告
五、實驗體會(遇到問題及解決辦法,編程后的心得體會)
金陵科技學院實驗報告
實驗項目名稱: 查找 實驗學時: 2 同組學生姓名: 實驗地點: 實驗日期: 實驗成績: 批改教師: 批改時間:
金陵科技學院實驗報告
實驗8 查找
一、實驗目的和要求
(1)掌握順序表查找、有序表查找、索引順序表查找的各種算法。(2)掌握哈希表設計。
二、實驗儀器和設備
turbo c 2.0/ visual c++
三、實驗內容與過程(含程序清單及流程圖)
1、必做題
(1)在一個遞增有序的線性表中利用二分查找法查找數據元素x。
2、選做題
(2)構造一個哈希表,哈希函數采用除留余數法,哈希沖突解決方法采用鏈地址法。設計一個測試程序進行測試。
提示:構造哈希表只是完成查找的第一步,大家應該掌握在哈希表上進行查找的過程,可以試著編程序實現。程序清單:
金陵科技學院實驗報告
四、實驗結果與分析(程序運行結果及其分析)
五、實驗體會(遇到問題及解決辦法,編程后的心得體會)
算法與數據結構實驗總結篇三
北 京 郵 電 大 學
計 算 機 科 學 與 技 術 學 院
算 法 與 數 據 結 構
實 驗 指 導 書
楊俊、徐塞虹、漆濤 編著
2006年9月 算法與數據結構 實驗指導書
目錄
實驗要求....................................................................................................................................3 試驗
一、約瑟夫環..............................................................................…………………..……4 試驗
二、長整數四則運算運算………………………………………………………………4 實驗三、八皇后.....................................……..........................................................................5 實驗
四、騎士遍歷......................................……………………..............................................5 實驗
五、桌面計算器...............................……………..............................................................6 實驗
六、平衡排序二叉樹....................…...…….....................................................................6 試驗
七、多重集合的實現……......................................………………………………………7 試驗
八、圖論………………………………………………………………………….……..8 實驗
八、內部排序性能的比較..........………………….............................................................8 教材及主要參考文獻………………………………………………………………………………..9 2 北京郵電大學 計算機科學與技術學院 算法與數據結構 實驗指導書
實驗要求
一、本課程在講課期間需要做上機實驗,目的之一是檢查學生對所學算法的掌握和理解程度;其次是鍛煉學生的團隊合作精神。
二、成績:
1、編碼:占整個實驗成績的50%;
2、測試:占整個實驗成績的20%;
3、文檔:占整個實驗成績的30%。
三、按時提交上機文檔,實驗文檔包含以下各項:
1、問題描述:實驗題目、內容和要求;
2、算法思路:實驗小組對問題的解決方法的文字描述;
3、算法描述:用類算法語言等對算法進行描述;
4、源程序及驅動程序:上機實驗編制的代碼源程序及程序運行環境;
5、測試數據:對算法的測試用例;
6、結果分析和結論:對算法及測試結果的分析及結論;
7、心得體會:通過實驗獲得的心得體會;
8、分工及簽名:最后是小組成員的分工及簽名。
北京郵電大學 計算機科學與技術學院-1-算法與數據結構 實驗指導書
實驗
一、約瑟夫環
一、實驗類別:設計型實驗。
二、問題描述:約瑟夫環問題是:n個人p0,p1,…pn 圍坐成一個圓環。每個人pk持有一個秘密的數字ck。0 < ck <= m。開始時隨機選取一個數 c = c0。每個人從p0 開始從1開始報數。報到數c 的人出對。然后以出隊的人的秘密數字作為新的c 值。從出隊者的下一個人順時針從1 開始再報數。直到所有的人全部出隊。
三、實驗目的:檢查學生對各種線性表的實現的掌握程度。
四、實驗學時:2小時
五、實驗組人數:1人。
六、實驗設備環境:計算機。
七、實驗原理及要點(知識點):各種隊列的實現。
八、實驗內容和要求:至少用3種以上的線性表來完成此試驗。可以在帶頭節點的和不帶頭節點的線性表、循環的和非循環線性表、動態鏈表和靜態鏈表以及向量(數組)之間選擇三種。從空表開始,為每個人生成一個隨機數。然后將此人加入到線性表之中。
九、可研究與探索的問題:給出各種實現的優缺點比較。
十、驗收及實驗報告要求:現場操作及運行效果驗收。要求程序必須上機編譯通過并且正確運行。給出試驗報告。給出各種線性表實現的優缺點分析。
實驗
二、長整數四則運算
一、實驗類別:驗證實驗。
二、問題描述:計算機cpu本身可以做32位或者64位的整數四則運算。本試驗要求對任意大小的整數實現其四則運算。將一個整數n表示為
n = ±(d0 + d1*b + d2*b2 + ….+ bk*bk)
其中 1< b <= 256 為一個取定的整數。0 <= dk < b。用線性表存儲{bk}。給出整數的四則運算程序。
三、實驗目的:對具體的問題選擇適當的線性表實現。
四、實驗學時:2小時
五、實驗組人數:3人。
六、實驗設備環境:計算機。
七、實驗原理及要點(知識點):各種隊列的實現。
八、實驗內容和要求:至少用2種以上的線性表來完成此試驗。比較不同線性表實現的速度。
九、可研究與探索的問題:1)對具體問題選擇合適的線性表實現。2)b 的選取問題。可 否選擇更大的基b。b的選擇所應考慮的因素。
十、驗收及實驗報告要求:現場操作及運行效果驗收。要求程序必須上機編譯通過并且正確運行。給出試驗報告。能夠得出用向量(數組)實現的線性表速度最快。
實驗三、八皇后問題
一、實驗類別:設計型實驗。
二、問題描述:在n*n 的國際象棋棋盤上放置n個皇后,使每個皇后不受其他皇后的攻擊。
三、實驗目的:檢查學生對堆棧和遞歸程序掌握程度。
四、實驗學時:2小時
五、實驗組人數:1人。
六、實驗設備環境:計算機。
七、實驗原理及要點(知識點):遞歸程序與堆棧
八、實驗內容和要求: 分別用遞歸和堆棧完成此試驗。統計程序運行時間與問題規模n 的關系。
九、可研究與探索的問題:問題的復雜度。當n 比較大時,討論提高程序運行的方法。
十、驗收及實驗報告要求:現場操作及運行效果驗收。要求程序必須上機編譯通過并且正確運行。給出試驗報告。找出程序運行速度的瓶頸。
實驗
四、騎士遍歷
一、實驗類別:設計型實驗。
二、問題描述:在國際象棋n*n的棋盤中,一匹馬從棋盤中任意一格出發,要求用n2-1步走完所有的n2個格子。每個格子走且只走過一次。應如何走? 試給出算法實現。
三、實驗目的:檢查學生對堆棧與回溯算法的掌握。
四、實驗學時:2小時
五、實驗組人數:3人。
六、實驗設備環境:計算機。
七、實驗原理及要點(知識點):堆棧與回溯
八、實驗內容和要求:用堆棧完成此試驗。統計程序運行時間與問題規模n 的關系。
九、可研究與探索的問題:怎樣枚舉所有馬下一步可走的位置。選擇下一步所走位置的策略。注意由于這個程序非常耗時,在初期程序調試時應取較小的n。
十、驗收及實驗報告要求:現場操作及運行效果驗收。要求程序必須上機編譯通過并且正確運行。給出試驗報告。找出程序運行速度的瓶頸。給出不同選擇策略的程序運行 速度的比較結果。
實驗
五、桌面計算器(表達式求值)
一、實驗類別:設計型實驗。
二、問題描述:模仿unix系統下的dc命令。輸入表達式字符串,按回車鍵后給出表達式的值。操作數為實數。
1)操作符有 “+”、“-”、“*”、“/”、“^”(乘方)
2)還可以有臨時變量。用法如 pi = 3.1415926,r = 3, r*pi^2 3)還可以有事先定義的函數如:“sin()”(正弦)、“cos()”(余弦)、“log()”(對數)、“ln()”(自然對數)等函數。
三、實驗目的:檢查學生用堆棧解決實際問題。為本課程后續的內容提供伏筆。也為后繼的課程如編譯原理預習。
四、實驗學時:2小時
五、實驗組人數:3人。
六、實驗設備環境:計算機。
七、實驗原理及要點(知識點):堆棧,線性表,命令行參數的處理。
八、實驗內容和要求:學生應至少應實現處理五個運算符:“+”、“-”、“*”、“/”、“^”(乘方)。可以用一個線性表來存儲臨時變量。另一個線性表來存儲預定義的函數名。
九、可研究與探索的問題:查找臨時變量名的不同方法。如哈希表,二叉樹。
十、驗收及實驗報告要求:現場操作及運行效果驗收。要求程序必須上機編譯通過并且正確運行。給出試驗報告。
實驗
六、平衡排序二叉樹
一、實驗類別:設計型實驗。
二、問題描述:隨機生成一組整數p0,p1,…pn-1。將這組整數按生成的次序插入到一個平衡排序二叉樹中。然后將p0,p1,…pn-1隨機重新排列為q0,q1,…qn-1。再按照次次序將這些整數從生成的平衡排序二叉樹刪除。
三、實驗目的:平衡排序二叉樹的插入和刪除。
四、實驗學時:2小時
五、實驗組人數:3人。
六、實驗設備環境:計算機。
七、實驗原理及要點(知識點):平衡排序二叉樹的插入和刪除中的旋轉。
八、實驗內容和要求:統計在平衡排序二叉樹的插入和刪除過程中各種旋轉的出現次數。
九、可研究與探索的問題:研究平衡排序二叉樹與一般的排序二叉樹在插入和刪除方面的性能比較。
十、驗收及實驗報告要求:現場操作及運行效果驗收。要求程序必須上機編譯通過并且正確運行。給出試驗報告。給出在均勻的隨機分布下,平衡排序二叉樹與一般排序二叉樹的性能比較。
實驗
七、多重集合的實現
一、實驗類別:設計型實驗。
二、問題描述:實現數學上多重集合。所謂的多重集合類似于集合,但是一件東西可以放置多個副本。就如一個菜籃子里面可以放兩個蘋果。
三、實驗目的:查找結構的各種實現。
四、實驗學時:2小時
五、實驗組人數:3人。
六、實驗設備環境:計算機。
七、實驗原理及要點(知識點):平衡排序二叉樹的插入和刪除、遍歷,查找。哈希查找結構。
八、實驗內容和要求: 假設集合中包含的元素是可以排序的。將多重集合封裝成一個類。具體的實現可以是中序線索化的平衡排序二叉樹,或者帶父節點指針的平衡排序二叉樹。多重集合的界面如下:
template
//假設類型 t 是可以排序的 class multi_set
{multi_set(void);//構造函數,初始化為空集合~multi_set(void);//析構函數
multi_set& operator=(multi_set const a);//重載運算符=
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);//自身減去一個元素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_setmulti_set
::operator-(multi_set const& a,t const& v);
九、可研究與探索的問題:哈希函數的選取。比較哈希與平衡排序二叉樹的優缺點、性能和速度。十、驗收及實驗報告要求:現場操作及運行效果驗收。要求程序必須上機編譯通過并且正確運行。給出試驗報告。給出平衡排序二叉樹實現的多重集合和用哈希實現的多重集合的性能比較。
實驗
八、圖論
一、實驗類別:設計型實驗。
二、問題描述:實現圖論中的各種算法。
1)最小代價生成樹的krscal 算法和prim算法。2)單源點的最短路徑的dijstra 算法。3)深度優先遍歷與廣度優先遍歷。4)拓撲排序
5)求所有節點之間的最短路徑floyd算法
(在這五個小題中只要選作一個即可。)
三、實驗目的:學習根據不同的運算來選取不同的存儲結構。
四、實驗學時:2小時
五、實驗組人數:3人。
六、實驗設備環境:計算機。
七、實驗原理及要點(知識點):圖論中的各種算法及其復雜度。根據不同的操作來決定圖的存儲結構。
八、實驗內容和要求:至少實現上面五個小題目中的一個。從文件中讀入一個圖的信息。
九、可研究與探索的問題:高級數據結構如堆、并查集在圖論算法中的應用。
十、驗收及實驗報告要求:現場操作及運行效果驗收。要求程序必須上機編譯通過并且正確運行。給出試驗報告。給出在均勻的隨機分布下,平衡排序二叉樹與一般排序二叉樹的性能比較。
實驗
九、內部排序性能的比較
一、實驗類別:設計型實驗。
二、問題描述:隨機生成一組整數p0,p1,…pn-1。對這組數據進行排序。
三、實驗目的:比較不同排序算法的性能。
四、實驗學時:2小時
五、實驗組人數:3人。
六、實驗設備環境:計算機。
七、實驗原理及要點(知識點):各種內部排序算法。
八、實驗內容和要求: 1)實現插入排序,選擇排序,希爾排序,堆排序以及快速排序。2)快速排序的多種版本。3)對單鏈表實現歸并排序。4)基數排序。
5)對小型問題(n = 10)、中型問題(n = 1000)以及大型問題(n = 1百萬)分別統計不同排序算法的鍵值比較次數、鍵值移動次數以及程序運行時間。
26)排序算法的時間復雜度可以有o(n)和 o(n log n)。對相同復雜度的算法,給出他們運行時間與時間復雜度的比值。
九、可研究與探索的問題:研究快速排序算法的不同改進方法。自省排序算法。只需要移動而不需要交換的快速排序方法。
十、驗收及實驗報告要求:現場操作及運行效果驗收。要求程序必須上機編譯通過并且正確運行。給出試驗報告。給出在均勻的隨機分布下,對大中小問題的最快的排序算法。
教材及主要參考文獻
[1] 嚴蔚敏、吳偉民,數據結構習題集,清華大學出版社,1999年
[2] john d, data structures with c++, china machine press, 2002.[3] mark allen weiss, data structures and problem solving using c++, 2ed, 清華大學出版社。2004年。[4] robert sedgewick,algorithms in c part 1 – 4: fundamentals, data structures, sorting, rdsearching, 3, 中國電力出版社,2003年。
[5] 嚴蔚敏、吳偉民,數據結構(c語言版),清華大學出版社,2006年
算法與數據結構實驗總結篇四
金陵科技學院實驗報告
學 生 實 驗 報 告 冊
課程名稱:
學生學號:
所屬院部:
(理工類)
算法與數據結構 專業班級:
學生姓名:
指導教師: 14 ——20 15 學年 第 二 學期
金陵科技學院教務處制
金陵科技學院實驗報告
實驗報告書寫要求
實驗報告原則上要求學生手寫,要求書寫工整。若因課程特點需打印的,要遵照以下字體、字號、間距等的具體要求。紙張一律采用a4的紙張。
實驗報告書寫說明
實驗報告中一至四項內容為必填項,包括實驗目的和要求;實驗儀器和設備;實驗內容與過程;實驗結果與分析。各院部可根據學科特點和實驗具體要求增加項目。
填寫注意事項
(1)細致觀察,及時、準確、如實記錄。(2)準確說明,層次清晰。
(3)盡量采用專用術語來說明事物。
(4)外文、符號、公式要準確,應使用統一規定的名詞和符號。(5)應獨立完成實驗報告的書寫,嚴禁抄襲、復印,一經發現,以零分論處。
實驗報告批改說明
實驗報告的批改要及時、認真、仔細,一律用紅色筆批改。實驗報告的批改成績采用百分制,具體評分標準由各院部自行制定。
實驗報告裝訂要求
實驗批改完畢后,任課老師將每門課程的每個實驗項目的實驗報告以自然班為單位、按學號升序排列,裝訂成冊,并附上一份該門課程的實驗大綱。
金陵科技學院實驗報告
實驗項目名稱: 順序表 實驗學時: 2 同組學生姓名: 實驗地點: 實驗日期: 實驗成績: 批改教師: 批改時間:
金陵科技學院實驗報告
實驗1 順序表
一、實驗目的和要求
掌握順序表的定位、插入、刪除等操作。
二、實驗儀器和設備
turbo c 2.0
三、實驗內容與過程(含程序清單及流程圖)
1、必做題
(1)編寫程序建立一個順序表,并逐個輸出順序表中所有數據元素的值。編寫主函數測試結果。
(2)編寫順序表定位操作子函數,在順序表中查找是否存在數據元素x。如果存在,返回順序表中和x值相等的第1個數據元素的序號(序號從0開始編號);如果不存在,返回-1。編寫主函數測試結果。(3)在遞增有序的順序表中插入一個新結點x,保持順序表的有序性。
解題思路:首先查找插入的位置,再移位,最后進行插入操作;從第一個元素開始找到第一個大于該新結點值x的元素位置i即為插入位置;然后將從表尾開始依次將元素后移一個位置直至元素i;最后將新結點x插入到i位置。
(4)刪除順序表中所有等于x的數據元素。
2、選做題
(5)已知兩個順序表a和b按元素值遞增有序排列,要求寫一算法實現將a和b歸并成一個按元素值遞減有序排列的順序表(允許表中含有值相同的元素)。
程序清單:
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)
金陵科技學院實驗報告
{
int i;
if(==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(“請輸入順序表中的元素個數!n”);scanf(“%d”,&number);=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”);
金陵科技學院實驗報告
if(==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
size;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(“請輸入順序表中的元素個數!n”);scanf(“%d”,&number);=number;for(i=0;i
scanf(“%d”,&mylist.a[i]);} display(mylist);printf(“n”);printf(“輸入要查找的數:”);scanf(“%d”,&a);b=find(&mylist,a);
金陵科技學院實驗報告
} if(b!=-1){ printf(“順序表的下標為:%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(==0)printf(“n 順表表是空的”);else for(i=0;i
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 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(“請輸入順序表中的元素個數!n”);scanf(“%d”,&number);=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金陵科技學院實驗報告
{ datatype a[maxsize];int size;}sequence_list;sequence_list mylist;void display(sequence_list slt){ int i;if( == 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
size;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;i
size;i++){
if(slt->a[i]!= x){
金陵科技學院實驗報告
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;//字符串當前字符數
int len = init_size;//字符串空間大小
while(ch = getchar()){ // 循環錄入字符串
if(ch == '@'){ ///如果按回車鍵,則結束
str[i] = '';///字符串結束標志
break;
}
金陵科技學院實驗報告
if(i < len-1){
str[i] = ch;
}
else {
str =(char *)realloc(str,(len + incr_size)* sizeof(char));//增加存儲空間
str[i] = ch;
len += incr_size;//重新記錄字符串空間
}
i++;} if(ispalindrome(str)!= 0){
printf(“yesn”);} else {
printf(“non”);} }
金陵科技學院實驗報告
金陵科技學院實驗報告
四、實驗結果與分析(程序運行結果及其分析)(1)
(2)
金陵科技學院實驗報告
五、實驗體會(遇到問題及解決辦法,編程后的心得體會)
金陵科技學院實驗報告
通過該實驗我熟練掌握了如何通過堆棧和隊列來判斷一個算術表達式中開括號和閉括號是否配對,測試“漢諾塔”問題以及判斷回文數。
金陵科技學院實驗報告
實驗項目名稱: 串 實驗學時: 2 同組學生姓名: 實驗地點: 實驗日期: 實驗成績: 批改教師: 批改時間:
金陵科技學院實驗報告
實驗4 串
一、實驗目的和要求
掌握串的存儲及應用。
二、實驗儀器和設備
turbo c 2.0
三、實驗內容與過程(含程序清單及流程圖)
1、必做題
(1)編寫輸出字符串s中值等于字符ch的第一個字符的函數,并用主函數測試結果。
(2)編寫輸出字符串s中值等于字符ch的所有字符的函數,并用主函數測試結果。
解題思路:可以將第一題程序改進成一個子函數,在本題中循環調用。(3)設字符串采用單字符的鏈式存儲結構,編程刪除串s從位置i開始長度為k的子串。
2、選做題
假設以鏈結構表示串,編寫算法實現將串s插入到串t中某個字符之后,若串t中不存在這個字符,則將串s聯接在串t的末尾。
提示:為提高程序的通用性,插入位置字符應設計為從鍵盤輸入。程序清單:
(1)#include
void main(){ char s[100],ch,c;int i;printf(“創建字符串!”);gets(s);printf(“輸入要查找的字符:”);scanf(“%c”,&ch);for(i=0;s[i]!='';i++);{
if(ch==s[i]){
c=s[i];
金陵科技學院實驗報告
} }
} if(s[i]){ printf(“輸出字符:”);putchar(c);printf(“n”);} else { printf(“沒有找到!”);}(2)#include
#include
void find(char *s,char ch){ int i,j=0;char c;
for(i=0;s[i]!='';i++){if(ch==s[i])
{
c=s[i];
j++;
}
}
if((i-1)!=strlen(s)){
printf(“有%d個元素”,j);printf(“n”);printf(“輸出字符:”);putchar(c);printf(“n”);} else {
金陵科技學院實驗報告
printf(“沒有找到!”);} } void main(){ char s[100],ch;int i;printf(“創建字符串!”);gets(s);printf(“輸入要查找的字符:”);scanf(“%c”,&ch);find(s,ch);}(3)#include
#include
typedef struct linknode { char data;struct linknode *next;}linkstring;linkstring *creatlink(linkstring *s){ linkstring *p = null, *q = null;char ch;ch = getchar();while(ch!= '$'){
p = malloc(sizeof(linkstring));p->data = ch;
金陵科技學院實驗報告
if(s == null)s = p, q = p;
else
q->next = p, q = p;
ch = getchar();} if(q->next!= null)q->next = null;return s;} linkstring *delete(linkstring *s, int i, int k)//足夠長 { linkstring *p = s, *q;int m = 2;while(m
p = p->next;
m++;} m = 0;if(i == 1)while(m
假定字符串金陵科技學院實驗報告
s = p->next;
free(p);
p = s;
m++;} else while(m
q = p->next;
p->next = q->next;
free(q);
m++;} return s;} void output(linkstring *s){ linkstring *p = s;while(p!= null){
printf(“%2c”, p->data);
p = p->next;
金陵科技學院實驗報告
} } int main(){ linkstring *s = null;int i, k;s = creatlink(s);output(s);printf(“n”);printf(“please enter the location and the length:”);scanf(“%d%d”, &i, &k);s = delete(s, i, k);getchar();output(s);printf(“n”);return 0;}
金陵科技學院實驗報告
金陵科技學院實驗報告
四、實驗結果與分析(程序運行結果及其分析)
五、實驗體會(遇到問題及解決辦法,編程后的心得體會)通過該實驗我熟練掌握了如何建立一個串,如何查找串中的元素以及
金陵科技學院實驗報告
刪除指定的子串。
金陵科技學院實驗報告
實驗項目名稱: 二叉樹 實驗學時: 2 同組學生姓名: 實驗地點: 實驗日期: 實驗成績: 批改教師: 批改時間:
金陵科技學院實驗報告
實驗5 二叉樹
一、實驗目的和要求
(1)掌握二叉樹的生成,以及前、中、后序遍歷算法。(2)掌握應用二叉樹遞歸遍歷思想解決問題的方法。
二、實驗儀器和設備
turbo c 2.0
三、實驗內容與過程(含程序清單及流程圖)
1、必做題
(1)建立一棵二叉樹。對此樹進行前序遍歷、中序遍歷及后序遍歷,輸出遍歷序列。
(2)在第一題基礎上,求二叉樹中葉結點的個數。(3)在第一題基礎上,求二叉樹中結點總數。(4)在第一題基礎上,求二叉樹的深度。
2、選做題
已知一棵完全二叉樹存于順序表sa中,[1…]存儲結點的值。試編寫算法由此順序存儲結構建立該二叉樹的二叉鏈表。
解題思路:根據完全二叉樹順序存儲的性質來確定二叉樹的父子關系即“還原”了二叉樹,之后再按照二叉樹二叉鏈表的構造方法進行建立。完全二叉樹順序存儲的一個重要性質為,第i個結點的左孩子是編號為2i的結點,第i個結點的右孩子是編號為2i+1的結點。程序清單:
(1)#include
#include
#include
int twochild;//有兩個孩子的結點數 int leaf;//葉子數 int node;//結點數using namespace std;typedef struct binode{ int data;struct binode *lchild,*rchild;}binode,*bitree;
金陵科技學院實驗報告
typedef struct{ bitree elem[100];int top;}stack;
bitree creat_bt(){ //按擴展前序建二叉樹 bitree t;int x;scanf(“%d”,&x);if(x==0)t=null;//以0作為結束
else { t=(bitree)malloc(sizeof(binode));t->data=x;printf(“請輸入%d結點的左孩子結點(若沒有,請輸入 0)”,t->data);t->lchild=creat_bt();printf(“請輸入%d結點的右孩子結點(若沒有,請輸入 0)”,t->data);t->rchild=creat_bt();} return t;}
void preorder(bitree t){ if(t){ printf(“%dn”,t->data);preorder(t->lchild);preorder(t->rchild);} }
void inorder(bitree t){ if(t){ inorder(t->lchild);printf(“%dn”,t->data);inorder(t->rchild);} }
void postorder(bitree t){ if(t){ postorder(t->lchild);
算法與數據結構實驗總結篇五
金陵科技學院實驗報告
學 生 實 驗 報 告 冊
課程名稱:
學生學號:
所屬院部:
(理工類)
算法與數據結構 專業班級:
學生姓名:
指導教師: ——20 學年 第 學期
金陵科技學院教務處制
金陵科技學院實驗報告
實驗報告書寫要求
實驗報告原則上要求學生手寫,要求書寫工整。若因課程特點需打印的,要遵照以下字體、字號、間距等的具體要求。紙張一律采用a4的紙張。
實驗報告書寫說明
實驗報告中一至四項內容為必填項,包括實驗目的和要求;實驗儀器和設備;實驗內容與過程;實驗結果與分析。各院部可根據學科特點和實驗具體要求增加項目。
填寫注意事項
(1)細致觀察,及時、準確、如實記錄。(2)準確說明,層次清晰。
(3)盡量采用專用術語來說明事物。
(4)外文、符號、公式要準確,應使用統一規定的名詞和符號。(5)應獨立完成實驗報告的書寫,嚴禁抄襲、復印,一經發現,以零分論處。
實驗報告批改說明
實驗報告的批改要及時、認真、仔細,一律用紅色筆批改。實驗報告的批改成績采用百分制,具體評分標準由各院部自行制定。
實驗報告裝訂要求
實驗批改完畢后,任課老師將每門課程的每個實驗項目的實驗報告以自然班為單位、按學號升序排列,裝訂成冊,并附上一份該門課程的實驗大綱。
金陵科技學院實驗報告
實驗項目名稱: 順序表 實驗學時: 2 同組學生姓名: 實驗地點: 實驗日期: 實驗成績: 批改教師: 批改時間:
金陵科技學院實驗報告
實驗1 順序表
一、實驗目的和要求
掌握順序表的定位、插入、刪除等操作。
二、實驗儀器和設備
vc6.0
三、實驗內容與過程(含程序清單及流程圖)
1、必做題
(1)編寫程序建立一個順序表,并逐個輸出順序表中所有數據元素的值。編寫主函數測試結果。
(2)編寫順序表定位操作子函數,在順序表中查找是否存在數據元素x。如果存在,返回順序表中和x值相等的第1個數據元素的序號(序號從0開始編號);如果不存在,返回-1。編寫主函數測試結果。(3)在遞增有序的順序表中插入一個新結點x,保持順序表的有序性。
解題思路:首先查找插入的位置,再移位,最后進行插入操作;從第一個元素開始找到第一個大于該新結點值x的元素位置i即為插入位置;然后將從表尾開始依次將元素后移一個位置直至元素i;最后將新結點x插入到i位置。
(4)刪除順序表中所有等于x的數據元素。
2、選做題
(5)已知兩個順序表a和b按元素值遞增有序排列,要求寫一算法實現將a和b歸并成一個按元素值遞減有序排列的順序表(允許表中含有值相同的元素)。
程序清單:
金陵科技學院實驗報告
金陵科技學院實驗報告
四、實驗結果與分析(程序運行結果及其分析)
五、實驗體會(遇到問題及解決辦法,編程后的心得體會)
金陵科技學院實驗報告
實驗項目名稱: 單鏈表 實驗學時: 2 同組學生姓名: 實驗地點: 實驗日期: 實驗成績: 批改教師: 批改時間:
金陵科技學院實驗報告
實驗2 單鏈表
一、實驗目的和要求
1、實驗目的
掌握單鏈表的定位、插入、刪除等操作。
2、實驗要求
(1)注意鏈表的空間是動態分配的,某結點不用之后要及時進行物理刪除,以便釋放其內存空間。
(2)鏈表不能實現直接定位,一定注意指針的保存,防止丟失。
二、實驗儀器和設備
visual c++6.0
三、實驗內容與過程(含程序清單及流程圖)
1、必做題
(1)編寫程序建立一個單鏈表,并逐個輸出單鏈表中所有數據元素。(2)在遞增有序的單鏈表中插入一個新結點x,保持單鏈表的有序性。
解題思路:首先查找插入的位置然后進行插入操作;從第一個結點開始找到第一個大于該新結點值的結點即為插入位置;然后在找到的此結點之前插入新結點;注意保留插入位置之前結點的指針才能完成插入操作。
(3)編寫實現帶頭結點單鏈表就地逆置的子函數,并編寫主函數測試結果。
2、選做題
已知指針la和lb分別指向兩個無頭結點單鏈表的首元結點。要求編一算法實現,從表la中刪除自第i個元素起共len個元素后,將它們插入到表lb中第j個元素之前。程序清單:
金陵科技學院實驗報告
金陵科技學院實驗報告
四、實驗結果與分析(程序運行結果及其分析)
五、實驗體會(遇到問題及解決辦法,編程后的心得體會)
金陵科技學院實驗報告
實驗項目名稱: 堆棧和隊列 實驗學時: 2 同組學生姓名: 實驗地點: 實驗日期: 實驗成績: 批改教師: 批改時間:
金陵科技學院實驗報告
實驗3 堆棧和隊列
一、實驗目的和要求
(1)掌握應用棧解決問題的方法。(2)掌握利用棧進行表達式求和的算法。
(3)掌握隊列的存儲結構及基本操作實現,并能在相應的應用問題中正確選用它們。
二、實驗儀器和設備
visual c++6.0
三、實驗內容與過程(含程序清單及流程圖)
1、必做題
(1)判斷一個算術表達式中開括號和閉括號是否配對。(2)測試“漢諾塔”問題。
(3)假設稱正讀和反讀都相同的字符序列為”回文”,試寫一個算法判別讀入的一個以’@’為結束符的字符序列是否是“回文”。
2、選做題
在順序存儲結構上實現輸出受限的雙端循環隊列的入列和出列算法。設每個元素表示一個待處理的作業,元素值表示作業的預計時間。入隊列采取簡化的短作業優先原則,若一個新提交的作業的預計執行時間小于隊頭和隊尾作業的平均時間,則插入在隊頭,否則插入在隊尾。程序清單:
金陵科技學院實驗報告
四、實驗結果與分析(程序運行結果及其分析)
金陵科技學院實驗報告
五、實驗體會(遇到問題及解決辦法,編程后的心得體會)
金陵科技學院實驗報告
實驗項目名稱: 串 實驗學時: 2 同組學生姓名: 實驗地點: 實驗日期: 實驗成績: 批改教師: 批改時間:
金陵科技學院實驗報告
實驗4 串
一、實驗目的和要求
掌握串的存儲及應用。
二、實驗儀器和設備
visual c++6.0
三、實驗內容與過程(含程序清單及流程圖)
1、必做題
(1)編寫輸出字符串s中值等于字符ch的第一個字符的函數,并用主函數測試結果。
(2)編寫輸出字符串s中值等于字符ch的所有字符的函數,并用主函數測試結果。
解題思路:可以將第一題程序改進成一個子函數,在本題中循環調用。(3)設字符串采用單字符的鏈式存儲結構,編程刪除串s從位置i開始長度為k的子串。
2、選做題
假設以鏈結構表示串,編寫算法實現將串s插入到串t中某個字符之后,若串t中不存在這個字符,則將串s聯接在串t的末尾。
提示:為提高程序的通用性,插入位置字符應設計為從鍵盤輸入。程序清單:
金陵科技學院實驗報告
四、實驗結果與分析(程序運行結果及其分析)
金陵科技學院實驗報告
五、實驗體會(遇到問題及解決辦法,編程后的心得體會)
金陵科技學院實驗報告
實驗項目名稱: 二叉樹 實驗學時: 2 同組學生姓名: 實驗地點: 實驗日期: 實驗成績: 批改教師: 批改時間:
金陵科技學院實驗報告
實驗5 二叉樹
一、實驗目的和要求
(1)掌握二叉樹的生成,以及前、中、后序遍歷算法。(2)掌握應用二叉樹遞歸遍歷思想解決問題的方法。
二、實驗儀器和設備
visual c++6.0
三、實驗內容與過程(含程序清單及流程圖)
1、必做題
(1)建立一棵二叉樹。對此樹進行前序遍歷、中序遍歷及后序遍歷,輸出遍歷序列。
(2)在第一題基礎上,求二叉樹中葉結點的個數。(3)在第一題基礎上,求二叉樹中結點總數。(4)在第一題基礎上,求二叉樹的深度。
2、選做題
已知一棵完全二叉樹存于順序表sa中,[1…]存儲結點的值。試編寫算法由此順序存儲結構建立該二叉樹的二叉鏈表。
解題思路:根據完全二叉樹順序存儲的性質來確定二叉樹的父子關系即“還原”了二叉樹,之后再按照二叉樹二叉鏈表的構造方法進行建立。完全二叉樹順序存儲的一個重要性質為,第i個結點的左孩子是編號為2i的結點,第i個結點的右孩子是編號為2i+1的結點。程序清單:
金陵科技學院實驗報告
四、實驗結果與分析(程序運行結果及其分析)
金陵科技學院實驗報告
五、實驗體會(遇到問題及解決辦法,編程后的心得體會)
金陵科技學院實驗報告
實驗項目名稱: 圖 實驗學時: 2 同組學生姓名: 實驗地點: 實驗日期: 實驗成績: 批改教師: 批改時間:
金陵科技學院實驗報告
實驗6 圖
一、實驗目的和要求
(1)熟練掌握圖的基本概念、構造及其存儲結構。
(2)熟練掌握對圖的深度優先搜索遍歷和廣度優先搜索遍歷的算法。
二、實驗儀器和設備
visual c++6.0
三、實驗內容與過程(含程序清單及流程圖)
1、必做題
(1)構造一個無向圖(用鄰接矩陣表示存儲結構)。
(2)對上面所構造的無向圖,進行深度優先遍歷和廣度優先遍歷,輸出遍歷序列。
2、選做題
采用鄰接表存儲結構,編寫一個判別無向圖中任意給定的兩個頂點之間是否存在一條長度為k的簡單路徑的算法。簡單路徑是指其頂點序列中不含有重復頂點的路徑。提示:兩個頂點及k值均作為參數給出。程序清單:
金陵科技學院實驗報告
四、實驗結果與分析(程序運行結果及其分析)
五、實驗體會(遇到問題及解決辦法,編程后的心得體會)
金陵科技學院實驗報告
實驗項目名稱: 排序 實驗學時: 2 同組學生姓名: 實驗地點: 實驗日期: 實驗成績: 批改教師: 批改時間:
金陵科技學院實驗報告
實驗7 排序
一、實驗目的和要求
(1)熟練掌握希爾排序、堆排序、直接插入排序、起泡排序、快速排序、直接選擇排序、歸并排序和基數排序的基本概念。
(2)掌握以上各種排序的算法。區分以上不同排序的優、缺點。
二、實驗儀器和設備
visual c++6.0
三、實驗內容與過程(含程序清單及流程圖)
1、必做題
用隨機數產生100000個待排序數據元素的關鍵字值。測試下列各排序函數的機器實際執行時間(至少測試兩個):直接插入排序、希爾排序(增量為4,2,1)、冒泡排序、快速排序、直接選擇排序、二路歸并排序、堆排序和基于鏈式隊列的基數排序。
2、選做題
假設含n個記錄的序列中,其所有關鍵字為值介于v和w之間的整數,且其中很多關鍵字的值是相同的。則可按如下方法排序:另設數組number[v…w],令number[i]統計關鍵字為整數i的紀錄個數,然后按number重排序列以達到有序。試編寫算法實現上述排序方法,并討論此種方法的優缺點。程序清單:
金陵科技學院實驗報告
金陵科技學院實驗報告
四、實驗結果與分析(程序運行結果及其分析)
五、實驗體會(遇到問題及解決辦法,編程后的心得體會)
金陵科技學院實驗報告
實驗項目名稱: 查找 實驗學時: 2 同組學生姓名: 實驗地點: 實驗日期: 實驗成績: 批改教師: 批改時間:
金陵科技學院實驗報告
實驗8 查找
一、實驗目的和要求
(1)掌握順序表查找、有序表查找、索引順序表查找的各種算法。(2)掌握哈希表設計。
二、實驗儀器和設備
visual c++6.0
三、實驗內容與過程(含程序清單及流程圖)
1、必做題
(1)在一個遞增有序的線性表中利用二分查找法查找數據元素x。
2、選做題
(2)構造一個哈希表,哈希函數采用除留余數法,哈希沖突解決方法采用鏈地址法。設計一個測試程序進行測試。
提示:構造哈希表只是完成查找的第一步,大家應該掌握在哈希表上進行查找的過程,可以試著編程序實現。程序清單:
金陵科技學院實驗報告
四、實驗結果與分析(程序運行結果及其分析)
五、實驗體會(遇到問題及解決辦法,編程后的心得體會)