《数据结构实验指导书》.docx

上传人:b****8 文档编号:10911137 上传时间:2023-02-23 格式:DOCX 页数:44 大小:30.43KB
下载 相关 举报
《数据结构实验指导书》.docx_第1页
第1页 / 共44页
《数据结构实验指导书》.docx_第2页
第2页 / 共44页
《数据结构实验指导书》.docx_第3页
第3页 / 共44页
《数据结构实验指导书》.docx_第4页
第4页 / 共44页
《数据结构实验指导书》.docx_第5页
第5页 / 共44页
点击查看更多>>
下载资源
资源描述

《数据结构实验指导书》.docx

《《数据结构实验指导书》.docx》由会员分享,可在线阅读,更多相关《《数据结构实验指导书》.docx(44页珍藏版)》请在冰豆网上搜索。

《数据结构实验指导书》.docx

《数据结构实验指导书》

目录

《数据结构实验》教学大纲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&&jnext;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->expnexpn)

{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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 职业教育 > 中职中专

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1