1、数据结构实验指导书目 录数据结构实验教学大纲 1数据结构上机实验编程指南 4实验一 线性表 5实验二 栈与队列 12实验三 二叉树 17实验四 图 21实验五 查找 27实验六 排序 31数据结构实验教学大纲Data Structure ExperimentTeaching Program课程类别:必修课 适用专业:计算机应用技术、计算机网络技术 学时:22 教研室主任: 大纲执笔人: 大纲审批人:一、本实验课的性质、任务与目的数据结构课程是计算机科学与技术专业的一门重要的专业基础课。通过此实验教学和学生的上机实践,要求学生掌握各种数据结构的具体物理实现方法,掌握用数据结构知识解决实际问题的方
2、法,以达到理论指导实践的目的。从而进一步提高学生的编程能力、算法设计能力及分析问题、解决问题的能力。二、本实验课的基本理论1线性表存储结构及其基本操作的实现。2栈和队列的存储结构及其基本操作的实现。3二叉树的存储结构及其基本操作的实现。4图的存储结构及其基本操作的实现。5各类查找算法的设计6各类排序算法的设计三、实验内容和教学基本要求序号实验名称学时实验内容实验要求实验类型1线性表2(1)顺序表的定义及其相关操作算法的实现;必做设计性(2)链表的定义及其相关算法的实现;必做设计性(3)集合的表示与运算。选做综合性(4)一元多项式的表示与运算选做综合性2栈与队列2(1)顺序栈的定义及其操作算法的
3、实现;必做设计性(2)链式队列定义及其操作算法的实现;选做设计性(3)循环队列定义及其操作算法的实现;必做设计性(4)利用栈实现进制转换选做综合性(5)利用栈实现括号匹配检测选做综合性3二叉树2(1)二叉树的创建、递归遍历及其它基本操作的实现。必做设计性(2)二叉树的创建、非递归遍历及其它基本操作的实现。选做设计性(3)哈夫曼树及哈夫曼编码的算法实现。选做综合性4图2(1)图的邻接矩阵存储方式的实现、图的遍历算法。必做设计性(2)图的邻接矩阵存储方式的实现、图的遍历算法。必做设计性(3)图最小生成树算法选做综合性(4)图的拓扑排序算法选做综合性(5)图的最短路径算法选做综合性5查找2(1)顺序
4、查找算法、二分法查找算法、必做设计性(2)二叉排序树的创建与查找、选做设计性(3)哈希表的造表与查找算法选做设计性(4)班级学生成绩管理(表的存储、相关查找等)选做综合性6排序2(1)直接插入排序算法、SHELL排序算法必做设计性(2)快速排序算法、归并排序算法选做设计性(3)选择排序算法、堆排序算法必做设计性(4)班级学生成绩管理(利用某种排序方法实现按某个或某些关键字排序)选做综合性四、仪器设备配置每人一台计算机,安装Turbo C软件。五、教学文件与教学形式1教学文件数据结构(C语言版),严蔚敏、吴伟民编著,清华大学出版社,2002.9。2教学形式应用多媒体讲授实验内容、要求及注意事项,
5、上机辅导,最后进行实验总结。六、考核方法及成绩评定办法每次完成实验内容,进行总结分析,写出实验报告。按照实验内容完成情况及实验报告书写情况进行考核,成绩按优、良、中、及格、不及格五级分评定。数据结构实验指导书为了更好地帮助同学们做好数据结构实验,在此给出数据结构上机编程的一般思路和程序的基本框架结构。具体程序结构按先后顺序可分为以下3个部分:1、预定义常量及类型 对于相关的常量与类型(如状态类型)进行定义,如:#define OK 1#define ERROR 0#define OVERFLOW 2#define TRUE 1#define FALSE 0typedef int Status;
6、2、相关数据结构类型定义此部分包括对所使用的数据结构给出其类型定义,及基本操作函数定义。(具体内容可参见实验一)3、主调程序的定义此部分给出相关的主调程序,在此程序中定义相关数据结构变量,并通过调用其操作函数,实现设计目的。(具体内容可参见实验一)实验一 线性表一、实验目的1掌握顺序表及其基本操作的实现。2掌握链表及其基本操作的实现。3掌握利用TC实现数据结构的编程方法。4通过上机实践进一步加深对线性表的顺序存储方式及链式存储方式的理解。5通过上机实践加强利用数据结构解决实际应用应用问题的能力。二、实验要求1实验前做好充分准备,包括复习第一章、第二章所学内容,事先预习好本次实验内容。2实验时记
7、录实验结果,按要求完成各题。3实验结束后,给出实验总结与分析并及时给出本次实验的实验报告。三、实验题目本次实验给出的选定题目如下表所示。实验名称学时实验内容实验要求实验类型线性表2(1)顺序表的定义及其相关操作算法的实现;必做设计性(2)链表的定义及其相关算法的实现;必做设计性(3)集合的表示与运算。选做综合性(4)一元多项式的表示与运算选做综合性说明:(1)实验内容1)与实验内容2)为必做内容。(2)实验内容3)与实验内容4)为选做内容。四、实验内容与要求1、实验题目一:顺序表的定义及其相关操作算法的实现要求:编程实现顺序表的类型定义及顺序表的初始化操作、插入操作、删除操作、取元素操作、输出
8、操作等,并对其进行验证。2、实验题目二:链表的定义及其相关操作算法的实现要求:编程实现单链表(或双向链表、循环链表)的类型定义及其初始化操作、插入操作、删除操作、取元素操作、输出操作等,并对其进行验证。3、实验题目三:集合的表示与运算要求:利用题目一或题目二所定义的线性表(顺序表或链表)实现集合的表示及其并、交等运算,并进行验证给出结果。4、实验题目四:一元多项式的表示与运算要求:利用线性表(顺序表或链表)实现一元多项的类型定义及其相加等等运算,并进行验证给出结果。五、实验程序示例1、顺序表实验程序示例#include stdio.h#include alloc.h /*-(1)预定义常量及类
9、型-*/#define OK 1#define ERROR 0#define OVERFLOW -2#define TRUE 1#define FALSE 0typedef int Status; /*-(2)顺序表类型及其基本操作函数的定义-*/#define InitSize 100#define INCR 20typedef int ElemType; /*定义元素类型为int类型*/typedef struct ElemType *Elem;int Length;int ListSize;SqList; /*SqList类型为顺序表类型*/Status InitList_sq(SqLi
10、st &L) /*初始化操作函数定义*/ L.Elem=(ElemType*)malloc(InitSize*sizeof(ElemType); if (!(L.Elem)return(OVERFLOW); L.Length=0; L.ListSize=InitSize; return OK; Status ListInsert_sq(SqList &L, int i, ElemType e) /*插入操作函数定义*/ int j; if (iL.Length+1) return ERROR; if (L.Length=L.ListSize) L.Elem=(ElemType*)malloc(
11、L.ListSize+INCR)*sizeof(ElemType);if(!(L.Elem) return(OVERFLOW);L.ListSize+=INCR; for(j=L.Length-1;j=i-1;j-) L.Elemj+1=L.Elemj; L.Elemi-1=e; L.Length+; return OK; void ListOutput_sq(SqList L)/*顺序表输出操作*/ int i; for(i=0;i=L.Length-1;i+) printf(%6d,L.Elemi); printf(n);/*其它操作如删除、查找、判空等操作略*/*-(3)主函数定义-*/
12、main() SqList La; int i; InitList_sq(La); for (i=0;inext=NULL; return OK; Status ListInsert_l(LinkList &L,int i,ElemType e) /*插入操作函数定义*/LinkList p,s; int j; p=L;j=0; while(p&jnext;j+; if (!p|ji-1) return ERROR; s=(LinkList)malloc(sizeof(struct Lnode); s-data=e; s-next=p-next; p-next=s; return OK; vo
13、id ListOutput_l(LinkList L) /*输出操作函数定义*/ LinkList p; p=L-next; while(p) printf(%6d,p-data); p=p-next; printf(n); /*其它操作如删除、查找、判空等操作略*/*-(3)主函数定义-*/ main() int i; LinkList La; InitList_l(La); for (i=0;inext=NULL; p=L; for(i=1;icoef=coef;s-expn=expn; s-next=NULL;p-next=s;p=s; void OutputPoly(POLY L)/*
14、一元多项式的输出操作*/ int flag=1; /*flag用来是否为第一项的标识*/ POLY p; p=L-next; while(p) if(flag) printf(%dX%d,p-coef,p-expn); flag=0; else printf(%+dX%d,p-coef,p-expn); p=p-next; printf(n); void AddPoly(POLY La, POLY Lb, POLY &Lc)/*一元多项式的相加操作,即实现Lc=La+Lb*/ int x; POLY pa,pb,pc,s; Lc=(POLY)malloc(sizeof(struct PNode
15、); Lc-next=NULL;pc=*Lc; pa=La-next;pb=Lb-next; while(pa&pb) if(pa-expnexpn) s=(POLY)malloc(sizeof(struct PNode); s-coef=pa-coef;s-expn=pa-expn; s-next=NULL;pc-next=s;pc=s; pa=pa-next; else if(pa-expnpb-expn) s=(POLY)malloc(sizeof(struct PNode); s-coef=pb-coef;s-expn=pb-expn; s-next=NULL;pc-next=s;pc
16、=s; pb=pb-next; else x=pa-coef+pb-coef; if(x!=0) s=(POLY)malloc(sizeof(struct PNode); 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(struct PNode); s-coef=pa-coef;s-expn=pa-expn; s-next=NULL;pc-next=s;pc=s; pa=pa-next; while(pb) s=(POLY)m
17、alloc(sizeof(struct PNode); s-coef=pb-coef;s-expn=pb-expn; s-next=NULL;pc-next=s;pc=s; pb=pb-next; main() POLY La,Lb,Lc; int n; printf(Creat Poly La:n); printf(t Input the number of items of La:); scanf(%d,&n); CreatPoly(La,n); printf(nLa(x)=); OutputPoly(La); printf(Creat Poly Lb:n); printf(tInput
18、the number of items of Lb:); 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实验结束后,给出实验总结与分析并及
19、时给出本次实验的实验报告。三、实验题目本次实验给出的选定题目如下表所示。实验名称学时实验内容实验要求实验类型栈与队列2(1)顺序栈的定义及其操作算法的实现;必做设计性(2)链式队列定义及其操作算法的实现;选做设计性(3)循环队列定义及其操作算法的实现;必做设计性(4)利用栈实现进制转换选做综合性说明:(1)实验内容1)与实验内容3)为必做内容。(2)实验内容2)与实验内容4)为选做内容。四、实验内容与要求1、实验题目一:顺序栈的定义及其操作算法的实现要求:编程实现顺序栈表的类型定义及顺序表的初始化操作、入栈操作、出栈操作、取栈顶元素操作、输出操作等,并对其进行验证。2、实验题目二:链式队列的定
20、义及其相关操作算法的实现要求:编程实现链式队列的类型定义及其初始化操作、入队操作、出队操作、取队头操作、输出操作等,并对其进行验证。3、实验题目三:循环队列定义及其操作算法的实现要求:编程实现循环队列的类型定义及其初始化操作、入队操作、出队操作、取队头操作、输出操作等,并对其进行验证。4、实验题目四:利用栈实现进制转换要求:利用栈(顺序栈或链式栈)实现进制转换问题五、实验程序示例1、顺序栈的定义及其操作算法的实现#include stdio.h#define OK 1#define ERROR 0#define OVERFLOW -2#define TRUE 1#define FALSE 0t
21、ypedef int Status; #define Init_Size 100#define INCR 20typedef int ElemType;typedef structElemType *Elem; int Top; int StackSize;SqStack;Status InitStack(SqStack &S) S.Elem=(ElemType *)malloc(Init_Size*sizeof(ElemType); if(!S.Elem) return OVERFLOW; S.Top=0; return OK;Status GetTop(SqStack S, ElemTyp
22、e &e)if (S.Top=0) return ERROR; e=S.ElemS.Top-1; return OK; Status Push(SqStack &S, ElemType e) if(S.Top=S.StackSize) S.Elem=(ElemType*)malloc(S.StackSize+INCR)*sizeof(ElemType); if(!S.Elem) return(OVERFLOW); S.StackSize+=INCR;S.ElemS.Top+=e; return OK; Status Pop(SqStack &S,ElemType &e) if (!S.Top)
23、 printf(stack is empty when popingn);return(ERROR); e=S.Elem-S.Top; return OK; void StackOutput(SqStack S) int i; for(i=0;iS.Top;i+) printf(%d ,S.Elemi); printf(n); main() SqStack S; ElemType e; int i; clrscr(); InitStack(S); for(i=1;i=5;i+) Push(S,2*i+1); StackOutput(S); Pop(S, e); StackOutput(S);
24、Push(S,111); StackOutput(S); Push(S,222); StackOutput(S); Pop(S, e); StackOutput(S); 2、循环队列的定义及其相关操作算法的实现#include stdio.h#define OK 1#define ERROR 0#define OVERFLOW -2#define TRUE 1#define FALSE 0typedef int Status; #define MAX 10typedef int ElemType;typedef structElemType *Elem; int front; int rear; CirQueue;Status InitQueue(CirQ
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1