《数据结构实验指导书》.docx
- 文档编号:10911137
- 上传时间:2023-02-23
- 格式:DOCX
- 页数:44
- 大小:30.43KB
《数据结构实验指导书》.docx
《《数据结构实验指导书》.docx》由会员分享,可在线阅读,更多相关《《数据结构实验指导书》.docx(44页珍藏版)》请在冰豆网上搜索。
《数据结构实验指导书》
目录
《数据结构实验》教学大纲1
数据结构上机实验编程指南4
实验一线性表5
实验二栈与队列12
实验三二叉树17
实验四图21
实验五查找27
实验六排序31
《数据结构实验》教学大纲
《DataStructureExperiment》TeachingProgram
课程类别:
必修课适用专业:
计算机应用技术、计算机网络技术学时:
22
教研室主任:
大纲执笔人:
大纲审批人:
一、本实验课的性质、任务与目的
《数据结构》课程是计算机科学与技术专业的一门重要的专业基础课。
通过此实验教学和学生的上机实践,要求学生掌握各种数据结构的具体物理实现方法,掌握用数据结构知识解决实际问题的方法,以达到理论指导实践的目的。
从而进一步提高学生的编程能力、算法设计能力及分析问题、解决问题的能力。
二、本实验课的基本理论
1.线性表存储结构及其基本操作的实现。
2.栈和队列的存储结构及其基本操作的实现。
3.二叉树的存储结构及其基本操作的实现。
4.图的存储结构及其基本操作的实现。
5.各类查找算法的设计
6.各类排序算法的设计
三、实验内容和教学基本要求
序号
实验名称
学
时
实验内容
实验要求
实验
类型
1
线性表
2
(1)顺序表的定义及其相关操作算法的实现;
必做
设计性
(2)链表的定义及其相关算法的实现;
必做
设计性
(3)集合的表示与运算。
选做
综合性
(4)一元多项式的表示与运算
选做
综合性
2
栈与队列
2
(1)顺序栈的定义及其操作算法的实现;
必做
设计性
(2)链式队列定义及其操作算法的实现;
选做
设计性
(3)循环队列定义及其操作算法的实现;
必做
设计性
(4)利用栈实现进制转换
选做
综合性
(5)利用栈实现括号匹配检测
选做
综合性
3
二叉树
2
(1)二叉树的创建、递归遍历及其它基本操作的实现。
必做
设计性
(2)二叉树的创建、非递归遍历及其它基本操作的实现。
选做
设计性
(3)哈夫曼树及哈夫曼编码的算法实现。
选做
综合性
4
图
2
(1)图的邻接矩阵存储方式的实现、图的遍历算法。
必做
设计性
(2)图的邻接矩阵存储方式的实现、图的遍历算法。
必做
设计性
(3)图最小生成树算法
选做
综合性
(4)图的拓扑排序算法
选做
综合性
(5)图的最短路径算法
选做
综合性
5
查找
2
(1)顺序查找算法、二分法查找算法、
必做
设计性
(2)二叉排序树的创建与查找、
选做
设计性
(3)哈希表的造表与查找算法
选做
设计性
(4)班级学生成绩管理(表的存储、相关查找等)
选做
综合性
6
排序
2
(1)直接插入排序算法、SHELL排序算法
必做
设计性
(2)快速排序算法、归并排序算法
选做
设计性
(3)选择排序算法、堆排序算法
必做
设计性
(4)班级学生成绩管理(利用某种排序方法实现按某个或某些关键字排序)
选做
综合性
四、仪器设备配置
每人一台计算机,安装TurboC软件。
五、教学文件与教学形式
1.教学文件
《数据结构(C语言版)》,严蔚敏、吴伟民编著,清华大学出版社,2002.9。
2.教学形式
应用多媒体讲授实验内容、要求及注意事项,上机辅导,最后进行实验总结。
六、考核方法及成绩评定办法
每次完成实验内容,进行总结分析,写出实验报告。
按照实验内容完成情况及实验报告书写情况进行考核,成绩按优、良、中、及格、不及格五级分评定。
数据结构实验指导书
为了更好地帮助同学们做好数据结构实验,在此给出数据结构上机编程的一般思路和程序的基本框架结构。
具体程序结构按先后顺序可分为以下3个部分:
1、预定义常量及类型
对于相关的常量与类型(如状态类型)进行定义,如:
#defineOK1
#defineERROR0
#defineOVERFLOW–2
#defineTRUE1
#defineFALSE0
typedefintStatus;
2、相关数据结构类型定义
此部分包括对所使用的数据结构给出其类型定义,及基本操作函数定义。
(具体内容可参见实验一)
3、主调程序的定义
此部分给出相关的主调程序,在此程序中定义相关数据结构变量,并通过调用其操作函数,实现设计目的。
(具体内容可参见实验一)
实验一线性表
一、实验目的
1.掌握顺序表及其基本操作的实现。
2.掌握链表及其基本操作的实现。
3.掌握利用TC实现数据结构的编程方法。
4.通过上机实践进一步加深对线性表的顺序存储方式及链式存储方式的理解。
5.通过上机实践加强利用数据结构解决实际应用应用问题的能力。
二、实验要求
1.实验前做好充分准备,包括复习第一章、第二章所学内容,事先预习好本次实验内容。
2.实验时记录实验结果,按要求完成各题。
3.实验结束后,给出实验总结与分析并及时给出本次实验的实验报告。
三、实验题目
本次实验给出的选定题目如下表所示。
实验名称
学
时
实验内容
实验要求
实验
类型
线性表
2
(1)顺序表的定义及其相关操作算法的实现;
必做
设计性
(2)链表的定义及其相关算法的实现;
必做
设计性
(3)集合的表示与运算。
选做
综合性
(4)一元多项式的表示与运算
选做
综合性
说明:
(1)实验内容1)与实验内容2)为必做内容。
(2)实验内容3)与实验内容4)为选做内容。
四、实验内容与要求
1、实验题目一:
顺序表的定义及其相关操作算法的实现
要求:
编程实现顺序表的类型定义及顺序表的初始化操作、插入操作、删除操作、取元素操作、输出操作等,并对其进行验证。
2、实验题目二:
链表的定义及其相关操作算法的实现
要求:
编程实现单链表(或双向链表、循环链表)的类型定义及其初始化操作、插入操作、删除操作、取元素操作、输出操作等,并对其进行验证。
3、实验题目三:
集合的表示与运算
要求:
利用题目一或题目二所定义的线性表(顺序表或链表)实现集合的表示及其并、交等运算,并进行验证给出结果。
4、实验题目四:
一元多项式的表示与运算
要求:
利用线性表(顺序表或链表)实现一元多项的类型定义及其相加等等运算,并进行验证给出结果。
五、实验程序示例
1、顺序表实验程序示例
#include"stdio.h"
#include"alloc.h"
/*-------------
(1)预定义常量及类型-----------------*/
#defineOK1
#defineERROR0
#defineOVERFLOW-2
#defineTRUE1
#defineFALSE0
typedefintStatus;
/*-------
(2)顺序表类型及其基本操作函数的定义---------*/
#defineInitSize100
#defineINCR20
typedefintElemType;/*定义元素类型为int类型*/
typedefstruct
{ElemType*Elem;
intLength;
intListSize;
}SqList;/*SqList类型为顺序表类型*/
StatusInitList_sq(SqList&L)/*初始化操作函数定义*/
{L.Elem=(ElemType*)malloc(InitSize*sizeof(ElemType));
if(!
(L.Elem))return(OVERFLOW);
L.Length=0;L.ListSize=InitSize;
returnOK;
}
StatusListInsert_sq(SqList&L,inti,ElemTypee)/*插入操作函数定义*/
{intj;
if(i<1||i>L.Length+1)returnERROR;
if(L.Length>=L.ListSize)
{L.Elem=(ElemType*)malloc((L.ListSize+INCR)*sizeof(ElemType));
if(!
(L.Elem))return(OVERFLOW);
L.ListSize+=INCR;
}
for(j=L.Length-1;j>=i-1;j--)
L.Elem[j+1]=L.Elem[j];
L.Elem[i-1]=e;
L.Length++;
returnOK;
}
voidListOutput_sq(SqListL)/*顺序表输出操作*/
{inti;
for(i=0;i<=L.Length-1;i++)
printf("%6d",L.Elem[i]);
printf("\n");
}
/*其它操作如删除、查找、判空等操作略*/
/*-------------(3)主函数定义--------------------*/
main()
{SqListLa;
inti;
InitList_sq(La);
for(i=0;i<5;i++)ListInsert_sq(La,i+1,2*i);
ListOutput_sq(La);
ListInsert_sq(La,1,999);
ListOutput_sq(La);
ListInsert_sq(La,4,888);
ListOutput_sq(La);
ListInsert_sq(La,La.Length+1,111);
ListOutput_sq(La);
}
2、单链表(带头结头)实验程序示例
#include"stdio.h"
#include"alloc.h"
/*-------------------
(1)预定义常量及类型---------------*/
#defineOK1
#defineERROR0
#defineOVERFLOW-2
#defineTRUE1
#defineFALSE0
typedefintStatus;
/*------------
(2)单链表类型及其基本操作函数的定义------*/
typedefintElemType;/*定义元素类型为int类型*/
typedefstructLnode
{ElemTypedata;
structLnode*next;
}*LinkList;/*LinkList为单链表类型*/
StatusInitList_l(LinkList&L)/*初始化操作函数定义*/
{L=(LinkList)malloc(sizeof(structLnode));
if(!
L)return(OVERFLOW);
L->next=NULL;
returnOK;
}
StatusListInsert_l(LinkList&L,inti,ElemTypee)/*插入操作函数定义*/
{LinkListp,s;
intj;
p=L;j=0;
while(p&&j
if(!
p||j>i-1)returnERROR;
s=(LinkList)malloc(sizeof(structLnode));
s->data=e;
s->next=p->next;
p->next=s;
returnOK;
}
voidListOutput_l(LinkListL)/*输出操作函数定义*/
{LinkListp;
p=L->next;
while(p)
{printf("%6d",p->data);p=p->next;}
printf("\n");
}
/*其它操作如删除、查找、判空等操作略*/
/*-------------(3)主函数定义--------------------*/
main()
{inti;
LinkListLa;
InitList_l(La);
for(i=0;i<5;i++)ListInsert_l(La,i+1,3*i);
ListOutput_l(La);
ListInsert_l(La,1,999);ListOutput_l(La);
ListInsert_l(La,4,888);ListOutput_l(La);
}
3、一元多项式的单链表表示与相加操作的实现程序示例
#include"stdio.h"
#include"alloc.h"
typedefstructPNode
{intcoef;
intexpn;
structPNode*next;
}*POLY;/*POLY为一元多项式的类型*/
voidCreatPoly(POLY&L,intn)/*一元多项式的创建操作,其中n为一元多项式的项数*/
{inti,coef,expn;
POLYp,s;
L=(POLY)malloc(sizeof(structPNode));
L->next=NULL;
p=L;
for(i=1;i<=n;i++)
{printf("input%dthcoef:
",i);
scanf("%d",&coef);
printf("input%dthexpn:
",i);
scanf("%d",&expn);
s=(POLY)malloc(sizeof(structPNode));
s->coef=coef;s->expn=expn;
s->next=NULL;p->next=s;p=s;
}
}
voidOutputPoly(POLYL)/*一元多项式的输出操作*/
{intflag=1;/*flag用来是否为第一项的标识*/
POLYp;
p=L->next;
while(p)
{if(flag){printf("%dX^%d",p->coef,p->expn);flag=0;}
elseprintf("%+dX^%d",p->coef,p->expn);
p=p->next;
}
printf("\n");
}
voidAddPoly(POLYLa,POLYLb,POLY&Lc)/*一元多项式的相加操作,即实现Lc=La+Lb*/
{intx;
POLYpa,pb,pc,s;
Lc=(POLY)malloc(sizeof(structPNode));
Lc->next=NULL;pc=*Lc;
pa=La->next;pb=Lb->next;
while(pa&&pb)
{if(pa->expn
{s=(POLY)malloc(sizeof(structPNode));
s->coef=pa->coef;s->expn=pa->expn;
s->next=NULL;pc->next=s;pc=s;
pa=pa->next;
}
elseif(pa->expn>pb->expn)
{s=(POLY)malloc(sizeof(structPNode));
s->coef=pb->coef;s->expn=pb->expn;
s->next=NULL;pc->next=s;pc=s;
pb=pb->next;
}
else{x=pa->coef+pb->coef;
if(x!
=0)
{s=(POLY)malloc(sizeof(structPNode));
s->coef=x;s->expn=pa->expn;
s->next=NULL;pc->next=s;pc=s;
}
pa=pa->next;pb=pb->next;
}
}
while(pa)
{s=(POLY)malloc(sizeof(structPNode));
s->coef=pa->coef;s->expn=pa->expn;
s->next=NULL;pc->next=s;pc=s;
pa=pa->next;
}
while(pb)
{s=(POLY)malloc(sizeof(structPNode));
s->coef=pb->coef;s->expn=pb->expn;
s->next=NULL;pc->next=s;pc=s;
pb=pb->next;
}
}
main()
{POLYLa,Lb,Lc;
intn;
printf("CreatPolyLa:
\n");
printf("\tInputthenumberofitemsofLa:
");
scanf("%d",&n);
CreatPoly(La,n);
printf("\nLa(x)=");
OutputPoly(La);
printf("CreatPolyLb:
\n");
printf("\tInputthenumberofitemsofLb:
");
scanf("%d",&n);
CreatPoly(Lb,n);
printf("\nLb(x)=");
OutputPoly(Lb);
AddPoly(La,Lb,Lc);
printf("Lc(x)=La(x)+Lb(x)=");
OutputPoly(Lc);
}
实验二栈与队列
一、实验目的
1.掌握栈及其基本操作的实现。
2.掌握队列及其基本操作的实现。
3.进一步掌握利用TC实现数据结构的编程方法。
二、实验要求
1.实验前做好充分准备,包括复习第三章所学内容,事先预习好本次实验内容。
2.实验时记录实验结果,按要求完成各题。
3.实验结束后,给出实验总结与分析并及时给出本次实验的实验报告。
三、实验题目
本次实验给出的选定题目如下表所示。
实验名称
学
时
实验内容
实验要求
实验
类型
栈与队列
2
(1)顺序栈的定义及其操作算法的实现;
必做
设计性
(2)链式队列定义及其操作算法的实现;
选做
设计性
(3)循环队列定义及其操作算法的实现;
必做
设计性
(4)利用栈实现进制转换
选做
综合性
说明:
(1)实验内容1)与实验内容3)为必做内容。
(2)实验内容2)与实验内容4)为选做内容。
四、实验内容与要求
1、实验题目一:
顺序栈的定义及其操作算法的实现
要求:
编程实现顺序栈表的类型定义及顺序表的初始化操作、入栈操作、出栈操作、取栈顶元素操作、输出操作等,并对其进行验证。
2、实验题目二:
链式队列的定义及其相关操作算法的实现
要求:
编程实现链式队列的类型定义及其初始化操作、入队操作、出队操作、取队头操作、输出操作等,并对其进行验证。
3、实验题目三:
循环队列定义及其操作算法的实现
要求:
编程实现循环队列的类型定义及其初始化操作、入队操作、出队操作、取队头操作、输出操作等,并对其进行验证。
4、实验题目四:
利用栈实现进制转换
要求:
利用栈(顺序栈或链式栈)实现进制转换问题
五、实验程序示例
1、顺序栈的定义及其操作算法的实现
#include"stdio.h"
#defineOK1
#defineERROR0
#defineOVERFLOW-2
#defineTRUE1
#defineFALSE0
typedefintStatus;
#defineInit_Size100
#defineINCR20
typedefintElemType;
typedefstruct
{ElemType*Elem;
intTop;
intStackSize;
}SqStack;
StatusInitStack(SqStack&S)
{S.Elem=(ElemType*)malloc(Init_Size*sizeof(ElemType));
if(!
S.Elem)returnOVERFLOW;
S.Top=0;
returnOK;
}
StatusGetTop(SqStackS,ElemType&e)
{if(S.Top==0)returnERROR;
e=S.Elem[S.Top-1];
returnOK;
}
StatusPush(SqStack&S,ElemTypee)
{if(S.Top==S.StackSize)
{S.Elem=(ElemType*)malloc((S.StackSize+INCR)*sizeof(ElemType));
if(!
S.Elem)return(OVERFLOW);
S.StackSize+=INCR;
}
S.Elem[S.Top++]=e;
returnOK;
}
StatusPop(SqStack&S,ElemType&e)
{if(!
S.Top)
{printf("stackisemptywhenpoping\n");return(ERROR);}
e=S.Elem[--S.Top];
returnOK;
}
voidStackOutput(SqStackS)
{inti;
for(i=0;i printf("%d",S.Elem[i]); printf("\n"); } main() {SqStackS; ElemTypee; inti; clrscr(); InitStack(S); for(i=1;i<=5;i++)Push(S,2*i+1); StackOutput(S); Pop(S,e);StackOutput(S); Push(S,111);StackOutput(S); Push(S,222);StackOutput(S); Pop(S,e);StackOutput(S); } 2、循环队列的定义及其相关操作算法的实现 #include"stdio.h" #defineOK1 #defineERROR0 #defineOVERFLOW-2 #defineTRUE1 #defineFALSE0 typedefintStatus; #defineMAX10 typedefintElemType; typedefstruct {ElemType*Elem; intfront; intrear; }CirQueue; StatusInitQueue(CirQ
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构实验指导书 数据结构 实验 指导书