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

數據結構實驗_177(共五則范文)

時間:2019-05-12 12:49:17下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關的《數據結構實驗_177》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《數據結構實驗_177》。

第一篇:數據結構實驗_177

安徽工業大學計算機學院《數據結構》實驗報告書

《數據結構》實驗報告

—— 安徽工業大學計算機學院

數據結構

姓名: 陳白楊

學號: 099074177

學院: 計算機學院

班級: 軟件092

指導老師:王森玉

2011年6月29日

第 1 頁 完成日期: 安徽工業大學計算機學院《數據結構》實驗報告書

正文

一.[棧的應用(數值轉換)]

1.問題描述

利用棧的數據結構和不同進制的轉換結合,將十進制轉換為二進制。

2.算法實現

#include

#define maxsize 100 typedef struct linklist {

long data[maxsize];

long top;}stack,*stacklist;void change(long n){

stacklist S;

//初始化棧

if((S=(stacklist)malloc(sizeof(stack)))==NULL)

{

printf(“申請內存空間失敗!”);

return;

}

S->top=-1;

while(n>0)

{

S->top++;

S->data[S->top]=n%2;//進棧

n=n/2;

}

while(S->top>=0)

{

printf(“%ld”,S->data[S->top]);//出棧

S->top--;

}

free(S);

//銷毀棧

} int main(){

long n;

printf(“輸入測試數據:”);

scanf(“%ld”,&n);

if(n==0)

printf(“%d”,n);

else change(n);

getch();

return 0;} 3.運行結果

數據結構 第 2 頁 安徽工業大學計算機學院《數據結構》實驗報告書

二.[二叉樹的遍歷] 1.問題描述

二叉樹的遍歷主要有先序、中序、后序遍歷。對已建立的二叉樹,使用遞歸算法對二叉樹進行遍歷較為方便。同時,可以使用棧模擬遞歸。本次實驗主要使用遞歸來演示二叉樹的遍歷。

2.算法實現

先序遍歷

void Get_Fdata(tree_n *p){

} 中序遍歷

void Get_Mdata(tree_n *p){

} 后序遍歷

void Get_Ldata(tree_n *p){

if(p){

第 3 頁

if(p){

} printf(“%d ”,p->data);Get_Fdata(p->lchild);Get_Fdata(p->rchild);if(p){

} Get_Mdata(p->lchild);printf(“%d ”,p->data);Get_Mdata(p->rchild);數據結構 安徽工業大學計算機學院《數據結構》實驗報告書

}

} Get_Ldata(p->lchild);Get_Ldata(p->rchild);printf(“%d ”,p->data);3.運行結果

三.[圖的建立及遍歷] 1.問題描述

圖的建立和遍歷是圖的一個基本的使用。圖是非線性的結構,建立和遍歷圖只是圖的操作中的一個部分。圖的存儲結構只要有鄰接矩陣、鄰接表、十字鏈表、臨界多重表。圖的遍歷主要有深度優先遍歷、廣度優先遍歷。

2.算法實現

圖的建立

G.vertexNum=rand()%10;for(i=1;i

G.edgeNum=rand()%48;sum=sum+i;}while(G.edgeNum<=sum);for(i=0;i

{ G.vertex[i]=i+'0';for(j=0;j

i=rand()%10;

} for(i=0;i

} printf(“V%c ”,G.vertex[i]);for(j=0;j

”,G.arcs[i][j]);printf(“n”);j=rand()%10;if(i>-1&&i-1&&j

} G.arcs[i][j]=1;k++;

圖的遍歷(廣度優先)void BFStraverse(MGraph G){

} void BFS(MGraph G,int v){

int i,j;PQ Q;Q=Init_s();Visit(v);visited[v]=1;In_s(Q,v);

while(!Empty_s(Q))

{ int visted[MaxVertextNUm];int v;for(v=0;v

}

} Out_s(Q,&i);

for(j=0;j

if(G.arc[i][j]==1&&!visted[j])

{

} Visit(j);visited[j]=1;In_s(Q,j);

3.運行結果

四.[查找算法設計]

1.問題描述

本次實驗主要是查找算法,查找算法主要有順序查找、折半查找(有序表的查找)、分塊查找、樹表查找、哈希表查找。下面將介紹幾種查找算法。

2.算法實現

順序查找:

int Search(int a[],int key){

}

數據結構

第 6 頁

int i;for(i=0;i

if(a[i]==key)return 1;return 0;安徽工業大學計算機學院《數據結構》實驗報告書

折半查找

while(right>=left)

{

} printf(“No Find!”);mid=(right+left)/2;if(key==a[mid]){

} if(key>a[mid]){ } if(key

printf(“Find!nn”);getch();return 0;樹表查找

void Getkey(Treenode *p,Datetype key){

if(p==NULL)return;else if(p->Key==key){

} else if(p->Key>key)Getkey(p->Lchild,key);Getkey(p->Rchild,key);else if(p->Key

3.運行結果

順序查找:

數據結構 第 7 頁 安徽工業大學計算機學院《數據結構》實驗報告書

折半查找:

五.[排序算法設計] 1.問題描述

本次實驗只要是排序算法,主要的排序算法有直接插入排序,折半插入排序,Shell排序,冒泡排序,快速排序,簡單選擇排序,堆排序,二路歸并排序,基數排序。算法的好壞只要是有算法的平均時間,輔助空間,穩定性決定的。不同的算法,適用于不同的情況,本次實驗只要是比較不同排序算法的好壞。下面將介紹幾種排序算法。

2.算法實現

直接插入排序:

for(i=1;i

} temp=a[i];j=i-1;while(j>=0&&a[j]>temp)j--;a[k]=a[k-1];for(k=i;k>j+1;k--)a[j+1]=temp;冒泡排序改進:

數據結構 第 8 頁 安徽工業大學計算機學院《數據結構》實驗報告書

for(i=Max_Size-1;i>=0;i--)//篩選

{

} Change=0;for(j=0;j

} if(Change==0)break;count++;if(a[j]>a[j+1])//交換 {

} temp=a[j];a[j]=a[j+1];a[j+1]=temp;Change=1;簡單選擇排序:

for(i=0;i

} min=a[i];tag=i;for(j=i+1;j

} a[tag]=a[i];a[i]=min;if(min>a[j]){

} min=a[j];tag=j;二路歸并排序:

void merge(int c[],int d[],int l,int m,int r)//將已排好序的數組合并

{

int i=l,j=m+1,k=l,q;

while((i<=m)&&(j<=r))數據結構

第 9 頁

安徽工業大學計算機學院《數據結構》實驗報告書

if(c[i]<=c[j])

d[k++]=c[i++];

else d[k++]=c[j++];

if(i>m)

for(q=j;q<=r;q++)

d[k++]=c[q];

else

for(q=i;q<=m;q++)

d[k++]=c[q];

for(i=l;i<=r;i++)

c[i]=d[i];

} void mergePass(int x[],int y[],int s,int n){

int i=0,j;

while(i<=n-2*s)

{

merge(x,y,i,i+s-1,i+2*s-1);

i=i+2*s;

}

if(i+s

merge(x,y,i,i+s-1,n-1);

else

for(j=i;j

y[j]=x[j];}

void Mer_s(int a[],int b[],int m){

int s=1;

while(s

{

mergePass(a,b,s,m);

s+=s;

mergePass(b,a,s,m);

s+=s;

} } 快速排序:

int Get_sort(int a[],int l,int r)數據結構 第 10 頁 安徽工業大學計算機學院《數據結構》實驗報告書

{

} void Quick(int a[],int l,int r){

} Shell 排序:

d=N/2;

while(d>=1)

{

for(i=0;i

for(j=i+d;j

{

if(a[j]

{

k=j;

temp=a[j];

while(k-d>=0&&temp

{

a[k]=a[k-d];int q=Get_sort(a,l,r);

if(l

} Quick(a,l,q);//q 針對于左邊1位數字時 Quick(a,q+1,r);int t=a[l];

int i=l;int j=r;

while(1){

} a[j]=t;

return j;while(j>=l&&i=t)

j--;a[i]=a[j];if(j<=i)

break;while(i<=r&&i

i++;a[j]=a[i];數據結構 第 11 頁 安徽工業大學計算機學院《數據結構》實驗報告書

k-=d;

}

a[k]=temp;

}

}

d/=2;

} 運行結果

直接插入排序:

冒泡排序:

簡單選擇排序:

二路歸并排序:

快速排序:

數據結構 第 12 頁 安徽工業大學計算機學院《數據結構》實驗報告書

Shell 排序:

六.實驗總結[心得體會] 通過這許多實驗使我逐步了解了許多關于數據結構的算法設計,看著簡單,平常會眼高手低,不過敢想,敢嘗試,努力就會有收獲啊。我覺得課程設計這種樣式真是需要的,可以學到很多,包括書上的,書外的等等。理論永遠!=實際。

數據結構 第 13 頁

第二篇:實驗7 數據結構

實驗七

稀疏矩陣的實現基本操作

班級:1208341

4學號:1208141姓名:陳峰

一、實驗內容

(1)掌握稀疏矩陣的壓縮存儲;(2)掌握稀疏矩陣的轉置算法;

二、實驗目的

(1)實現上三角陣的壓縮存儲;

(2)用三元組書序表存儲稀疏矩陣,并實現矩陣的轉置;

三、設計思想

(1)創建一個數組;(2)輸入數據;

(3)給定矩陣任一元素的下標;(4)打印給定下標所對應的數據;(5)創建三元組順序表;(6)輸入矩陣中的數據;(7)輸出對應的矩陣;

四、程序源代碼

(1)三元組順序表存儲稀疏矩陣并實現矩陣的轉置;

#include #include

# define MAXSIZE 100 # define MAXRC 10

struct Triple {

int i,j;

/*該非零元的行下標和列下標*/

int e;};struct TSMtrix {

struct Triple data[MAXSIZE+1];

/*非零元三元組表,data[0]未用*/

int rpos[MAXRC+1];

/*各行第一個非零元的位置表*/

int cpos[MAXRC+1];

/*各列第一個非零元的位置表*/

int num[MAXRC+1];

/*各列非零元的個數*/

int mu,nu,tu;

/*矩陣的行數、列數和非零元個數*/ };

void CreateMtrix(struct TSMtrix *M){ /*創建一個稀疏矩陣*/

int i,elem,col,row,mu,nu,tu;

printf(“please input matrix col,row,unzeroed numbers:n”);

scanf(“%d%d%d”,&mu,&nu,&tu);

M->mu=mu;

M->nu=nu;

M->tu=tu;

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

{

printf(“please input element col,row,value:n”);

scanf(“%d%d%d”,&col,&row,&elem);

if(mu<0 || nu<0 || mu>M->mu || nu>M->nu)

{

printf(“error!”);

i--;

}

else

{

M->data[i].i=col;

M->data[i].j=row;

M->data[i].e=elem;

}

} }

void ShowMtrix(struct TSMtrix M){ /*打印出矩陣*/

int i=1,j=1,dir=1;

printf(“The matrix is:n”);

for(i=1;i<=M.mu;i++)

{

for(j=1;j<=M.nu;j++)

{

if(M.data[dir].i==i && M.data[dir].j==j)

{

printf(“%d

”,M.data[dir].e);

/*存在非零元*/

dir++;

}

else

printf(“0

”);

}

printf(“n”);

} }

void FastTransposeSMtrix(struct TSMtrix M,struct TSMtrix *T){ /*矩陣的快速轉置*/

int t=1,p=1,q,col=M.nu;

T->mu=M.mu;

T->nu=M.nu;

T->tu=M.tu;

if(T->tu)

{

for(col=1;col<=M.nu;col++)

M.num[col]=0;

for(t=1;t<=M.nu;t++)

++M.num[M.data[t].j];

M.cpos[1]=1;

/*找到M中cpos的位置*/

for(col=2;col<=M.nu;col++)

M.cpos[col]=M.cpos[col-1]+M.num[col-1];

for(p=1;p<=M.tu;p++)

{

col=M.data[p].j;

q=M.cpos[col];

T->data[q].i=M.data[p].j;

T->data[q].j=M.data[p].i;

T->data[q].e=M.data[p].e;

++M.cpos[col];

}

} }

main(){

struct TSMtrix M;

struct TSMtrix N;

CreateMtrix(&M);

ShowMtrix(M);

printf(“n”);

FastTransposeSMtrix(M,&N);

ShowMtrix(N);

getch();}

(2)實現矩陣的經典轉置算法并測試;

#include #include #define maxsize 1200 #define Elemtype int //該結構體中存的是數組data[maxsize+1]中的元素的值和行標和列標//

typedef struct { int i,j;Elemtype e;}te;

typedef struct { te data[maxsize+1];//存儲非0元素的數組,該數組是從1開始,所以下面的p從等于1開始// int mu,nu,tu;//mu 表示行數,nu 表示列數,tu 表示該矩陣中非0的個數// }tx;

//向矩陣中輸入元素 int intput(tx &a){

int row,col,p=1;//row 表示元素的行標,col 表示元素的列標,p表示非0元素的計數器//

int temp;

printf(“請輸入矩陣行數:”);

scanf(“%d”,&a.mu);

printf(“請輸入矩陣列數:”);

scanf(“%d”,&a.nu);

printf(“請輸入原始矩陣的每行每列元素:n”);

for(row=1;row<=a.mu;row++)//雙重循環// {

for(col=1;col<=a.nu;col++)

{

scanf(“%d”,&temp);

if(temp!=0)

{

a.data[p].i=row;

a.data[p].j=col;

a.data[p].e=temp;

p++;

}

a.tu=p;

}

printf(“n”);

}

return 0;}

//輸出上面的矩陣

int output(tx &a){

int row,col;

int p=1;

printf(“輸出原始矩陣:n”);

for(row=1;row<=a.mu;row++)

{

for(col=1;col<=a.nu;col++)

{

if(row==a.data[p].i && col==a.data[p].j)

{

printf(“t%d”,a.data[p].e);

p++;

}

else

//剩余的輸出0//

printf(“t%d”,0);

}

printf(“n”);//換行符的位置//

}

return 0;}

//定義了一個新的矩陣b// int transpose(tx a,tx &b)

{

int row,col;

//找出非0元素//

int p,q=1;

b.mu=a.nu;//矩陣b的行數等于矩陣a的列數//

b.nu=a.mu;//矩陣b的列數等于矩陣a的行數//

b.tu=a.tu;//非0元素的個數///

if(a.tu!=0)//判斷是否有非0元素// {

//雙重循環//

for(col=1;col<=a.nu;col++)

// 該循環是以列循環目的是:把非0元素中列標小的元素從頭排列//

{

for(p=1;p<=a.tu;p++){

if(a.data[p].j==col)

//循環非0數組中的元素,并找出a.data[p].j等于當時的a矩陣在中的col// { //把矩陣a中非0元素的行標和列標等于矩陣b非0元素的列標和行標//

b.data[q].i=a.data[p].j;

b.data[q].j=a.data[p].i;

b.data[q].e=a.data[p].e;

q++;

} }

}

printf(“n”);

}

return 0;}

//輸出轉置后的矩陣

int outputtranspose(tx &b){

int q=1;

int row,col;

printf(“輸出轉置后的矩陣:n”);

for(row=1;row<=b.mu;row++)

{

for(col=1;col<=b.nu;col++)

{

if(row==b.data[q].i && col==b.data[q].j)//找出b矩陣非0元素//

{

printf(“t%d”,b.data[q].e);

q++;

}

else

printf(“t%d”,0);//剩余的輸出0//

}

printf(“n”);

}

return 0;}

void main(){ tx a,b;intput(a);output(a);transpose(a,b);outputtranspose(b);}

五、調試及測試數據

(1)三元組順序表存儲稀疏矩陣并實現矩陣的轉置;

(2)實現矩陣的經典轉置算法并測試;

六、實驗總結

在本實驗中,老師給出了“三元組順序表存儲稀疏矩陣并實現矩陣的轉置”的完整實驗代碼供我們參考。通過對參考例子的代碼的理解,看懂之后程序代碼之后就能比較輕松地寫出題目的代碼。在本次實驗中能夠清楚的知道要做什么,從哪里開始做,怎么做,思路很清晰。經過編程,學會了串的操作與實現,并且對C++也有了新的認識。

第三篇:《數據結構》實驗指導書

《數據結構》實驗(訓)指導書

電氣與信息工程學院實驗中心

前 言

《數據結構》是計算機相關專業的一門核心基礎課程,也是很多高校研究生入學考試專業課必考課程之一。它主要介紹線性結構、樹型結構、圖形結構三種邏輯結構元素的存儲實現,在此基礎上介紹一些典型算法及時、空效率分析。這門課程的主要任務是培養學生的算法分析、設計能力及良好的程序設計習慣。通過學習,要求學生能夠掌握典型算法的設計思想及程序實現,能夠根據實際問題選取合適的存儲方案,設計出簡潔、高效、實用的算法,為后續課程的學習及軟件開發打下良好的基礎。學習這門課程,習題和實驗是兩個關鍵環節。學生理解算法的最佳途徑是上機實驗。因此,實驗環節的好壞是學生能否學好《數據結構》的關鍵。為了更好地配合學生實驗,特編寫該實驗指導書。

一、實驗目的、要求和任務

計算機編程中加工處理的對象是數據,而數據具有一定的組織結構,所以學習編寫計算機程序僅僅了解計算機語言是不夠的,還必須掌握數據組織、存儲和運算的一般方法,這是數據結構課程中學習和研究的內容。由于數據結構的原理和算法較抽象,而該課程一般在本科低年級開設,對于計算機程序設計知識的初學者,理解和掌握其中的原理就顯得較為困難。

1.熟練掌握C語言的編輯、編譯、調試程序。2.會書寫類C語言的算法,并將算法轉變為程序實現。

3.正確理解各種數據結構的邏輯特性和存儲表示和基本操作的算法實現。4.有較強的邏輯分析能力。

5.針對問題的不同選擇合適的數據結構,提高算法設計的能力和動手實驗的技能。

6.學會分析研究計算機加工的數據結構的特性,以便為應用設計的數據選擇適當的邏輯結構、存儲結構及其相應的算法,并初步掌握算法的時間分析和空間分析的技術。

7.本課程的學習過程也是復雜程序設計的訓練過程,要求學生編寫的程序結構清楚、正確易讀,符合軟件過程的規范,從而培養學生的數據抽象能力。

8.通過若干數據結構應用實例,引導學生學習數據類型的使用,為今后學習面向對象的程序做一些鋪墊。

二、實驗基本內容及學時分配

為了達到實驗目的,本課程安排了4個實驗單元,訓練的重點在于基本的數據結構,而不是強調面面俱到。各實驗單元與教科書的各章只具有粗略的對應關系,一個實驗題常常涉及到幾部分教學內容。總學時:8學時。

1、線性表(2學時)

(1)熟悉線性表的基本運算在兩種存儲結構(順序結構和鏈式結構)上的實現;(2)以線性表的各種操作(建立、插入、刪除等)的實現為重點;

(3)通過本次實驗幫助學生提高C語言的編程能力(特別是函數參數、指針類型、鏈表的使用)。

2、數組和廣義表(2學時)(1)掌握稀疏矩陣的壓縮存儲

(2)掌握稀疏矩陣的轉置算法

3、樹與二叉樹(2學時)

常見的二叉樹遍歷算法有先序遍歷,中序遍歷和后序遍歷算法。實現簡單的先序遍歷,中序遍歷和后序遍歷算法。

4、排序(2學時)

常見的內部排序算法,插入類排序算法,如直接插入排序和希爾排序;交換類排序算法,如冒泡排序和快速排序;選擇類排序算法,如簡單選擇排序、樹形選擇類排序和堆排序。實冒泡排序或者直接插入排序算法。

三、說明

該課程采用理論與實踐相結合的教學方法,集知識性與趣味性于一體,達到良好的教學效果。硬件要求:在多媒體教室講解及演示。為保證教學順利進行,要求實驗室提供電腦等設備。學生每次上機實驗都必須遵守實驗室的有關規定。

四、實驗報告規范 實驗報告的內容包括:

1、實驗目的:說明實驗所驗證的知識點。

2、需求分析:以無歧義的陳述說明程序設計的任務、約束條件、輸入輸出要求、對功能的規定及模型。

3、邏輯設計:說明本程序中用到的所有抽象的數據類型的定義、主程序的流程以及各程序模塊之間的層次調用關系。

4、詳細設計:邏輯設計中定義的所有數據類型的實現,核心算法的設計描述、人機界面設計、函數之間調用關系的描述,主要功能的算法框架,測試數據設計。

5、測試分析:測試結果的分析與討論,測試過程中遇到的主要問題及采取的解決措施。

6、心得:軟件設計與實現過程中的經驗與體會,進一步改進的設想。

7、程序清單:源程序中應有足夠的注釋。如果提交源程序軟盤,列出程序文件名。

五、如何提高上機效率

為了提高上機的效率,真正達到實驗目的,要求同學做好實驗前的準備工作,寫好實驗預習報告,即實驗報告規范中的1)、2)、3)、4)部分,編寫好程序,并用一組測試數據手工執行程序靜態檢查程序是否有錯,通過閱讀、執行程序或給別人講解自己的程序而深入全面地理解程序邏輯,提高程序的正確性。對C語言程序不熟悉的同學,上機時最好帶上C語言程序設計的教材,以備查閱。調試中遇到問題,應認真分析,確定可疑點,設置調試斷點或輸出斷點處變量的值,以便發現問題,迅速排除問題,加快調試速度。

實驗室要求:

不能曠課,不遲到,不穿拖鞋進實驗室

實驗需預習報告(不能單純抄寫,預習程序代碼)實驗報告(總結,注釋,實驗結果)

目 錄

實驗一 線性表實驗(設計性實驗)..........................................4 實驗二 數組和廣義表實驗(設計性實驗)....................................6 實驗三 樹與二叉樹(設計性實驗)..........................................8 實驗四 排序(設計性實驗)................................................9

實驗一

線性表實驗(設計性實驗)

一、實驗目的

1.熟悉C語言的上機環境,進一步掌握C語言的結構特點。2.掌握線性表的順序存儲結構的定義及C語言實現。

3.掌握線性表的鏈式存儲結構——單鏈表的定義及C語言實現。4.掌握線性表在順序存儲結構即順序表中的各種基本操作。5.掌握線性表在鏈式存儲結構——單鏈表中的各種基本操作。

二、實驗內容

1.順序線性表的建立、插入及刪除。2.鏈式線性表的建立、插入及刪除。

三、實驗儀器設備與器材 上機電腦

四、實驗步驟

1.建立含n個數據元素的順序表并輸出該表中各元素的值及順序表的長度。

2.利用前面的實驗先建立一個順序表L={21,23,14,5,56,17,31},然后在第i個位置插入元素68。

3.建立一個帶頭結點的單鏈表,結點的值域為整型數據。要求將用戶輸入的數據按尾插入法來建立相應單鏈表。

五、實驗提示

1.由于C語言的數組類型也有隨機存取的特點,一維數組的機內表示就是順序結構。因此,可用C語言的一維數組實現線性表的順序存儲。

在此,我們利用C語言的結構體類型定義順序表: #define MAXSIZE 1024 typedef int elemtype;/*

線性表中存放整型元素 */ typedef struct { elemtype vec[MAXSIZE];int len;/*

順序表的長度 */ }sequenlist;將此結構定義放在一個頭文件sqlist.h里,可避免在后面的參考程序中代碼重復書寫,另外在該頭文件里給出順序表的建立及常量的定義。

2.注意如何取到第i個元素,在插入過程中注意溢出情況以及數組的下標與位序(順序表中元素的次序)的區別。

3.單鏈表的結點結構除數據域外,還含有一個指針域。用C語言描述結點結構如下:

typedef int elemtype;typedef struct node { elemtype data;//數據域

struct node *next;//指針域

}linklist;

注意結點的建立方法及構造新結點時指針的變化。構造一個結點需用到C語言的標準函數malloc(),如給指針變量p分配一個結點的地址:

p=(linklist *)malloc(sizeof(linklist));該語句的功能是申請分配一個類型為linklist的結點的地址空間,并將首地址存入指針變量p 中。當結點不需要時可以用標準函數free(p)釋放結點存儲空間,這時p為空值(NULL)。

六、實驗總結與思考

1.如果按由表尾至表頭的次序輸入數據元素,應如何建立順序表。2.在main函數里如果去掉L=&a語句,會出現什么結果?

實驗二

數組和廣義表實驗(設計性實驗)

一、實驗目的

1.掌握稀疏矩陣的壓縮存儲 2.掌握稀疏矩陣的轉置算法

二、實驗內容

1.實現上三角陣的壓縮存儲。

2.用三元組順序表存儲稀疏矩陣,并實現矩陣的轉置。

三、實驗儀器設備與器材 上機電腦

四、實驗步驟

1.創建一個數組。2.輸入數據

3.給定矩陣任一元素的下標,4.打印給定下標所對應的數據。5.創建三元組順序表。?a22 7.A輸出對應的矩陣。??

21五、實驗提示 ?aaa6.輸入矩陣中的數據。?11?a11??a?313233a2122?1.對于如下對稱矩陣: ??A?aaa?4243?41?a31a32a33??1個位置,a21存入到第二個位置,?將它們存入到一個線性數組中B,不存非零元素,a11存入到第a41a42aija44????aij的位則aij能存到第幾個位置,我們要以用梯形公式算面積。置是它上面的元素之和再加上左邊的元素之和。

它上面的元素之和為((1+(i-1))×(i-1)/2,左邊的元素為(j-1)所以這個元素存儲的位置為k=i(i-1)/2+j-1。

因為矩陣A為對稱矩陣,(另一部分沒有寫出),所以另一部分的元素為 k=j(j-1)/2+i-1.所以存在關系k=i(i-1)/2+j-1(i>j)和k=j(j-1)/2+i-1(i

2.結點結構

struct triple{ int i,j;//非零元的行下標和列下標 elemtype e;//非零元數據} 三元組順序表存儲類型 struct tsmatrix{ triple data[12500];aa?????a44??

int mu,nu,tu;} 三元順序表的轉置 方法:(1)將矩陣行列互換,(2)重排矩陣

六、實驗總結與思考

1.如何存儲三對角陣?

2.如何用行邏輯鏈接順序表及十字鏈表存儲稀疏矩陣?

實驗三

樹與二叉樹(設計性實驗)

一、實驗目的

1.掌握稀疏矩陣的壓縮存儲 2.掌握稀疏矩陣的轉置算法

二、實驗內容

1.練習二叉樹的建立與存儲 2.練習二叉樹的遍歷

三、實驗儀器設備與器材 上機電腦

四、實驗步驟

1.建立自己的頭文件BT.H,內容包括二叉鏈表的結構描述、二叉樹的建立、二叉樹的先序、中序與后序遍歷算法。

2.建立二叉樹,并通過調用函數,,輸出先序遍歷、中序遍歷與后序遍歷的結果。

五、實驗提示

建立二叉樹的代碼如下: BTCHINALR * createbt(){ BTCHINALR *q;struct node1 *s[30];int j,i,x;printf(“建立二叉樹,輸入結點對應的編號和值,編號和值之間用逗號隔開nn”);printf(“i,x = ”);scanf(“%d,%c”,&i,&x);while(i!= 0 && x!= '$')

{q =(BTCHINALR*)malloc(sizeof(BTCHINALR));/*建立一個新結點q*/

q->data = x;q->lchild = NULL;q->rchild = NULL;

s[i] = q;/*q新結點地址存入s指針數組中*/

if(i!= 1)/*i = 1,對應的結點是根結點*/

{j = i / 2;/*求雙親結點的編號j*/

if(i % 2 == 0)s[j]->lchild = q;/*q結點編號為偶數則掛在雙親結點j的左邊*/

else s[j]->rchild = q;} /*q結點編號為奇數則掛在雙親結點j的右邊*/

printf(“i,x = ”);

scanf(“%d,%c”,&i,&x);} return s[1];/*返回根結點地址*/ }

六、實驗總結與思考

1.如何用孩子兄弟表示法存儲樹? 2.熟悉及難赫夫曼樹。

實驗四

排序(設計性實驗)

一、實驗目的

1.掌握常用的排序方法,并掌握用高級語言實現排序算法的方法; 2.深刻理解排序的定義和各種排序方法的特點,并能加以靈活應用; 3.了解各種方法的排序過程及其時間復雜度的分析方法。

二、實驗內容

統計成績

給出n個學生的考試成績表,每條信息由姓名和分數組成,試設計一個算法:

(1)按分數高低次序,打印出每個學生在考試中獲得的名次,分數相同的為同一名次;(2)按名次列出每個學生的姓名與分數。

三、實驗儀器設備與器材 上機電腦

四、實驗步驟

1.定義結構體。2.定義結構體數組。

3.定出主程序,對數據進行排序。

五、實驗提示

#define n 30 typedef struct student { char name[8];int score;} student R[n];main(){ int num, i, j, max, temp;printf(“n請輸入學生成績: n”);for(i=0;iR[max].score)max=j;

if(max!=i){ temp = R[max];R[max]=R[i];R[i]= temp;} if((i>0)&&(R[i].score

六、實驗總結與思考

1.快速排序算法解決本問題。2.較各種排序算法的優缺點及。

3.使用其它排序算法實現該問題(直接插入排序、希爾排序、簡單選擇排序、堆排序等)。

第四篇:《數據結構》實驗指導書

數 據 結 構 實 驗 指 導 書

南京工程學院

信息管理與信息系統教研室

2014年3月

實驗一 線性表操作

一、實驗目的

1.熟悉C語言的上機環境,進一步掌握C語言的結構特點。2.掌握線性表的順序存儲結構的定義及C語言實現。

3.掌握線性表的鏈式存儲結構——單鏈表的定義及C語言實現。4.掌握線性表在順序存儲結構即順序表中的各種基本操作。5.掌握線性表在鏈式存儲結構——單鏈表中的各種基本操作。

二、實驗內容

1.順序線性表的建立、插入及刪除。

2.鏈式線性表的建立、插入及刪除。

三、實驗步驟

1.建立含n個數據元素的順序表并輸出該表中各元素的值及順序表的長度。2.利用前面的實驗先建立一個順序表L={21,23,14,5,56,17,31},然后在第i個位置插入元素68。

3.建立一個帶頭結點的單鏈表,結點的值域為整型數據。要求將用戶輸入的數據按尾插入法來建立相應單鏈表。

四、實現提示

1.由于C語言的數組類型也有隨機存取的特點,一維數組的機內表示就是順序結構。因此,可用C語言的一維數組實現線性表的順序存儲。

在此,我們利用C語言的結構體類型定義順序表: #define MAXSIZE 1024 typedef int elemtype;/* 線性表中存放整型元素 */ typedef struct { elemtype vec[MAXSIZE];int len;/* 順序表的長度 */ }sequenlist;將此結構定義放在一個頭文件sqlist.h里,可避免在后面的參考程序中代碼重復書寫,另外在該頭文件里給出順序表的建立及常量的定義。

2.注意如何取到第i個元素,在插入過程中注意溢出情況以及數組的下標與位序(順序表中元素的次序)的區別。

3.單鏈表的結點結構除數據域外,還含有一個指針域。用C語言描述結點結構如下:

typedef int elemtype;typedef struct node { elemtype data;//數據域

struct node *next;//指針域

}linklist;注意結點的建立方法及構造新結點時指針的變化。構造一個結點需用到C語言的標準函數malloc(),如給指針變量p分配一個結點的地址:

p=(linklist *)malloc(sizeof(linklist));該語句的功能是申請分配一個類型為linklist的結點的地址空間,并將首地址存入指針變量p 中。當結點不需要時可以用標準函數free(p)釋放結點存儲空間,這時p為空值(NULL)。

五、思考與提高

1.如果按由表尾至表頭的次序輸入數據元素,應如何建立順序表。2.在main函數里如果去掉L=&a語句,會出現什么結果?

實驗二

棧和隊列的應用

一、實驗目的

1.掌握棧的順序表示和實現 2.掌握隊列的鏈式表示和實現

二、實驗內容

1.編寫一個程序實現順序棧的各種基本運算。2.實現隊列的鏈式表示和實現。

三、實驗步驟

1.順序棧(1)初始化順序棧;(2)插入元素(3)刪除棧頂元素(4)取棧頂元素(5)遍歷順序棧(6)置空順序棧 2.鏈隊列

(1)初始化并建立鏈隊列(2.)入鏈隊列(3)出鏈隊列(4)遍歷鏈隊列

四、實現提示

1./*定義順序棧的存儲結構*/ typedef struct { ElemType stack[MAXNUM];int top;}SqStack;

/*初始化順序棧函數*/ void InitStack(SqStack *p)

{q=(SqStack*)malloc(sizeof(SqStack));/*申請空間*/} /*入棧函數*/ void Push(SqStack *p,ElemType x){if(p->toptop=p->top+1;/*棧頂+1*/ p->stack[p->top]=x;} /*數據入棧*/ } /*出棧函數*/ ElemType Pop(SqStack *p){x=p->stack[p->top];/*將棧頂元素賦給x*/ p->top=p->top-1;} /*棧頂-1*/ /*獲取棧頂元素函數*/ ElemType GetTop(SqStack *p){ x=p->stack[p->top];} /*遍歷順序棧函數*/ void OutStack(SqStack *p){ for(i=p->top;i>=0;i--)printf(“第%d個數據元素是:%6dn”,i,p->stack[i]);} /*置空順序棧函數*/ void setEmpty(SqStack *p){ p->top=-1;} 可參考代碼: #include “stdio.h” #define StackSize 100 typedef int ElemType;main(){

SqStack S;

ElemType e;

int N;

/*初始化順序棧*/ /*入棧*/ /*出棧*/ /*遍歷順序棧*/ getch();}

2./*定義鏈隊列*/ typedef struct Qnode { ElemType data;struct Qnode *next;}Qnodetype;typedef struct { Qnodetype *front;Qnodetype *rear;}Lqueue;

/*初始化并建立鏈隊列函數*/ void creat(Lqueue *q)

{ h=(Qnodetype*)malloc(sizeof(Qnodetype));/*初始化申請空間*/ h->next=NULL;q->front=h;q->rear=h;for(i=1;i<=n;i++)*利用循環快速輸入數據*/ { scanf(“%d”,&x);Lappend(q,x);} /*利用入鏈隊列函數快速輸入數據*/ } /*入鏈隊列函數*/ void Lappend(Lqueue *q,int x){ s->data=x;s->next=NULL;q->rear->next=s;q->rear=s;} /*出鏈隊列函數*/ ElemType Ldelete(Lqueue *q){ p=q->front->next;q->front->next=p->next;if(p->next==NULL)q->rear=q->front;x=p->data;free(p);} /*釋放空間*/ /*遍歷鏈隊列函數*/ void display(Lqueue *q){ while(p!=NULL)/*利用條件判斷是否到隊尾*/ { printf(“%d-->”,p->data);p=p->next;} } 可參考如下代碼: #include “stdio.h” #define MaxSize 100 typedef int ElemType;main(){

LinkQueue Q;

ElemType e;

/*初始化并建立鏈隊列*/

/*入鏈隊列*/ /*出鏈隊列*/

*遍歷鏈隊列*/

}

DestoryQueue(&Q);

getch();}

五、思考與提高

1.讀棧頂元素的算法與退棧頂元素的算法有何區別? 試寫一個算法,判別讀入的一個以‘@’為結束符的字符序列是否是?回文?。實驗三 樹操作

一、實驗目的

1.通過實驗,掌握二叉樹的建立與存儲 2.通過實驗,掌握二叉樹的遍歷方法

二、實驗內容

1.練習二叉樹的建立與存儲 2.練習二叉樹的遍歷

三、實驗步驟

1.建立二叉鏈表的結構描述、二叉樹的建立、二叉樹的先序、中序與后序遍歷算法。

2.建立二叉樹,并通過調用函數, 輸出先序遍歷、中序遍歷與后序遍歷的結果。

四、實現提示

1.采用遞歸方法建立二叉樹:

首先建立二叉樹的根 結點,然后建立其左右子樹,直到空子樹為止。

2.先序遍歷、中序遍歷與后序遍歷二叉樹。#include #include typedef int Status;typedef char ElemType;typedef struct BiTNode { ElemType data;struct BiTNode *lchild,*rchild;}BiTNode,*BiTree;/*建立二叉樹*/

BiTree CreateBiTree(BiTree &T){ } /*先序遍歷*/ Status PreOrderTraverse(BiTree T){ } /*中序遍歷*/ Status InOrderTraverse(BiTree T){ } /*后序遍歷*/ Status PostOrderTraverse(BiTree T){ }

int main(){ BiTree T;CreateBiTree(T);PreOrderTraverse(T);printf(“n”);/*先序遍歷*/ InOrderTraverse(T);printf(“n”);/*中序遍歷*/ PostOrderTraverse(T);printf(“n”);/*后序遍歷*/

return 0;}

五、思考與提高

編寫遞歸算法,計算二叉樹中葉子結點的數目。

第五篇:數據結構實驗指導書

目 錄

實驗規則················································2 實驗環境················································2 實驗報告要求············································3 實驗一 單鏈表

(一)······································4 實驗二 單鏈表

(二)······································5 實驗三 棧···············································6 實驗四 二叉樹···········································7 實驗五 最短路徑·········································8 實驗六 內部排序·········································9

實 驗 規 則

為了順利完成實驗教學任務,確保人身、設備的安全,培養嚴謹、踏實、實事求是的科學作風和愛護國家財產的優良品質,特制定以下實驗規則:

1、實驗前必須充分預習,完成指定的預習任務。預習要求如下:

(1)認真閱讀指導書,進行必要的設計與計算。(2)熟悉實驗內容。

(3)預先復習,并按要求編寫程序。(4)未完成預習任務者不得進入實驗室。

2、遵守以下紀律:

(1)在實驗室不得做和實驗無關的事情。

(2)進行任課老師指定內容以外的實驗,必須經指導教師同意。(3)遵守紀律,不遲到。

(4)保持實驗室內安靜、整潔,愛護公物,不許亂寫亂畫。

實 驗 環 境

本實驗在386以上的微機上進行,運行環境為VC6.0。

實驗報告要求

1、實驗題目 2.實驗目的 3.實驗環境

4.實驗內容與完成情況(可以附上自主設計的源程序)5.出現的問題及對問題的解決方案 6.實驗思考:(學生對本次實驗的收獲的總結)

實驗一 單鏈表

(一)一、實驗目的

掌握線性表的鏈式存儲結構及其基本操作。

二、預習要求

1、看懂書上的算法,深入理解鏈表的物理存儲模式和邏輯模式。

2、根據要求,編寫程序準備上機調試。

三、實驗內容

實現一個簡單的學生信息管理系統,該系統的功能有:

1、利用單鏈表建立學生基本信息表

2、瀏覽每個學生的信息

3、根據學號查詢某個學生的基本信息

4、添加學生信息到單鏈表中

5、刪除一個學生的信息

四、實現提示

設計結點的結構體類型,包括學生的學號、姓名、年齡、性別;要求設計一個簡單的菜單界面,根據需要選擇所要進行的操作;構造函數,每一個函數實現上述的一個功能。

實驗二 單鏈表

(二)一、實驗目的

掌握線性表的鏈式存儲結構及其基本操作。

二、預習要求

1、看懂書上的算法,深入理解鏈表的物理存儲模式和邏輯模式。

2、根據要求,編寫程序準備上機調試。

三、實驗內容

1、實現單鏈表的就地逆置。

2、建立兩個非遞減有序單鏈表,然后合并成一個非遞減鏈表。

3、建立兩個非遞減有序單鏈表,然后合并成一個非遞增鏈表。

4、編寫一個主函數,調試上述算法。

四、選做題、思考題

1、如何用帶表頭結點的單鏈表作為多項式的存儲表示,實現兩個多項式的相加。

2、約毖夫環的實現。

3、如何利用文件實現學生信息的存取。

實驗三 棧

一、實驗目的

深入了解并掌握棧的特性及其在實際中的應用;熟練掌握棧的算法實現;運用棧操作求解實際問題。

二、預習要求

1、看懂書上的算法,深入理解棧的特性和存儲結構,以便在實際問題背景下靈活運用。

2、根據要求,編寫程序準備上機調試。

三、實驗內容

利用棧實現數據的分類,要求當輸入為偶數時進棧1,當輸入為奇數時進棧2,最后分別從棧1和棧2輸出偶數和奇數序列。

四、實現提示

1、開辟一個連續的存儲空間,實現兩個棧順序存儲空間的共享;分別在兩端設置棧頂指針,并按要求實現棧操作。

2、采用順序存儲實現棧的初始化、入棧、出棧操作。

五、選做題、思考題

1、兩棧空間共享時,棧滿的條件是什么?

2、為停車場編制進行管理的模擬程序(習題集P96,2.1)。

3、編寫程序,利用棧實現表達式求值。

實驗四 二叉樹

一、實驗目的

通過實踐掌握二叉樹的存儲結構和遍歷思想;掌握二叉樹的常見算法的程序實現。

二、預習要求

二叉樹的三種遍歷方法。

三、實驗內容

1、輸入字符序列,建立二叉鏈表。

2、利用棧,編寫非遞歸算法,編程實現二叉樹的中序遍歷。

3、求二叉樹的葉子結點個數。

4、在主函數中設計一個簡單的菜單,分別調試上述算法。

四、選做題、思考題

1、如何實現二叉樹的后序遍歷(非遞歸)。

2、如何求二叉樹的高度。

實驗五 最短路徑(旅游景點導游咨詢模擬)

一、實驗目的

利用圖的最短路徑原理為用戶提供路徑咨詢,掌握求最短路徑的算法并編程實現。

二、預習要求

學習了解圖的存儲結構,掌握求最短路徑的兩種算法。

三、實驗內容

設計一個旅游景點導游模擬程序,為來訪的客人提供景點最短路徑的信息查詢服務,任意選取n城市,構成一個有向帶權圖,圖中頂點表示城市,邊上的權值表示兩點間的距離,根據用戶指定的始點和終點輸出相應的最短路徑。

四、實現提示

咨詢以用戶和計算機的對話方式進行,由用戶輸入起始點和終點,輸出信息:最短路徑是多少?并指出所經過的城市。存儲結構可選用鄰接矩陣。

五、選做題、思考題

1.如何實現對城市信息進行編輯(如:添加或刪除)的功能。

2.用鄰接表作存儲結構,求一指定景點出發,到其余各景點的最短路徑。

實驗六 內部排序

一、實驗目的

直觀感受算法的關鍵字比較次數和關鍵字移動次數。

二、預習要求

1、常見的排序算法(插入排序、交換排序、選擇排序、歸并排序、基數排序等)的思想、特點及其適用條件。

2、根據要求,編寫程序準備上機調試。

三、實驗內容

1、對直接插入排序和簡單選擇排序算法進行關鍵字比較次數和關鍵字移動次數的比較。

2、利用鏈式存儲結構,編寫程序,實現直接插入排序和冒泡排序。

四、實現提示

測試數據可以為幾組典型的數據:正序、逆序、亂序。

五、選做題、思考題

1、快速排序算法的非遞歸實現。

2、結合實驗,理解針對不同待排元素的特點而選擇不同排序方法的重要性。

3、如何對本實驗進行時間、空間的復雜度分析。

下載數據結構實驗_177(共五則范文)word格式文檔
下載數據結構實驗_177(共五則范文).doc
將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
點此處下載文檔

文檔為doc格式


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

相關范文推薦

    數據結構 實驗指導書

    數 據 結 構 實 驗 指 導 書 數據結構實驗指導書 目錄 數據結構實驗指導書 ................................................................................................

    數據結構實驗指導書(精選)

    石 家 莊 鐵 道 大 學 實 驗 任 務 書 課程名稱: 數據結構 實驗學時: 8 適用專業: 自動化類專業 開設學院: 電氣與電子工程學院 石 家 莊 鐵 道 大 學 14學年—15學年第 2學......

    數據結構實驗教案

    第一次實驗 線性表 (一)實驗目的和要求: 1. 熟悉VC集成環境 2. 會定義線性表的順序結構和鏈式結構 3. 熟悉對線性表的基本操作,如插入、刪除等 (二)實驗內容和原理或涉及的知識點(......

    數據結構實驗指導書

    目 錄 實驗一線性表、棧和隊列的基本操作............................................................ 1 實驗二二叉樹的基本操作..........................................

    數據結構實驗2

    1.實驗題目: 編寫一個程序alog-1.cpp,實現順序棧(假設棧中的元素類型為char)的各種基本運算,并在此基礎上設計一個程序exp3-1.cpp,完成如下功能: (1) 初始化棧s; (2) 判斷棧s是否非空; (3)......

    數據結構實驗教案

    實驗一 預備實驗 一、實驗項目的目的和要求: 1. 復習C語言指針的用法 2. 復習C語言結構體的用法 3. 理解時間復雜度分析的基本方法二、實驗內容: 1.用指針方式編寫程序:從鍵盤輸入......

    《數據結構》實驗教學大綱

    《數據結構》實驗教學大綱 實驗1 線性表的基本操作 1實驗目的 (1) 熟練掌握線性表的邏輯特征。 (2)熟練掌握線性表的基本操作在兩種存儲結構上的實現。 2實驗內容 (1) 設計一個......

    數據結構實驗報告7(5篇范文)

    武漢紡織大學《數據結構》實驗報告 班級: 信管 專業 班 姓名: 學號: 實驗時間: 2016 年 5 月 6 日 指導教師: 宋澤源 實驗七:線性查找操作與應用 一、實驗目的: 1、掌握順序查找、......

主站蜘蛛池模板: 99精品国产福久久久久久| 亚洲五月天综合| 国产在线视频国产永久| 野狼第一精品社区| 精品国产综合区久久久久久| 国产精品特级毛片一区二区三区| 久久久久波多野结衣高潮| 亚洲国产精品久久久天堂| 人妻少妇偷人精品无码| 国产美女被遭高潮免费网站| 午夜精品久久久内射近拍高清| 日韩精品无码一区二区三区免费| 亚洲国内精品av五月天| 国产一区二区无码专区| 人妻丰满熟妇av无码片| 亚洲欧洲日产国无高清码图片| 免费观看国产小粉嫩喷水精品午.| 国产白丝无码视频在线观看| 九九99热久久精品在线6| 色综合久久婷婷88| 国内精品乱码卡一卡2卡麻豆| 欧美国产一区二区三区激情无套| 玖玖资源站最稳定网址| 韩国专区福利一区二区| 久久人人爽人人爽人人片av不| 动漫av纯肉无码免费播放| 国产亚洲人成网站观看| 真实国产乱子伦精品视频| 国产欧美精品一区二区三区四区| 亚洲精品亚洲人成在线观看| 中文人妻熟女乱又乱精品| 少妇熟女视频一区二区三区| 亚洲精品成a人在线观看| 99久久国产综合精麻豆| 国产精品熟女视频一区二区| 亚洲精品久久久一二三区| 日本成片区免费久久| 国产乱子伦一区二区三区| 国产精品调教视频一区| 欧美性猛交xxxx免费看蜜桃| 欧洲少妇性喷潮|