数据结构实验指导书.docx
- 文档编号:25679515
- 上传时间:2023-06-11
- 格式:DOCX
- 页数:18
- 大小:19.49KB
数据结构实验指导书.docx
《数据结构实验指导书.docx》由会员分享,可在线阅读,更多相关《数据结构实验指导书.docx(18页珍藏版)》请在冰豆网上搜索。
数据结构实验指导书
数据结构实验指导书
富冬蕾编
沈阳师范大学软件学院
目录
前言1
第1章线性表2
1.1顺序表的基本运算2
1.2链表的基本运算3
1.3两个有序链表的合并4
第2章栈和队列5
2.1顺序栈的基本运算5
2.2链队列的基本运算6
2.3循环队列的基本运算7
第3章树和二叉树9
3.1二叉树的基本运算9
3.2二叉树的递归遍历11
第4章图13
4.1图的DFS或BFS遍历13
第5章查找15
5.1顺序查找和折半查找15
前言
数据结构是一门重要的专业基础课,其特点是理论与实践都占据着极其重要的位置。
这门课对学生的主要要求包括要掌握各种基本数据结构的定义、抽象数据类型描述、相关的算法描述与算法的性能分析与评价,以及数据结构与算法的综合应用能力。
为了达到教学要求,以上机实验为主要形式的实践教学环节是不可缺少的。
上机实验的主要内容可分为两种,一是验证经典算法和教材中的算法例程,二是设计并检验自己设计的算法。
通过上机实验可以帮助学生正确理解所学概念,了解不同的算法特点,掌握算法性能,积累算法设计经验。
教学经验表明,学生只有通过一定时间量的算法设计和程序调试等实践活动,才能较全面和较深入地掌握数据结构的知识,在此基础上,发挥学生的想象力和创造力,设计出新颖多样的有应用价值的算法。
数据结构课程的上机实验应达到以下教学目的:
1.通过实验,学生能够对所学的每一种数据结构正确理解,能够针对不同的问题选择合适的数据结构,在程序中将抽象数据类型实例化。
2.深刻理解典型算法的设计思想,掌握不同算法在解题策略和流程控制逻辑等方面的不同特点和实现方法。
再进一步总结并掌握计算机处理数据和解决问题的一般规律,从而能够自行设计应用算法。
3.学会对算法进行性能评价和分析,比较同一个问题的多种解法,针对具体问题能够设计出高效的算法。
4.提高学生进行程序设计的综合能力,使其从初学者进阶到较有经验和专业素质的程序设计者。
本实验指导书的选题宗旨是客观性和主观性题目比例适中,与教材多角度配合,实验过程的要求规范,给学生留有较大的发挥余地。
数据结构实验课对学生的要求是:
1.上机前阅读实习报告规范,准备实验提纲,对课题进行分析,进行算法设计。
设计各模块和主程序的流程并以C函数形式表示,实现函数间的调用关系。
编写出源程序代码。
源程序格式符合算法语言规范,代码段或行尾加详细注释。
准备实验数据。
2.上机输入源程序,运行并调试程序,通过对实验数据的测试,分析算法的正确性和可靠性。
3.撰写和提交实验报告以及相关文档。
第1章线性表
1.1顺序表的基本运算
1、实验目的
掌握顺序表的基本操作,初始化、插入、删除以及显示等运算在顺序存储结构上的实现。
2、实验内容
(1)顺序表的初始化;
(2)顺序表插入算法的实现;
(3)顺序表删除算法的实现;
(4)显示顺序表中各个元素。
3、实验要求
(1)能够熟练在VisualC++6.0环境中进行程序的编辑、编译和调试;
(2)会书写类C语言的算法,并将算法转变为程序实现。
4、程序运行框架:
#include
#include
#defineMaxSize100
typedefcharElemType;
typedefstruct{
ElemType*elem;
intlength;
}SqList;
intInitList_Sq(SqList&L){return0;}
intListInsert_Sq(SqList&L,inti,ElemTypee){return0;}
intListDelete_Sq(SqList&L,inti,ElemType&e){return0;}
voidDisp_Sq(SqListL){}
voidmain(){}
5、测试数据:
依次向顺序表中插入A、B、C,之后再删除第一个元素并观察运行结果。
1.2链表的基本运算
1、实验目的
掌握链表的基本操作,初始化、插入、删除以及显示等运算在链式存储结构上的实现。
2、实验内容
(1)链表的初始化;
(2)链表插入算法的实现;
(3)链表删除算法的实现;
(4)显示链表中各个元素。
3、实验要求
(1)能够熟练在VisualC++6.0环境中进行程序的编辑、编译和调试;
(2)会书写类C语言的算法,并将算法转变为程序实现。
4、程序运行框架:
#include
#include
typedefcharElemType;
typedefstructLNode{
ElemTypedata;
structLNode*next;
}LNode,*LinkList;
intInitList_L(LinkList&L){return1;}
intListInsert(LinkList&L,inti,ElemTypee){return1;}
intListDelete_L(LinkList&L,inti,ElemType&e){return1;}
voidDisp_L(LinkListL){}
voidmain(){}
5、测试数据:
依次向链表中插入X、A、B、C,之后再删除第二个元素并观察运行结果。
1.3两个有序链表的合并
1、实验目的
掌握链表的基本操作,初始化、插入、显示以及合并等运算在链式存储结构上的实现。
2、实验内容
(1)链表的初始化;
(2)链表插入算法的实现;
(3)两个有序链表合并算法的实现;
(4)显示链表中各个元素。
3、实验要求
(1)能够熟练在VisualC++6.0环境中进行程序的编辑、编译和调试;
(2)会书写类C语言的算法,并将算法转变为程序实现。
4、程序运行框架:
#include
#include
typedefintElemType;
typedefstructLNode{
ElemTypedata;
structLNode*next;
}LNode,*LinkList;
intInitList_L(LinkList&L){return1;}
intListInsert_L(LinkList&L,inti,ElemTypee){return1;}
voidDisp_L(LinkListL){}
voidMergeList_L(LinkList&La,LinkList&Lb,LinkList&Lc){}
voidmain(){}
5、测试数据:
依次向链表La中插入2、3、5,之后再向链表Lb中插入1、4、6、7,最后调用MergeList_L子函数观察运行结果。
第2章栈和队列
2.1顺序栈的基本运算
1、实验目的
掌握顺序栈的基本操作,初始化、入栈、出栈、取栈顶元素以及显示等运算在顺序存储结构上的实现。
2、实验内容
(1)顺序栈的初始化;
(2)顺序栈入栈操作的实现;
(3)顺序栈出栈操作的实现;
(4)取栈顶元素操作的实现;
(5)显示顺序栈中各个元素。
3、实验要求
(1)能够熟练在VisualC++6.0环境中进行程序的编辑、编译和调试;
(2)会书写类C语言的算法,并将算法转变为程序实现。
4、程序运行框架:
#include
#include
#defineSTACK_INIT_SIZE100
#defineSTACKINCREMENT10
typedefcharSElemType;
typedefstruct
{
SElemType*base;
SElemType*top;
intstacksize;
}SqStack;
intInitStack(SqStack&S){return0;}
intGetTop(SqStackS,SElemType&e){return0;}
intPush(SqStack&S,SElemTypee){return0;}
intPop(SqStack&S,SElemType&e){return0;}
voidDispStack(SqStackS){}
voidmain(){}
5、测试数据:
在顺序栈中依次将元素A、B、C、D入栈,之后取栈顶元素,最后出栈并观察运行结果。
2.2链队列的基本运算
1、实验目的
掌握链队列的基本操作,初始化、入队、出队、链队列的销毁以及显示等运算在链式存储结构上的实现。
2、实验内容
(1)链队列的初始化;
(2)链队列入队操作的实现;
(3)链队列出队操作的实现;
(4)链队列销毁操作的实现;
(4)显示链队列中各个元素。
3、实验要求
(1)能够熟练在VisualC++6.0环境中进行程序的编辑、编译和调试;
(2)会书写类C语言的算法,并将算法转变为程序实现。
4、程序运行框架:
#include
#include
typedefcharQElemType;
typedefstructQNode{
QElemTypedata;
structQNode*next;
}QNode,*QueuePtr;
typedefstruct{
QueuePtrfront;
QueuePtrrear;
}LinkQueue;
intInitQueue(LinkQueue&Q){return0;}
intEnQueue(LinkQueue&Q,QElemTypee){return0;}
intDeQueue(LinkQueue&Q,QElemType&e){return0;}
intDestroyQueue(LinkQueue&Q){return0;}
voidDispQueue(LinkQueueQ){}
voidmain(){}
5、测试数据:
在链队列中依次将元素A、B、C、D、E入队,之后出队,显示队列元素后将全部队列销毁,最后出栈并观察运行结果。
2.3循环队列的基本运算
1、实验目的
掌握循环队列的基本操作,初始化、求队列长度、入队、出队和显示等运算在顺序存储结构上的实现。
2、实验内容
(1)循环队列的初始化;
(2)循环队列入队操作的实现;
(3)循环队列出队操作的实现;
(4)显示循环队列中各个元素;
(5)求循环队列的长度。
3、实验要求
(1)能够熟练在VisualC++6.0环境中进行程序的编辑、编译和调试;
(2)会书写类C语言的算法,并将算法转变为程序实现。
4、程序运行框架:
#include
#include
#defineMAXQSIZE5
typedefcharQElemType;
typedefstruct{
QElemType*base;
intfront;
intrear;
}SqQueue;
intInitQueue(SqQueue&Q){return0;}
intQueueLength(SqQueueQ){return0;}
intEnQueue(SqQueue&Q,QElemTypee){return0;}
intDeQueue(SqQueue&Q,QElemType&e){return0;}
voidDispQueue(SqQueueQ){}
voidmain(){}
5、测试数据:
在循环队列中依次将元素A、B、C、D入队,求队列长度之后出队,再将E、F入队最后显示队列元素,并观察运行结果。
第3章树和二叉树
3.1二叉树的基本运算
1、实验目的
掌握二叉树的基本运算,会求二叉树的结点总数、叶子结点总数、二叉树的深度以及显示二叉树。
2、实验内容
(1)二叉树的建立;
(2)求二叉树的结点总数;
(3)求二叉树的叶子结点总数;
(4)求二叉树的深度;
(5)显示二叉树。
3、实验要求
(1)能够熟练在VisualC++6.0环境中进行程序的编辑、编译和调试;
(2)会书写类C语言的算法,并将算法转变为程序实现。
4、程序运行框架:
#include
#include
#defineMaxSize100
typedefcharElemType;
typedefstructnode
{
ElemTypedata;
structnode*lchild;
structnode*rchild;
}BTNode;
voidCreateBTNode(BTNode*&b,char*str)
{
BTNode*St[MaxSize],*p=NULL;
inttop=-1,k,j=0;
charch;
b=NULL;
ch=str[j];
while(ch!
='\0')
{
switch(ch)
{
case'(':
top++;St[top]=p;k=1;break;/*为左节点*/
case')':
top--;break;
case',':
k=2;break;/*为右节点*/
default:
p=(BTNode*)malloc(sizeof(BTNode));
p->data=ch;p->lchild=p->rchild=NULL;
if(b==NULL)//p指向二叉树的根节点
b=p;
else//已建立二叉树根节点
{
switch(k)
{
case1:
St[top]->lchild=p;break;
case2:
St[top]->rchild=p;break;
}
}
}
j++;
ch=str[j];
}
}
voidDispBTNode(BTNode*b){}
intNodesNum(BTNode*b){return0;}
intLeafNodesNum(BTNode*b){return0;}
intBTNodeDepth(BTNode*b){return0;}
voidmain()
{}
5、测试数据:
给定一个字符串"A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))",以此建立一个二叉树从而求在其上的结点总数、叶子结点数和深度,最后显示并观察结果。
3.2二叉树的递归遍历
1、实验目的
掌握二叉树的递归遍历算法,能够在建立二叉树的基础上,对二叉树进行先序、中序和后序遍历。
2、实验内容
(1)二叉树的建立;
(2)二叉树的先序递归遍历;
(3)二叉树的中序递归遍历;
(4)二叉树的后序递归遍历;
(4)二叉树的显示。
3、实验要求
(1)能够熟练在VisualC++6.0环境中进行程序的编辑、编译和调试;
(2)会书写类C语言的算法,并将算法转变为程序实现。
4、程序运行框架:
#include
#include
#defineMaxSize100
typedefcharElemType;
typedefstructnode
{
ElemTypedata;
structnode*lchild;
structnode*rchild;
}*BTNode;
voidCreateBTNode(BTNode&b,char*str){}
voidDispBTNode(BTNodeb){}
intvisit(ElemTypee){return0;}
intPreOrder(BTNodeb,int(*visit)(ElemTypee)){return0;}
intInOrder(BTNodeb,int(*visit)(ElemTypee)){return0;}
intPostOrder(BTNodeb,int(*visit)(ElemTypee)){return0;}
voidmain(){}
5、测试数据:
给定一个字符串"A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))",以此建立二叉树并在其上先序、中序、后序递归遍历,最后显示二叉树并观察运行结果。
第4章图
4.1图的DFS或BFS遍历
1、实验目的
掌握图的DFS或BFS遍历算法,理解图的邻接表存储结构,并能对图进行深度优先和广度优先遍历。
2、实验内容
(1)将邻接矩阵转换成邻接表;
(2)从第v个顶点出发递归地深度优先遍历图;
(3)对图G作深度优先遍历;
(4)广度优先遍历图;
(5)输出邻接表。
3、实验要求
(1)能够熟练在VisualC++6.0环境中进行程序的编辑、编译和调试;
(2)会书写类C语言的算法,并将算法转变为程序实现。
4、程序运行框架:
#include
#include
#defineMAXV100
typedefstruct{
intedges[MAXV][MAXV];/*邻接矩阵*/
intvexnum,arcnum;/*顶点数,弧数*/
}MGraph;//图的类型
typedefstructAcrNode{
intadjvex;/*该弧的终点位置*/
structAcrNode*nextarc;/*指向下一条弧的指针*/
}ArcNode;//弧的结点结构类型
typedefintVextexType;
typedefstructVNode{
VextexTypedata;/*顶点信息*/
ArcNode*firstarc;/*指向第一条弧*/
}VNode,AdjList[MAXV];//邻接表头结点的类型
typedefstruct{
AdjListadjlist;/*邻接表*/
intn,e;/*图中顶点数n和边数e*/
}ALGraph;//图的邻接表类型
intvisited[MAXV];/*全局数组*/
voidMatToList(MGraphg,ALGraph*&G){}
voidDispAdj(ALGraph*G){}
voidDFS(ALGraph*G,intv){}
voidDFSTraverse(ALGraph*G){}
voidBFS(ALGraph*G){}
voidmain(){}
5、测试数据:
给定一个二维矩阵A[MAXV][6]={
{0,1,0,1,0,0},
{0,0,1,0,0,0},
{8,0,0,0,0,1},
{0,0,1,0,0,1},
{0,0,0,1,0,0},
{1,0,0,0,1,0}},以此建立图的邻接表并输出,然后对图进行深度优先和广度优先遍历,最后观察运行结果。
第5章查找
5.1顺序查找和折半查找
1、实验目的
掌握静态查找表的顺序查找和折半查找算法,能够在给定查找表的基础上对其进行顺序查找和折半查找。
2、实验内容
(1)对静态查找表进行顺序查找;
(2)对静态查找表进行折半查找;
3、实验要求
(1)能够熟练在VisualC++6.0环境中进行程序的编辑、编译和调试;
(2)会书写类C语言的算法,并将算法转变为程序实现。
4、程序运行框架:
#include
#include
typedefintKeyType;
typedefstruct{
KeyTypekey;
//InfoTypedata;
}ElemType;
typedefstruct{
ElemType*elem;
intlength;
}SSTable;
intSearch_Sq(SSTableST,KeyTypekey){return0;}
intBinSearch(SSTableST,KeyTypekey){return0;}
voidmain(){}
5、测试数据:
给定静态查找表a{0,13,24,35,32,65,19,7,74,20,38},对其进行顺序查找,给定静态查找表b{0,2,4,6,8,10,12,14,16,18,20},对其进行折半查找,并观察运行结果。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验 指导书