久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

實驗一線性表的創建與訪問算法設計(精選多篇)

時間:2019-05-13 17:59:47下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關的《實驗一線性表的創建與訪問算法設計》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《實驗一線性表的創建與訪問算法設計》。

第一篇:實驗一線性表的創建與訪問算法設計

內蒙古工業大學信息工程學院

四、編譯程序:

#include #include #define MAXSIZE 100

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 #define NULL 0

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 #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<=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

實驗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)=-?

for j=2 to n do item=A(j);i=j-1 while item

repeat End insertionsort 3.實現快速排序算法.要求:實現QuickSort 算法。

算法的輸入是data.txt;

輸出記錄為文件:resultsQS.txt;同時記錄運行時間為TimeQS。

快速排序算法思想: Procedure QuickSort(p,q)

integer p,q;global n,A(1:n)

if p< q then

j ← q+1

call Partition(p, j)

call QuickSort(p, j-1)

call QuickSort(j+1, q)

end if end QuickSort

實驗報告:

實驗報告應包括以下內容:

用A(m)劃分集合A的函數: Procedure partition(m,p)

integer m,p, I;global A(m:p-1)v=A(m);I=m Loop

loop I=I+1 until A(I)>=v repeat loop p=p-1 until A(p)<=v repeat if I

then call interchange(A(i), A(p))

Else exit Endif Repeat

A(m)=A(p);A(p)=v End partition(1)題目;

(2)2個算法的基本思想描述;(3)算法理論分析(參考教材);

(4)程序流程圖;

(5)給出data.txt、resultsIS.txt、resultsQS.txt三個文件任選其一的清單;

TimeIS、TimeQS的記錄結果;

(6)實驗分析;以表或者圖的形式給出這2個算法的經驗對比分析結果;并和理論分析結論進行對比。

(7)說明本次調試實驗的心得體會、經驗等。如果程序未通過,應分析其原因。

實驗二

背包問題求解

實驗目的

1)以背包問題為例,掌握貪心法的基本設計策略。

2)熟練掌握各種貪心策略情況下的背包問題的算法并實現;其中:量度標準分別取:效益增量P、物品重量w、P/w比值;

3)分析實驗結果來驗證理解貪心法中目標函數設計的重要性。

實驗環境

計算機、C語言程序設計環境

實驗學時

2學時,必做實驗。

實驗內容與步驟

1.理解需要求解背包問題.(1)背包問題的描述:已知有n種物品和一個可容納M重量的背包,每種物品i的重量為益,這里,0?xi?1wi。假定將物品i的一部分

xi放入背包就會得到

pixi的效,pi?0。顯然,由于背包容量是M,因此,要求所有選中要裝入背包的物品總重量不得超過M.。如果這n件物品的總重量不超過M,則把所有物品裝入背包自然獲得最大效益。現需解決的問題是,在這些物品重量的和大于M的情況下,該如何裝包,使得得到更大的效益值。由以上敘述,可將這個問題形式表述如下:

極 大 化目標函數

約束條件

?1?i?npixi

?w1?i?nixi?M

0?xi?1,pi?0,wi?0,1?i?n(2)用貪心策略求解背包問題

首先需確定最優的量度標準。這里考慮三種策略: 策略1:按物品價值p降序裝包,策略2:按物品重w升序裝包 策略3:按物品價值與重量比值p/w的降序裝包

(3)分別以上面三種策略分別求以下情況背包問題的解: n=7,M=15,(p1,?,p7)=(10,5,15,7,6,18,3)(w1,?,w7)=(2,3,5,7,1,4,1)。以策略3為例的背包問題的貪心算法描述:

procedure GREEDY-KNAPSACK(P,W,M,X,n)//P(1:n)和W(1:n)分別含有按P(i)/W(i)≥P(i+1)/ W(i+1)排序的n件物品的效益值和重量。M是背包的容量,而X(1:n)是解向量。//

real P(1:n),W(1:n),X(1:n),M,cu;

integer i,n;X?0

//將解向量初始化為零 cu?M //cu是背包剩余容量 for i?1 to n do

if W(i)>cu then exit endif

X(i)?1

cu?cu-W(i)repeat if i≤n then X(i)?cu/W(i)endif end GREEDY-KNAPSACK 2.以策略1作為量度標準求解要求問題,記錄解向量為X1、目標函數的值fp1(即最后裝好包后背包的效益值

?1?i?n、背包的重量fw1; pixi)3.以策略2作為量度標準求解要求問題,記錄解向量為X21、目標函數的值fp2(即最后裝好包后背包的效益值

?1?i?n、背包的重量fw2;

pixi)4.以策略3作為量度標準求解要求問題,記錄解向量為X3、目標函數的值fp3即最后裝好包后背包的效益值實驗報告:

實驗報告應包括以下內容:

?1?i?n、背包的重量fw3;

pixi)(1)題目;

(2)算法的基本思想描述;(3)程序流程圖;

(4)給出3個程序任意之一的程序清單;

(5)實驗分析;通過實驗結果對比分析說明哪種策略好。

(6)說明本次調試實驗的心得體會、經驗等。如果程序未通過,應分析其原因。

Tips:

1.解向量的表示。需要注意:因為算法中涉及到排序,如何保證各種物品的原始命名(如果以第幾種,即序號,來命名物品)關系需要考慮。

#define MAX 200 typedef struct Solution //定義的解向量

{

int x[MAX];表示該號物品放了多少在背包里,這里0?xi?

1int order[MAX];表示物品的序號,相當于其名字

}Solution;Solution X;所以,初始化時,為: for(i=0;i

{

X.order[i]=i;

X.x[i]=0;

}

2.主要函數:

void GreedyKnapsack(float profit[],float weight[],float x[],int m, int n){

float cu;

int i;

cu=float(m);

for(i=0;i

{

x[i]=0;

}

for(i=0;i

{

if(weight[i]>cu)

break;

x[i]=1;

cu=cu-weight[i];

}

if(i

{

x[i]=cu/weight[i];

} } 實驗三

最短路徑問題求解

實驗目的:

1)以最短路徑問題為例,掌握動態規劃的基本設計策略; 2)掌握dijkstra貪心法求解最短路徑問題并實現;

3)掌握動態規劃方法Floyd算法求解最短路徑問題并實現; 3)分析實驗結果。實驗環境

計算機、C語言程序設計環境 實驗學時

2學時,必做實驗。實驗內容與步驟

1.以下圖作為輸入,利用dijkstra貪心法獲取由結點1到其余結點最短路徑長度,輸出保存到外部文件dijkstra-output1.txt 3 4 5 2 1 2.然后改寫你的程序,求得所有各點之間的最短距離;輸出保存到文件dijkstra-output2.txt.3.以上圖作為輸入,利用Floyd算法求得所有各點直接的最短距離;輸出保存到文件floyd-output1.txt.實驗報告

實驗報告應包括以下內容:

(1)題目;

(2)寫出算法設計思想;

(3)程序清單;(4)運行的結果;

(5)對運行情況所作的分析以及本次調試程序所取的經驗。如果程序未通過,應分析其原因。

Tips: 主要函數

void dijkstra::algorithm()//算法函數 { initialize();int count=0;int i;int u;while(count

u=minimum();

set[++count]=u;

mark[u]=1;

for(i=1;i<=num_of_vertices;i++)

{

if(graph[u][i]>0)

{

if(mark[i]!=1)

{

if(pathestimate[i]>pathestimate[u]+graph[u][i])

{

pathestimate[i]=pathestimate[u]+graph[u][i];

predecessor[i]=u;

}

}

}} }}

//-------------float graph[maxsize][maxsize];//成本矩陣,鄰接矩陣 //floyd algorithm

for(k = 0;k < n;k ++)

{

// graph[i][j] = min {graph[i][j]}, graph[i][k] + graph[k][j]

for(i = 0;i < n;i ++)

//每次找到最優的路徑代替原來的路徑

for(j = 0;j < n;j ++)

if(graph[i][j] > graph[i][k] + graph[k][j])//狀態轉換條件

{

graph[i][j] = graph[i][k] + graph[k][j];//狀態轉換方程

}

}

實驗四:N-皇后問題求解

實驗目的:

1)以Q-皇后問題為例,掌握回溯法的基本設計策略。2)掌握回溯法解決Q-皇后問題的算法并實現; 3)分析實驗結果。

實驗環境 計算機、C語言程序設計環境

實驗學時 2學時,必做實驗。

實驗內容與步驟

1.用回溯法求解N-Queen,參考教材算法思想,并實現你的算法。要求:用鍵盤輸入N;輸出此時解的個數,并統計運算時間。2.給出N=4,5,6時,N-Queen解的個數。

3.嘗試增大N,觀察運行情況;并理解該算法的時間復雜度。實驗報告

實驗報告應包括以下內容:

(1)題目;

(2)寫出算法設計思想;

(3)運行的結果;

(4)對運行情況所作的分析以及本次調試程序所取的經驗。(5)如果程序未通過,應分析其原因。

Tips: 主要函數等

while(k>0)//對所有行執行以下語句

{

X[k] = X[k]+1;//移到下一列

while(X[k]<=n &&!PLACE(k))

{

X[k] = X[k]+1;//移到下一列,再判斷

}

if(X[k] <= n)//找到一個位置

{

if(k==n)//一個完整的解

{

//print

printf(“the soution is:n”);

for(t=1;t<=n;t++)

printf(“%3d”,X[t]);

printf(“n”);

count +=1;

}

else

{k=k+1;X[k]=0;} //轉向下一行

}

else

k=k-1;//回溯

}

printf(“n the number of the solutions is %d n”, count);

bool PLACE(int k){ i=1;while(i

if(X[i]==X[k] || abs(X[i]-X[k])==abs(i-k))

return false;

i=i+1;} return true;}

附錄1關于文件的操作

以背包問題為例:

1,例如外部文件為knapsack-input.txt:

2, 讀入文件的操作: FILE* fp;

/* Open for read(will fail if file “knapsack-input.txt” does not exist)*/

if((fp = fopen(“knapsack-input.txt”, “r”))== NULL)

printf(“The file 'knapsack-input.txt' was not openedn”);

else

printf(“The file 'knapsack-input.txt' was openedn”);

//讀輸入文件,寫n,M,p[MAX],w[MAX] fscanf(fp,“n=%dn”,&n);

fscanf(fp,“M=%dn”,&M);

for(i=0;i

for(i=0;i

fscanf(fp,“%f”,&weight[i]);fscanf(fp,“n”);

/* Close stream */

if(fclose(fp))

printf(“The file 'knapsack-input.txt' was not closedn”);附錄2關于如何統計運算時間

#include “time.h” …….//----start time-----設置計時開始

double duration;

clock_t finish, start;start = clock();

……

//----finish time-----設置計時結束

finish = clock();

duration =(double)(finish-start)/ CLOCKS_PER_SEC;

printf(“nThe CPU time is %2.6f seconds:n”, duration);

// 統計時間duration

下載實驗一線性表的創建與訪問算法設計(精選多篇)word格式文檔
下載實驗一線性表的創建與訪問算法設計(精選多篇).doc
將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
點此處下載文檔

文檔為doc格式


聲明:本文內容由互聯網用戶自發貢獻自行上傳,本網站不擁有所有權,未作人工編輯處理,也不承擔相關法律責任。如果您發現有涉嫌版權的內容,歡迎發送郵件至:645879355@qq.com 進行舉報,并提供相關證據,工作人員會在5個工作日內聯系你,一經查實,本站將立刻刪除涉嫌侵權內容。

相關范文推薦

    算法與數據結構實驗指導書

    北 京 郵 電 大 學 計 算 機 科 學 與 技 術 學 院 算 法 與 數 據 結 構 實 驗 指 導 書 楊俊、徐塞虹、漆濤 編著 2006年9月 1 算法與數據結構 實驗指導書 目錄......

    算法與數據結構實驗冊

    金陵科技學院實驗報告 學 生 實 驗 報 告 冊 課程名稱: 學生學號: 所屬院部: (理工類) 算法與數據結構 專業班級: 14計單(2) 1413201007 學生姓名: 毛卓 計算機工程學院 指導教師:......

    算法與數據結構實驗冊

    金陵科技學院實驗報告 學 生 實 驗 報 告 冊 課程名稱: 學生學號: 所屬院部: (理工類) 算法與數據結構 專業班級: 學生姓名: 指導教師: 20 14 ——20 15 學年 第 二 學期 金陵科技......

    8專題一《算法》教學設計

    《算法》的教學設計 【設計思路】 本節課學生第一次接觸算法,如果只講解算法的概念就要求學生對實際問題進行分析、建模、設計合理算法,感覺難度較大。因此,我從“把大象放冰箱......

    算法描述與設計教案

    課型:新課 《算法與程序設計》(選修)人教版 教學目標: 1.進一步理解什么是;算法,知道算法的多樣性 2.能夠對設計的算法做簡裝的評價 3.學會利用自然語言、流程圖和偽代碼來描述算......

    《算法設計綜合實驗》教案(5篇)

    《算法設計綜合實驗》教案 統計與應用數學學院 2012年5月11日制 實驗一 數據類型、運算符和表達式 實驗目的: 1、掌握C語言數據類型,熟悉如何定義一個整型、字符型和實型的變......

    算法與數據結構實驗冊[大全五篇]

    金陵科技學院實驗報告 學 生 實 驗 報 告 冊 課程名稱: 學生學號: 所屬院部: (理工類) 算法與數據結構 專業班級: 學生姓名: 指導教師: 20 ——20 學年 第 學期 金陵科技學院教務......

    數據結構算法設計與分析

    數據結構算法設計與分析、計算機網絡、計算機組成原理、操作系統原理、編譯原理、數據庫原理及應用、軟件工程、軟件測試等計算機基礎理論課程; 網頁制作、程序設計Java、JSP......

主站蜘蛛池模板: 亚洲欧洲美色一区二区三区| 国产亚洲人成网站在线观看| 成人美女黄网站色大免费的| 亚洲国产精品悠悠久久琪琪| 99久久精品国产成人综合| 亚洲成a人片在线观看www| 欧美黑人巨大xxxxx视频| 欧洲vat一区二区三区| 精品香蕉一区二区三区| 日韩午夜无码精品试看| 97视频热人人精品免费| 中文无码精品一区二区三区| 久久久久久久久无码精品亚洲日韩| 好了av第四综合无码久久| 无遮无挡爽爽免费视频| 国产黄a三级三级三级av在线看| 日韩精品无码专区免费播放| 久久久久久亚洲精品成人| 日韩av爽爽爽久久久久久| 99精产国品一二三产品香蕉| 亚洲性色av私人影院无码| 国产在线无码视频一区| 成人免费无遮挡在线播放| 少妇一边呻吟一边说使劲视频| 在线看片无码永久av| 亚洲а∨天堂男人无码| 午夜一区二区亚洲福利| 18禁止进入1000部高潮网站| 97色伦图区97色伦综合图区| 野狼av午夜福利在线| 亚洲精品一区中文字幕乱码| 久久亚洲色www成人不卡| 免费国产又色又爽又黄的网站| 色综合久久综合欧美综合网| 天天摸夜夜添久久精品| 爆乳护士一区二区三区在线播放| 亚洲色偷偷偷鲁精品| 精品人妻中文字幕有码在线| 国产成人高清在线观看视频| 综合激情五月丁香久久| 日本久久久久亚洲中字幕|