数据结构实验报告20xx

时间:2024.4.27

《数 据 结 构》实 验 报 告

专 业

班 级

姓 名

学 号 学 期 指导老师

成绩:

教师评语:

数据结构实验报告20xx

学号: 姓名: 所在系: 班级: 实验名称: 线性结构基本算法的实现 实验日期 实验指导教师 刘勇 实验机房 ------------------------------------------------------------------------------------------------------

1. 实验目的:

(1) 掌握线性表顺序存储结构的基本操作:插入、删除、查找;

(2) 掌握线性表链式结构的基本操作:插入、删除、合并等运算;

(3)掌握栈和队列基本运算的算法;

(4)掌握稀疏矩阵的压缩存储的算法。

2. 实验内容:

(1)实现顺序表的创建、插入、删除和查找的操作;

(2)实现单链表 插入、删除、合并的操作;

(3)实现2个有序线性表的合并;

(4)利用顺序栈实现括号匹配的算法;

(5)实现顺序队列各种基本运算的算法;

(6)实现链栈各种基本运算的算法;(选做)

(7)实现链队列各种基本运算的算法;(选做)

(8)实现稀疏矩阵压缩存储的算法。

3.算法设计(编程思路或流程图或源代码)

内容:

1、 顺序表的插入和删除

2、 有序单链表的合并

3、 数制转换的算法实现

4、 快速转置算法的实现

4.程序调试(实验数据记录——根据程序要求输入几组不同数据,记录程序运行结果,并分析结果,分析程序运行中出现的主要错误。或对其他程序环境的使用情况的记录。注:必须认真书写)

5.讨论(通过实验的一些体会、学会的知识和技能等)

学号: 姓名: 所在系: 班级: 实验名称: 二叉树的基本应用 实验日期 实验指导教师 刘勇 实验机房 ------------------------------------------------------------------------------------------------------

2. 实验目的:

(1) 理解树这种数据结构。

(2)掌握二叉树二叉链表这种存储结构。

(3)完成二叉树各种基本运算的算法。

2. 实验内容:

(1)实现二叉树创建的算法。

(2)实现二叉树各种遍历算法。

(3)实现二叉树其他操作的算法,包括:统计叶子结点的个数、求二叉树的深度、线索二叉树等。

3.算法设计(编程思路或流程图)

1、 二叉树创建的算法

2、 #include <stdio.h>

3、 #include <stdlib.h>

4、 #include <malloc.h>

5、 #define MAX 20

6、 #define OK 1

7、 #define ERROR 0

8、 #define NULL 0

9、 #define OVERFLOW 0

10、 typedef char TElemType;

11、 typedef int Status;

12、 typedef struct BiTNode

13、 {

14、 TElemType data;

15、 struct BiTNode *lchild,*rchild;

16、 }BiTNode,*BiTree;

17、 BiTree CreateBiTree(BiTree T)

18、 {

19、

20、

21、

22、

23、

24、

25、

26、

27、

28、

29、

30、

31、

32、

33、

34、

35、

36、

37、

38、

39、

40、

41、

42、

43、

44、

45、

46、

47、

48、

49、

50、

51、

52、 char ch; scanf("%c",&ch); if(ch=='#') T=NULL; else { T=(BiTNode*)malloc(sizeof(BiTNode)); if(!T) exit(OVERFLOW); T->data=ch; T->lchild=CreateBiTree(T->lchild); T->rchild=CreateBiTree(T->rchild); } return T; } void LevelOrder(BiTree T) { BiTree Queue[MAX],b; int front,rear; front=rear=0; if(T) { Queue[rear++]=T; while(front!=rear) { b=Queue[front++]; printf("%2c",b->data); if(b->lchild!=NULL) Queue[rear++]=b->lchild; if(b->rchild!=NULL) Queue[rear++]=b->rchild; } } }

53、 叶子结点统计的算法 54、

55、

56、

57、

58、 #include <stdio.h> #include <stdlib.h> #include <malloc.h> #define MAX 20 #define OK 1

59、 60、 61、 62、 63、 64、 65、 66、 67、 68、 69、 70、 71、 72、 73、 74、 75、 76、 77、 78、 79、 80、 81、 82、 83、 84、 85、 86、 87、 88、 89、 90、 91、 92、 93、 94、 95、 96、 97、 98、

99、 #define ERROR 0 #define NULL 0 #define OVERFLOW 0 typedef char TElemType; typedef int Status; typedef struct BiTNode { TElemType data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree; BiTree CreateBiTree(BiTree T) { char ch; scanf("%c",&ch); if(ch=='#') T=NULL; else { T=(BiTNode*)malloc(sizeof(BiTNode)); if(!T) exit(OVERFLOW); T->data=ch; T->lchild=CreateBiTree(T->lchild); T->rchild=CreateBiTree(T->rchild); } return T; } void LevelOrder(BiTree T) { BiTree Queue[MAX],b; int front,rear; front=rear=0; if(T) { Queue[rear++]=T; while(front!=rear) { b=Queue[front++]; printf("%2c",b->data); if(b->lchild!=NULL) Queue[rear++]=b->lchild;

100、

101、

102、

103、

104、

105、

106、

107、

108、

109、

110、

111、

112、

113、

114、

115、

116、

117、

118、

119、

120、

121、

122、

123、

124、

125、

126、

127、

128、

129、

130、

131、

132、

133、

134、

135、

136、

137、 if(b->rchild!=NULL) Queue[rear++]=b->rchild; } } } ***************************************************** #include <stdio.h> #include "BiTNode.h" int leafcount(BiTree bt) {/*统计二叉树bt中叶子结点个数*/ int n; if(bt==NULL) n=0; else if(bt->lchild==NULL&&bt->rchild==NULL) n=1; else n=leafcount(bt->lchild)+leafcount(bt->rchild); /*二叉树叶子结点数等于左·右子树的叶子结点数之和*/ return n; } void main() { BiTree T=NULL; int m; printf("*******构造一颗二叉树并统计叶子结点的个数*******\n"); printf("请输入所构造的二叉树的结点序列:"); } T=CreateBiTree(T); if(T) { printf("二叉树建立成功!以层序遍历输出所构造的二叉树\n"); LevelOrder(T); m=leafcount(T); printf("\n该二叉树的叶子结点数是:%d\n",m); } else printf("二叉树建立不成功!!!\n");

138、 二叉树深度统计算法 139、 #include <stdio.h>

140、 141、 142、 143、 144、 145、 146、 147、 148、 149、 150、 151、 152、 153、 154、 155、 156、 157、 158、 159、 160、 161、 162、 163、 164、 165、 166、 167、 168、 169、 170、 171、 172、 173、 174、 175、 176、 177、 178、 179、

180、 #include <stdlib.h> #include <malloc.h> #define MAX 20 #define OK 1 #define ERROR 0 #define NULL 0 #define OVERFLOW 0 typedef char TElemType; typedef int Status; typedef struct BiTNode { TElemType data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree; BiTree CreateBiTree(BiTree T) { char ch; scanf("%c",&ch); if(ch=='#') T=NULL; else { T=(BiTNode*)malloc(sizeof(BiTNode)); if(!T) exit(OVERFLOW); T->data=ch; T->lchild=CreateBiTree(T->lchild); T->rchild=CreateBiTree(T->rchild); } return T; } void LevelOrder(BiTree T) { BiTree Queue[MAX],b; int front,rear; front=rear=0; if(T) { Queue[rear++]=T; while(front!=rear) {

181、 182、 183、 184、 185、 186、 187、 188、 189、 190、 191、 192、 193、 194、 195、 196、 197、 198、 199、 200、 201、 202、 203、 204、 205、 206、 207、 208、 209、 210、 211、 212、 213、 214、 215、 216、 217、 218、 219、 220、

221、 b=Queue[front++]; printf("%2c",b->data); if(b->lchild!=NULL) Queue[rear++]=b->lchild; if(b->rchild!=NULL) Queue[rear++]=b->rchild; } } } ***************************************************** #include <stdio.h> #include "BiTNode.h" int depth(BITree T) {/*求二叉树深度*/ int dep1,dep2; if (T==NULL) return ERROR; else { dep1=depth(T->lchild); dep2=depth(T->rchild); return dep1>dep2?dep1+1:dep2+1; }//else }/*depth*/ void main() { BiTree T=NULL; printf("****** 构造一颗二叉树并对其进行深度统计 ******\n"); printf(" 请输入所构造二叉树的节点序列 "); T=CreateBiTree(T);/*建立一颗二叉树*/ if(T) { printf("二叉树建立成功!并以层序遍历输出二叉树\n"); LevleOrder(T); printf("\n二叉树的深度是:%d\n",depth(T)); } else

222、 printf("二叉树建立不成功!\n"); 223、

224、 }

4.程序调试(实验数据记录——根据程序要求输入几组不同数据,记录程序运行结果,并分析结果,分析程序运行中出现的主要错误。或对其他程序环境的使用情况的记录。注:必须认真书写)

数据结构实验报告20xx

数据结构实验报告20xx

5.讨论(通过实验的一些体会、学会的知识和技能等)

学号: 姓名: 所在系: 班级: 实验名称: 图的基本实现与应用 实验日期 实验指导教师 刘勇 实验机房 ------------------------------------------------------------------------------------------------------

3. 实验目的:

(1) 理解图这种数据结构。

(2) 掌握邻接矩阵、邻接表这种存储结构的实现方法。

(3) 完成图的遍历的算法。

2. 实验内容:

(1)实现图的邻接矩阵与邻接表结构的转换。(必做)

(2)实现图遍历的算法。(必做)

(3)实现图的拓扑排序的算法。

(4)实现图的最短路径的算法

3.算法设计(编程思路或流程图)

1、 图的邻接矩阵和邻接表创建的算法

2、 #define VEXTYPE int

3、 #define ADJTYPE int

4、 #define MAXLEN 40

5、 #include <stdio.h>

6、 #include <malloc.h>

7、 typedef struct

8、 {

9、 VEXTYPE vexs[MAXLEN];

10、 ADJTYPE arcs[MAXLEN][MAXLEN];

11、 int vexnum,arcnum;

12、 int kind;

13、 }MGRAPH;

14、 typedef struct node3

15、 16、 17、 18、 19、 20、 21、 22、 23、 24、 25、 26、 27、 28、 29、 30、 31、 32、 33、 34、 35、 36、 37、 38、 39、 40、 41、 42、 43、 44、 45、 46、 47、 48、 49、 50、 51、 52、 53、 54、

55、 { int adjvex; struct node3 *next; }EDGENODE; typedef struct { VEXTYPE vextex; EDGENODE *link; int id; }VEXNODE; typedef struct { VEXNODE adjlist[MAXLEN]; int vexnum,arcnum; int kind; }ADJGRAPH; MGRAPH create_mgraph() {/*建立图的邻接矩阵*/ int i,j,k; MGRAPH mg; mg.kind=2; printf("\n\n输入顶点数和边数: "); scanf("%d,%d",&i,&j);fflush(stdin); mg.vexnum=i; mg.arcnum=j; printf ("\n\n"); for (i=0;i<mg.vexnum; i++) { printf("输入顶点%d的值: ",i+1); scanf("%d",&mg.vexs[i]); fflush(stdin); } for(i=0;i<mg.vexnum;i++) for(j=0;j<mg.vexnum;j++) mg.arcs[i][j]=0; for(k=1;k<=mg.arcnum;k++) { printf("输入第%d条边的起始顶点和终止顶点(用逗号隔开):",k); scanf("%d,%d",&i,&j); fflush(stdin); while(i<1||i>mg.vexnum||j<1||j>mg.vexnum)

56、 57、 58、 59、 60、 61、 62、 63、 64、 65、 66、 67、 68、 69、 70、 71、 72、 73、 74、 75、 76、 77、 78、 79、 80、 81、 82、 83、 84、 85、 86、 87、 88、 89、 90、 91、 92、 93、 94、 95、 96、 { printf("输入错,重新输入:"); scanf("%d,%d",&i,&j); mg.arcs[i-1][j-1]=1; mg.arcs[j-1][i-1]=1; return mg; } ADJGRAPH mg_to_adjg(MGRAPH mg) { int i,j,n; ADJGRAPH adjg; EDGENODE *p; n=mg.vexnum; adjg.vexnum=mg.vexnum; adjg.arcnum=mg.arcnum; for(i=0;i<n;i++) { adjg.adjlist[i].vertex=mg.vexs[i]; adjg.adjlist[i].link=NULL; for(j=0;j<n;j++) if(j!=i&&mg.arcs[i][j]==1) { p=(EDGENODE*)malloc(sizeof(EDGENODE)); p->adjvex=j; p->next=adjg.adjlist[i].link; adjg.adjlist[i].link=p; } } return adjg; } void main() {MGRAPH mg; ADJGRAPH adjg; int i,j,n; EDGENODE *p; printf("\n建立图的邻接矩阵并转换为图的邻接链表\n"); mg=create_mgraph();//建立图的邻接矩阵

97、

98、

99、

100、

101、

102、

103、

104、

105、

106、

107、

108、

109、

110、

111、

112、

113、

114、

115、

116、

117、

118、

119、

120、

121、

122、

123、

124、

125、

126、

127、

128、 printf("\n\n图的邻接矩阵显示: \n");//图的邻接矩阵显示 n=mg.vexnum; for(i=0;i<n;i++) { for(j=0;j<n;j++) printf("<%d,%d>[%d]",i+1,j+1,mg.arcs[i][j]); printf("\n"); } adjg=mg_to_adjg(mg);//图的邻接矩阵转换为图的邻接链表 printf("\n"); printf("\n\n图的邻接链表显示: ");//图的邻接链表显示 for(i=0;i<n;i++) { printf("<%d>%d",i,adjg,adjlist[i].vertex); while(p!=NULL) { printf("->%d",p->adjvex); p=p->next; } printf("->NULL"); printf("\n"); } }

129、 图的两种遍历算法 #include <stdio.h>

#include <malloc.h>

#include "graph.h"

int visited[MAXV];

ALGraph *MatTolist(MGraph g) {

int i,j,n=g.vexnum;

ArcNode *p;

ALGraph *G;

G=(ALGraph *)malloc(sizeof(ALGraph));

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

G->adjlist[i].firstarc=NULL;

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

for (j=n-1;j>=0;j--)

if (g.edges[i][j]!=0)

{

p=(ArcNode *)malloc(sizeof(ArcNode)); p->adjvex=j;

p->info=g.edges[i][j];

p->nextarc=G->adjlist[i].firstarc; G->adjlist[i].firstarc=p;

}

G->n=n;

G->e=g.arcnum;

return G;

}

void DispAdj(ALGraph *G)

{

int i;

ArcNode *p;

for (i=0;i<G->n;i++)

{

p=G->adjist[i].firstarc;

if(p!=NULL)

printf("%3d",i);

while (p!NULL)

{

printf("%3d: ",p->adjvex);

p=p->nextarc;

}

printf("\n");

}

}

void DFS(ALGraph *G,int v)

{

ArcNode *p;

visited[v]=1;

printf("%3d",v);

p=G->adjlist[v].firstarc;

whlie (p!=NULL)

{

if(visited[p->adjvex]==0)

DFS(G,p->adjvex);

p=p->nextarc;

}

}

void DFS1(ALGraph *G,int v)

{

int i,visited[MAXV],St[MAXV],top=-1; ArcNode *p;

for (i=0;i<G->n;i++)

visited[i]=0;

printf("%3d",v);

top++;

St[top]=v;

visited[v]=1;

while (top>-1)

{

v=St[top];

p=G->adjlist[v].firstarc;

while (p!=NULL&&visited[p->adjvex}==1) p=p->nextarc;

if(p==NULL)

top--;

else

{

v=p->adjvex;

printf("%3d",v);

visited[v]=1;

top++;St[top]=v;

}

}

printf("\n");

}

void BFS(ALGraph*G,int v)

{

ArcNode *p;

int queue[MAXV],front-0,rear=0;

int visited[MAXV];

int w,i;

for (i=0;i<G->n;i++)

visited[i]=0;

printf("%3d",v);

visited[v]=1;

rear=(rear=1)%MAXV;

queue[rear]=v;

while(front!=rear)

{

front=(front+1)%MAXV; w=queue[front];

p=G->adjlist[w].firstarc; while (p!=NULL)

{

if(visited[p->adjvex]==0) {

printf(%3d",p->adjvex); visited[p->adjvex]=1; rear=(rear+1)%MAXV; queue[rear]=p->adjvex; }

p=p->nextarc;

}

}

printf("\n");

}

void main()

{

int i,j;

MGraph g;

ALGraph *G;

int A[MAXV][5]={

{0,1,1,0,0},

{1,0,0,1,1},

{1,0,0,0,0},

{0,1,0,0,0},

{0,1,0,0,0},

};

g.vexnum=5;

g.arcnum=4;

for(i=0;i<g.vexnum;i++)

} for(j=0;j<g.vexnum;j++) g.edges[i][j]=A[i][j]; GMatToList(g); printf("图G的邻接表:\n"); DispAdj(G); printf("从顶点0开始的DFS(递归算法): \n"); DFS(G,0); printf("\n"); printf("从顶点0开始的DFS(非递归算法): \n"); DFS1(G,0); printf("从顶点0开始的BFS(递归算法): \n"); BFS(G,0);

4.程序调试(实验数据记录——根据程序要求输入几组不同数据,记录程序运行结果,并分析结果,分析程序运行中出现的主要错误。或对其他程序环境的使用情况的记录。注:必须认真书写)

5.讨论(通过实验的一些体会、学会的知识和技能等)

学号: 姓名: 所在系: 班级: 实验名称: 查找与排序 实验日期 实验指导教师 刘勇 实验机房 ------------------------------------------------------------------------------------------------------

4. 实验目的:

(1) 理解查找与排序的各种算法。

(2) 掌握二叉排序树、哈希表查找、简单排序、快速排序的算法

2. 实验内容:

(1)顺序查找的设计与实现。

(2)折半查找的设计与实现。

(3)直接插入排序的设计与实现。

(4)快速排序的设计与实现。

3.算法设计(编程思路或流程图)

(1)

(2)

(3)

(4)

顺序查找的算法 折半查找的算法 直接插入排序算法 快速排序算法

4.程序调试(实验数据记录——根据程序要求输入几组不同数据,记录程序运行结果,并分析结果,分析程序运行中出现的主要错误。或对其他程序环境的使用情况的记录。注:必须认真书写)

5.讨论(通过实验的一些体会、学会的知识和技能等)

更多相关推荐:
数据结构实验报告

实验报告实验课程:数据结构实验项目:实验专业:计算机科学与技术姓名:**学号:***指导教师:**实验时间:20**-12-7重庆工学院计算机学院数据结构实验报告实验一线性表1.实验要求掌握数据结构中线性表的基…

数据结构实验报告(C语言)(强力推荐)

数据结构实验实验内容和目的掌握几种基本的数据结构集合线性结构树形结构等在求解实际问题中的应用以及培养书写规范文档的技巧学习基本的查找和排序技术让我们在实际上机中具有编制相当规模的程序的能力养成一种良好的程序设计...

数据结构实验———图实验报告

数据结构实验报告目的要求掌握图的存储思想及其存储实现掌握图的深度广度优先遍历算法思想及其程序实现掌握图的常见应用算法的思想及其程序实现实验内容键盘输入数据建立一个有向图的邻接表输出该邻接表3在有向图的邻接表的基...

数据结构实验报告格式

数据结构实验报告格式实验11顺序表的基本操作一实验目的1掌握使用VC上机调试线性表的基本方法2掌握线性表的基本操作插入删除查找等运算在顺序存储结构上的实现二实验内容顺序表的基本操作的实现三实验要求1认真阅读和理...

数据结构实验报告全集

数据结构实验报告全集实验一线性表基本操作和简单程序1实验目的1掌握使用VisualC60上机调试程序的基本方法2掌握线性表的基本操作初始化插入删除取数据元素等运算在顺序存储结构和链表存储结构上的程序设计方法2实...

数据结构实验报告5

计算机科学与工程系计算机科学与工程系2计算机科学与工程系附录可包括源程序清单或其它说明includeltiostreamgtincludeltstdiohgtusingnamespacestdtypedefst...

数据结构实验报告[4]

云南大学数据结构实验报告第四次实验学号姓名一实验目的复习线性表的逻辑结构存储结构及基本操作掌握顺序表和带头结点单链表了解有序表二实验内容必做题假设有序表中数据元素类型是整型请采用顺序表或带头结点单链表实现Ord...

数据结构树的实验报告

数据结构实验报告目的要求1掌握二叉树的存储实现2掌握二叉树的遍历思想3掌握二叉树的常见算法的程序实现实验内容1输入字符序列建立二叉链表2中序遍历二叉树递归算法3中序遍历二叉树非递归算法最好也能实现先序后序非递归...

数据结构实验报告

武汉大学国际软件学院实验报告课程名称专业年级姓名学号协作者实验学期课堂时数填写时间月6小结对本次实验的心得体会所遇到的问题及解决方法其他思考和建议7指导教师评语及成绩指导教师依据学生的实际报告内容用简练语言给出...

数据结构第一次上机实验报告

数据结构第一次上机实验报告线性表实验要求1实现顺序表结构的创建插入删除查找等操作2利用上述顺序表操作实现如下程序建立两个顺序表表示的集合集合中无重复的元素并求这样的两个集合的并交和源程序C实现visualstu...

数据结构实验报告(重邮)5个

学号数据结构实验报告学院班级姓名实验一线性链表的实现与操作题目设计一个100位以内的长整数加减运算的程序班级姓名学号完成日期一需求分析1本实验中100位长整数的每位上的数字必须为数字09之间长整数的位数并要求1...

安徽工业大学数据结构实验报告

安徽工业大学计算机学院数据结构实验报告姓名学号班级教师内容线性表基本操作的实现栈的基本操作串的模式匹配二叉树操作图的创建与遍历20xx525实验一线性表基本操作的实现一实验目的1掌握使用TurboC20上机调试...

数据结构实验报告(46篇)