数据结构实验指导09级Word文件下载.docx
《数据结构实验指导09级Word文件下载.docx》由会员分享,可在线阅读,更多相关《数据结构实验指导09级Word文件下载.docx(12页珍藏版)》请在冰豆网上搜索。
![数据结构实验指导09级Word文件下载.docx](https://file1.bdocx.com/fileroot1/2022-10/26/9a69151f-57b0-4bb5-9dc7-301b1c992b05/9a69151f-57b0-4bb5-9dc7-301b1c992b051.gif)
StatusListInsert_Sq(SqList&
L,inti,ElemTypee){
//在顺序表L的第i个元素之前插入新的元素e
if(i<
1||i>
L.length+1)returnERROR;
if(L.length>
=L.listsize){
newbase=(ElemType*)realloc(L.elem,
(L.listsize+LISTINCREMENT)*sizeof(ElemType));
if(!
newbase)exit(OVERFLOW);
L.elem=newbase;
L.listsize+=LISTINCREMENT;
q=&
(L.elem[i-1]);
for(p=&
(L.elem[L.length-1]);
p>
=q;
--p)
*(p+1)=*p;
*q=e;
++L.length;
returnOK;
}
StatusListDelete_Sq(SqList&
L,inti,ElemType&
e){//删除算法
if((i<
1)||(i>
L.length))returnERROR;
p=&
e=*p;
q=L.elem+L.length-1;
for(++p;
p<
++p)*(p-1)=*p;
--L.length;
intlocate_sq(SqListL,elemtypex)//查找算法
{for(i=0;
i<
L.length;
i++)
If(L.elem[i]==x)returni+1;
return0;
}
4.根据上面设计的算法,用C/C++语言实现,调试通过并输出正确的结果。
实验二线性表的链式表示与实现
(1)掌握线性表的链接存储结构;
(2)验证单链表及其基本操作的实现;
(3)进一步掌握数据结构及算法的程序实现的基本方法。
(1)用头插法和尾插法建立含有若干个元素的带头结点的单链表;
(2)对已经建立的单链表实现插入、删除、查找等基本操作。
3.实现算法…
实验三、四栈与队列及其应用
(1)掌握栈的顺序存储结构和队列的链式存储结构;
(2)掌握栈和队列的操作特性;
(3)掌握基于顺序栈和链队列的基本操作的实现方法。
(1)建立一个空栈;
(2)对已经建立的栈实现入栈、出栈、取栈顶元素等基本操作。
(3)建立一个空队列;
(4)对已经建立的队列实现插入、删除等基本操作
实验五二叉树的应用
(1)掌握二叉树的逻辑结构;
(2)掌握二叉树的二叉链表存储结构;
(3)掌握基于二叉链表存储的二叉树的遍历操作的实现。
(1)建立一棵含有n个结点的二叉树;
(2)前序(或中序、后序)遍历该二叉树;
(3)求该树叶子结点个数。
实验六图的遍历与应用
(1)掌握图的逻辑结构;
(2)掌握图的邻接矩阵存储结构和邻接表存储结构;
(3)掌握图的邻接矩阵存储结构和邻接表存储结构下遍历算法的实现。
(1)建立无向图的邻接矩阵存储;
(2)对已经建立的无向图进行深度优先和广度优先遍历操作。
(3)建立有向图的邻接表存储;
(4)对已经建立的有向图进行深度优先和广度优先遍历操作。
…
实验七查找技术
(1)掌握顺序查找和折半查找算法的基本思想;
(2)掌握顺序查找和折半查找算法的实现方法;
(3)掌握顺序查找和折半查找算法的时间性能。
对给定的长度为n的数组,分别使用顺序查找、折半查找查找数组中与给定值k相等的元素。
实验八内部排序
(1)掌握直接插入排序、冒泡排序和简单选择排序的基本思想;
(2)掌握直接插入排序、冒泡排序和简单选择排序的实现方法;
(3)掌握快速排序的基本思想和实现方法。
对一组数据进行直接插入排序、冒泡排序、简单选择排序和快速排序。
(升序)
…
附录一:
山东理工大学实验教学授课计划表
附录二:
实验一的源代码
10~11学年第1学期
开课实验室名称
计算机中心实验室
课程名称
数据结构
课程代码
052054
开课时间
2010.9
总实验学时
16
课程类别
主讲教师
肖爱梅
院(部)
计算机科学与技术
课程性质
专业基础课
开课班级
计科09
实验人数
及实验者类别
本科
序号
实验项
目名称
学
时
实验
类别
要求
类型
实验计划时间(到周节)
备注
1
线性表的顺序表示和实现
2
专业
必选
设计
第三周周二7-8节
线性表的链式表示和实现
第四周周二7-8节
3
栈的实现及其应用
第六周周六3-4节
4
队列的实现及其应用
第八周周六3-4节
5
二叉树及其应用
第十周周二7-8节
6
图及其应用
第十二周周二7-8节
7
查找技术
第十四周周二7-8节
8
内部排序
第十五周周二7-8节
9
10
11
12
13
14
15
教学部主任:
院(部)分管领导:
注:
1本表由任课教师填写,课程所在院(部)统一于每学期第一周报送实验室,跨院部的另报实验室管理科一份。
本表留存实验室;
2实验类别:
基础/技术(或专业)基础/专业/其他(含毕业论文和毕业设计的实验);
3实验类型:
验证/创新/综合/设计/研究/演示;
4实验要求:
必修/选修;
4备注:
改进/新开。
4.实验要求:
必修/选修。
5.备注:
C语言实现:
#include<
stdio.h>
conio.h>
stdlib.h>
#defineOK1
#defineERROR0
#defineOVERFLOW0
#defineLIST_INIT_SIZE100
#defineLISTINCREMENT10
typedefintStatus;
typedefstruct
{int*elem;
intlength;
intlistsize;
}SqList;
intInitList_Sq(SqList*L)
{(*L).elem=(int*)malloc(LIST_INIT_SIZE*sizeof(int));
if(!
(*L).elem)
exit(OVERFLOW);
(*L).length=0;
(*L).listsize=LIST_INIT_SIZE;
returnOK;
}//创建顺序表
intCreateList_Sq(SqList*L)
{inti;
cout<
<
"
请输入数据:
;
for(i=0;
(*L).length;
scanf("
%d"
&
(*L).elem[i]);
}//顺序表赋值
Statuslistinsert_sq(SqList*L,inti,inte)
{int*q,*p,*newbase;
if(i<
1||i>
(*L).length+1)returnERROR;
if((*L).length>
=(*L).listsize)
{newbase=(int*)realloc((*L).elem,((*L).listsize+LISTINCREMENT)*
sizeof(int));
if(!
(*L).elem=newbase;
(*L).listsize+=LISTINCREMENT;
}
q=&
((*L).elem[i-1]);
for(p=&
((*L).elem[(*L).length-1]);
p>
=q;
--p)
*(p+1)=*p;
*q=e;
++(*L).length;
}//顺序表的插入
Statuslistdelete_sq(SqList*L,inti,int&
e)
{
int*p,*q;
(*L).length)returnERROR;
p=&
e=*p;
q=(*L).elem+(*L).length-1;
for(++p;
p<
++p)
*(p-1)=*p;
--(*L).length;
}//顺序表的删除
voidoutput(SqList*L)
{cout<