第一篇:實驗一線性表的創建與訪問算法設計
內蒙古工業大學信息工程學院
四、編譯程序:
#include
typedef char ElemType;typedef struct LNode
//定義單鏈表結點類型 {
ElemType data;
struct LNode *next;}LinkList;
LinkList *CreatlinkR(LinkList *L)
//用尾插法建立帶頭結點的單鏈表 {
LinkList *s, *r;char ch;r =(LinkList *)malloc(sizeof(LinkList));
//創建頭結點
L = r;s = r;r->next = NULL;printf(“單鏈表元素值為單個字符, 連續輸入,$為結束字符:”);while((ch = getchar())!= '$'){
r =(LinkList *)malloc(sizeof(LinkList));
//創建新結點
r->data = ch;
r->next = NULL;
s->next = r;
s = r;
} r->next=NULL;
//終端結點
return(L);}
void Sort(LinkList *h)
//單鏈表元素排序 { LinkList *p=h->next,*q,*t;
if(p!=NULL){
t=p->next;
p->next=NULL;
p=t;
while(p!=NULL)
{
t=p->next;
q=h;
第 頁
內蒙古工業大學信息工程學院
while(q->next!=NULL&&q->next->data
data)
q=q->next;
//在有序表中找插入*p的前驅結點*q
p->next=q->next;
//將*p插到*q之后
q->next=p;
p=t;
} } }
void DispList(LinkList *L)
//輸出單鏈表L {
LinkList *p=L->next;
while(p!=NULL){
printf(“%c ”,p->data);
p=p->next;} }
LinkList *Union(LinkList *La,LinkList *Lb,LinkList *Lc)
{ LinkList *pa=La->next,*pb=Lb->next,*s,*tc;
Lc=(LinkList *)malloc(sizeof(LinkList));
tc=Lc;while(pa!=NULL&&pb!=NULL){
if(pa->data
data)
{
s=(LinkList *)malloc(sizeof(LinkList));
s->data=pa->data;
tc->next=s;
tc=s;
pa=pa->next;
}
else if(pa->data>pb->data)
{
s=(LinkList *)malloc(sizeof(LinkList));
s->data=pb->data;
tc->next=s;
tc=s;
pb=pb->next;
}
else
{
第 頁
//求兩有序集合的并集 //復制結點
內蒙古工業大學信息工程學院
s=(LinkList *)malloc(sizeof(LinkList));
s->data=pa->data;
tc->next=s;
tc=s;
pa=pa->next;
//重復元素只復制一個
pb=pb->next;
} } if(pb!=NULL)
//復制余下結點
pa=pb;while(pa!=NULL){
s=(LinkList *)malloc(sizeof(LinkList));
s->data=pa->data;
tc->next=s;
tc=s;
pa=pa->next;
} tc->next=NULL;return(Lc);}
LinkList *InsterSect(LinkList *La,LinkList *Lb,LinkList *Lc)
//求兩有序集合的交集 {
LinkList *pa=La->next,*pb,*s,*tc;
Lc=(LinkList *)malloc(sizeof(LinkList));
tc=Lc;
while(pa!=NULL){
pb=Lb->next;
while(pb!=NULL&&pb->data
data)
pb=pb->next;
if(pb!=NULL&&pb->data==pa->data)
//若pa結點值在pb中
{
s=(LinkList *)malloc(sizeof(LinkList));
s->data=pa->data;
tc->next=s;
tc=s;
}
pa=pa->next;}
tc->next=NULL;return(Lc);
第 頁
內蒙古工業大學信息工程學院
}
LinkList *Subs(LinkList *La,LinkList *Lb,LinkList *Lc)
//求兩有序集合的差集 {
LinkList *pa=La->next,*pb,*s,*tc;
Lc=(LinkList *)malloc(sizeof(LinkList));
tc=Lc;
while(pa!=NULL){
pb=Lb->next;
while(pb!=NULL&&pb->data
data)
pb=pb->next;
if(!(pb!=NULL&&pb->data==pa->data))
{
s=(LinkList *)malloc(sizeof(LinkList));
s->data=pa->data;
tc->next=s;
tc=s;
}
pa=pa->next;} tc->next=NULL;return(Lc);}
void main(){
LinkList *La,*Lb,*Lc;
int num=0,loop,j;loop=1;La=CreatlinkR(La);Lb=CreatlinkR(Lb);Sort(La);Sort(Lb);
printf(“有序集合A={ ”);
DispList(La);
printf(“}n”);
printf(“有序集合B={ ”);
DispList(Lb);printf(“}n”);while(loop){
printf(“請選擇您要執行的操作:1.求并集
scanf(”%d“,&j);printf(”n%d“,j);
第 頁
//若pa結點值不在pb中 2.求交集
3.求差集n”);
內蒙古工業大學信息工程學院
if(j>=1&&j<=3)
switch(j)
{
case 1: Lc=Union(La,La,Lc);
printf(“集合A與集合B的并集C={ ”);
DispList(Lc);
printf(“}n”);
break;
case 2: Lc=InsterSect(La,Lb,Lc);
printf(“集合A與集合B的交集C={ ”);
DispList(Lc);
printf(“}n”);
break;
case 3: Lc=Subs(La,Lb,Lc);
printf(“集合A與集合B的差集C={ ”);
DispList(Lc);
printf(“}n”);
break;
} printf(“0.結束
1.繼續n”);scanf(“%d”,&loop);printf(“n”);} }
五、運行結果:
1.輸入兩個無序集合,排序后輸出:
第 頁
內蒙古工業大學信息工程學院
2.求集合的并集:
3.選1繼續:
第 頁
內蒙古工業大學信息工程學院
4.求集合的交集:
5.求集合的差集:
第 頁
內蒙古工業大學信息工程學院
6.選0結束:
第 頁
第二篇:二叉樹的創建與訪問算法設計
內蒙古工業大學信息工程學院
實 驗 報 告
課程名稱: 數據結構(C語言版)實驗名稱: 二叉樹的創建與訪問算法設計 實驗類型: 驗證性□ 綜合性□ 設計性□ 實驗室名稱: c機房 班級:xxxxxxxxx 學號: xxxxxxxxxxxxxxx 姓名: xxx 組別: 同組人:
成績:
實驗日期: 2011年 6月
內蒙古工業大學信息工程學院
預習報告成績: 指導教師審核(簽名): 2011年 月 日
預習報告
一.實驗目的
本實驗以二叉樹的創建與訪問算法設計作為實驗內容,掌握樹型結構的實現方法,培養解決負責問題的能力。
二.實驗內容
1、編寫生成二叉樹的函數,二叉樹的元素從鍵盤輸入;
2、編寫在二叉樹中插入元素的函數;
3、編寫在二叉樹中刪除元素的函數;
4、編寫遍歷并輸出二叉樹的函數。
方案一采用遞歸算法實現二叉樹遍歷算法。方案二采用非遞歸算法實現二叉樹遍歷算法。三.實驗要求
1、掌握樹型結構的機器內表示;
2、掌握樹型結構之上的算法設計與實現;
3、列表對比分析兩種數據結構的相應操作的時間復雜度、空間復雜度,闡明產生差異的原因。四.問題描述
從鍵盤輸入二叉樹的元素,建立二叉樹,實現二叉樹的遍歷算法。
五.基本要求
實現以下基本操作:
(1)從鍵盤輸入二叉樹的元素,建立二叉樹。(2)實現二叉樹的先序遍歷算法。
內蒙古工業大學信息工程學院
實驗報告成績: 指導教師審核(簽名): 2011年 月 日
實驗報告
一 程序清單
#include “stdio.h” #include “string.h” #include
typedef struct BiTNode{ char data;
struct BiTNode *lchild,*rchild;}BiTNode,*BiTree;
BiTree Create(BiTree T){
char ch;
ch=getchar();if(ch=='#')T=NULL;else{
if(!(T=(BiTNode *)malloc(sizeof(BiTNode))))printf(“Error!”);T->data=ch;
T->lchild=Create(T->lchild);T->rchild=Create(T->rchild);}
return T;}
int Depth(BiTree T){
int dep=0,depl,depr;if(!T)dep=0;else {
depl=Depth(T->lchild);depr=Depth(T->rchild);
dep=1+(depl>depr?depl:depr);}
return dep;}
void main(){ BiTree T;int dep;printf(“請輸入您要創建的二叉樹!!n
'#'表示空元素!n”);T=Create(T);
printf(“nn您要求的二叉樹的深度:”);dep=Depth(T);
printf(“%dnn”,dep);} }
內蒙古工業大學信息工程學院
二 測試結果
三 調試程序出現的問題及解決的方法
編程中出現很多的編譯錯誤,主要采用對每個函數調試,設斷點,運用自己的程序中,讓我更好的掌握了遞歸算法。四 實驗心得體會
通過這次試驗,讓我鞏固了鏈式存儲結構和遞歸算法的使用,用模塊化思路設計程序,編寫程序要小心謹慎,要細化到每個函數,通過多次調試,才使得整個程序正確運行,達到預期結果。
第三篇:算法與數據結構實驗
金陵科技學院實驗報告
學 生 實 驗 報 告 冊
課程名稱:
學生學號:
所屬院部:
(理工類)
算法與數據結構 專業班級: 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
金陵科技學院實驗報告
} 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 金陵科技學院實驗報告 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(); 金陵科技學院實驗報告 } } 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中,sa.elem[1…sa.last]存儲結點的值。試編寫算法由此順序存儲結構建立該二叉樹的二叉鏈表。 解題思路:根據完全二叉樹順序存儲的性質來確定二叉樹的父子關系即“還原”了二叉樹,之后再按照二叉樹二叉鏈表的構造方法進行建立。完全二叉樹順序存儲的一個重要性質為,第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)構造一個哈希表,哈希函數采用除留余數法,哈希沖突解決方法采用鏈地址法。設計一個測試程序進行測試。 提示:構造哈希表只是完成查找的第一步,大家應該掌握在哈希表上進行查找的過程,可以試著編程序實現。程序清單: 金陵科技學院實驗報告 四、實驗結果與分析(程序運行結果及其分析) 五、實驗體會(遇到問題及解決辦法,編程后的心得體會) 實驗1 遞歸與分治 一、實驗目的: 利用C/C++/JAVA等程序設計語言,實現本章節中分治算法、遞歸,漢諾塔問題/二分搜索算法/合并排序/快速排序等經典算法。通過本實驗章節掌握遞歸、分治算法的設計思想及實現技巧,加深對課程知識的理解。 二、實驗學時:2 三、實驗任務: 利用高級程序設計語言,編程實現以下問題: 1)遞歸:排列問題,漢諾塔問題; 2)分治:遞歸實現的合并排序及非遞歸的自然合并排序; 四、實驗要求 1,設計過程 理解課本中源代碼或偽代碼的思想,結合流程圖等工具描述實驗任務的設計過程,并獨自完成代碼編寫、調試及測試過程。2,代碼及注釋 提交包含完整源代碼及關鍵代碼注釋的實驗報告。3,運行效果圖及測試數據 實驗報告中應有能體現源代碼正確編譯、運行的實驗運行效果圖及多組測試數據集。 4,心得體會 將實驗過程中所遇到的問題以及解決問題的方式、方法以及調試過程加以概括,并總結該實驗過程中的收獲。 計算機科學與技術學院 算法分析與設計 實驗指導書 于洪 編寫 2011年8月 目 錄 實驗一實驗二實驗三實驗四附錄1 附錄2 排序問題求解…………………………..…..………3 背包問題求解…………………………..…………..5 最短路徑問題求解………………..………………..8 N-皇后問題求解…………………………………..10關于文件的操作……………………………….….12 關于如何統計運算時間…………………………..13 實驗一 排序問題求解 實驗目的 1)以排序(分類)問題為例,掌握分治法的基本設計策略。2)熟練掌握一般插入排序算法的實現; 3)熟練掌握快速排序算法的實現; 4)理解常見的算法經驗分析方法; 實驗環境 計算機、C語言程序設計環境 實驗學時 2學時,必做實驗。實驗內容與步驟 1.生成實驗數據.要求:編寫一個函數datagenetare,生成2000個在區間[1,10000]上的隨機整數,并將這些數輸出到外部文件data.txt中。這些數作為后面算法的實驗數據。2.實現直接插入排序算法.要求:實現insertionsort算法。 算法的輸入是data.txt; 輸出記錄為文件:resultsIS.txt;同時記錄運行時間為TimeIS。直接插入算法思想: Procedure insertionsort(A,n) A(0)=-?第四篇:算法設計與分析 實驗指導書1
第五篇:《算法分析與設計》實驗指導書-