第一篇:算法与数据结构实验指导书
北 京 邮 电 大 学
计 算 机 科 学 与 技 术 学 院
算 法 与 数 据 结 构
实 验 指 导 书
杨俊、徐塞虹、漆涛 编著
2006年9月 算法与数据结构 实验指导书
目录
实验要求....................................................................................................................................3 试验
一、约瑟夫环..............................................................................…………………..……4 试验
二、长整数四则运算运算………………………………………………………………4 实验三、八皇后.....................................……..........................................................................5 实验
四、骑士遍历......................................……………………..............................................5 实验
五、桌面计算器...............................……………..............................................................6 实验
六、平衡排序二叉树....................…...…….....................................................................6 试验
七、多重集合的实现……......................................………………………………………7 试验
八、图论………………………………………………………………………….……..8 实验
八、内部排序性能的比较..........………………….............................................................8 教材及主要参考文献………………………………………………………………………………..9 2 北京邮电大学 计算机科学与技术学院 算法与数据结构 实验指导书
实验要求
一、本课程在讲课期间需要做上机实验,目的之一是检查学生对所学算法的掌握和理解程度;其次是锻炼学生的团队合作精神。
二、成绩:
1、编码:占整个实验成绩的50%;
2、测试:占整个实验成绩的20%;
3、文档:占整个实验成绩的30%。
三、按时提交上机文档,实验文档包含以下各项:
1、问题描述:实验题目、内容和要求;
2、算法思路:实验小组对问题的解决方法的文字描述;
3、算法描述:用类算法语言等对算法进行描述;
4、源程序及驱动程序:上机实验编制的代码源程序及程序运行环境;
5、测试数据:对算法的测试用例;
6、结果分析和结论:对算法及测试结果的分析及结论;
7、心得体会:通过实验获得的心得体会;
8、分工及签名:最后是小组成员的分工及签名。
北京邮电大学 计算机科学与技术学院-1-算法与数据结构 实验指导书
实验
一、约瑟夫环
一、实验类别:设计型实验。
二、问题描述:约瑟夫环问题是:n个人p0,p1,…pn 围坐成一个圆环。每个人pk持有一个秘密的数字ck。0 < ck <= m。开始时随机选取一个数 c = c0。每个人从p0 开始从1开始报数。报到数c 的人出对。然后以出队的人的秘密数字作为新的c 值。从出队者的下一个人顺时针从1 开始再报数。直到所有的人全部出队。
三、实验目的:检查学生对各种线性表的实现的掌握程度。
四、实验学时:2小时
五、实验组人数:1人。
六、实验设备环境:计算机。
七、实验原理及要点(知识点):各种队列的实现。
八、实验内容和要求:至少用3种以上的线性表来完成此试验。可以在带头节点的和不带头节点的线性表、循环的和非循环线性表、动态链表和静态链表以及向量(数组)之间选择三种。从空表开始,为每个人生成一个随机数。然后将此人加入到线性表之中。
九、可研究与探索的问题:给出各种实现的优缺点比较。
十、验收及实验报告要求:现场操作及运行效果验收。要求程序必须上机编译通过并且正确运行。给出试验报告。给出各种线性表实现的优缺点分析。
实验
二、长整数四则运算
一、实验类别:验证实验。
二、问题描述:计算机CPU本身可以做32位或者64位的整数四则运算。本试验要求对任意大小的整数实现其四则运算。将一个整数N表示为
N = ±(d0 + d1*B + d2*B2 + ….+ bk*Bk)
其中 1< B <= 256 为一个取定的整数。0 <= dk < B。用线性表存储{bk}。给出整数的四则运算程序。
三、实验目的:对具体的问题选择适当的线性表实现。
四、实验学时:2小时
五、实验组人数:3人。
六、实验设备环境:计算机。
七、实验原理及要点(知识点):各种队列的实现。
八、实验内容和要求:至少用2种以上的线性表来完成此试验。比较不同线性表实现的速度。
九、可研究与探索的问题:1)对具体问题选择合适的线性表实现。2)B 的选取问题。可 否选择更大的基B。B的选择所应考虑的因素。
十、验收及实验报告要求:现场操作及运行效果验收。要求程序必须上机编译通过并且正确运行。给出试验报告。能够得出用向量(数组)实现的线性表速度最快。
实验三、八皇后问题
一、实验类别:设计型实验。
二、问题描述:在n*n 的国际象棋棋盘上放置n个皇后,使每个皇后不受其他皇后的攻击。
三、实验目的:检查学生对堆栈和递归程序掌握程度。
四、实验学时:2小时
五、实验组人数:1人。
六、实验设备环境:计算机。
七、实验原理及要点(知识点):递归程序与堆栈
八、实验内容和要求: 分别用递归和堆栈完成此试验。统计程序运行时间与问题规模n 的关系。
九、可研究与探索的问题:问题的复杂度。当n 比较大时,讨论提高程序运行的方法。
十、验收及实验报告要求:现场操作及运行效果验收。要求程序必须上机编译通过并且正确运行。给出试验报告。找出程序运行速度的瓶颈。
实验
四、骑士遍历
一、实验类别:设计型实验。
二、问题描述:在国际象棋n*n的棋盘中,一匹马从棋盘中任意一格出发,要求用n2-1步走完所有的n2个格子。每个格子走且只走过一次。应如何走? 试给出算法实现。
三、实验目的:检查学生对堆栈与回溯算法的掌握。
四、实验学时:2小时
五、实验组人数:3人。
六、实验设备环境:计算机。
七、实验原理及要点(知识点):堆栈与回溯
八、实验内容和要求:用堆栈完成此试验。统计程序运行时间与问题规模n 的关系。
九、可研究与探索的问题:怎样枚举所有马下一步可走的位置。选择下一步所走位置的策略。注意由于这个程序非常耗时,在初期程序调试时应取较小的n。
十、验收及实验报告要求:现场操作及运行效果验收。要求程序必须上机编译通过并且正确运行。给出试验报告。找出程序运行速度的瓶颈。给出不同选择策略的程序运行 速度的比较结果。
实验
五、桌面计算器(表达式求值)
一、实验类别:设计型实验。
二、问题描述:模仿Unix系统下的dc命令。输入表达式字符串,按回车键后给出表达式的值。操作数为实数。
1)操作符有 “+”、“-”、“*”、“/”、“^”(乘方)
2)还可以有临时变量。用法如 pi = 3.1415926,r = 3, r*pi^2 3)还可以有事先定义的函数如:“sin()”(正弦)、“cos()”(余弦)、“log()”(对数)、“ln()”(自然对数)等函数。
三、实验目的:检查学生用堆栈解决实际问题。为本课程后续的内容提供伏笔。也为后继的课程如编译原理预习。
四、实验学时:2小时
五、实验组人数:3人。
六、实验设备环境:计算机。
七、实验原理及要点(知识点):堆栈,线性表,命令行参数的处理。
八、实验内容和要求:学生应至少应实现处理五个运算符:“+”、“-”、“*”、“/”、“^”(乘方)。可以用一个线性表来存储临时变量。另一个线性表来存储预定义的函数名。
九、可研究与探索的问题:查找临时变量名的不同方法。如哈希表,二叉树。
十、验收及实验报告要求:现场操作及运行效果验收。要求程序必须上机编译通过并且正确运行。给出试验报告。
实验
六、平衡排序二叉树
一、实验类别:设计型实验。
二、问题描述:随机生成一组整数p0,p1,…pn-1。将这组整数按生成的次序插入到一个平衡排序二叉树中。然后将p0,p1,…pn-1随机重新排列为q0,q1,…qn-1。再按照次次序将这些整数从生成的平衡排序二叉树删除。
三、实验目的:平衡排序二叉树的插入和删除。
四、实验学时:2小时
五、实验组人数:3人。
六、实验设备环境:计算机。
七、实验原理及要点(知识点):平衡排序二叉树的插入和删除中的旋转。
八、实验内容和要求:统计在平衡排序二叉树的插入和删除过程中各种旋转的出现次数。
九、可研究与探索的问题:研究平衡排序二叉树与一般的排序二叉树在插入和删除方面的性能比较。
十、验收及实验报告要求:现场操作及运行效果验收。要求程序必须上机编译通过并且正确运行。给出试验报告。给出在均匀的随机分布下,平衡排序二叉树与一般排序二叉树的性能比较。
实验
七、多重集合的实现
一、实验类别:设计型实验。
二、问题描述:实现数学上多重集合。所谓的多重集合类似于集合,但是一件东西可以放置多个副本。就如一个菜篮子里面可以放两个苹果。
三、实验目的:查找结构的各种实现。
四、实验学时:2小时
五、实验组人数:3人。
六、实验设备环境:计算机。
七、实验原理及要点(知识点):平衡排序二叉树的插入和删除、遍历,查找。哈希查找结构。
八、实验内容和要求: 假设集合中包含的元素是可以排序的。将多重集合封装成一个类。具体的实现可以是中序线索化的平衡排序二叉树,或者带父节点指针的平衡排序二叉树。多重集合的界面如下:
template
{
Multi_set(void);//构造函数,初始化为空集合~Multi_set(void);//析构函数
Multi_set& operator=(Multi_set const a);//重载运算符=
bool contains(T const& v)const;//如果集合包含v 则返回true,否则返回false
Multi_set& operator+=(Multi_set const&a);//将集合a 并到自身中。
Multi_set& operator-=(Multi_set const& a);//自身减去集合a
Multi_set& operator-=(T const& a);//自身减去一个元素a
};//~class Multi_set
//返回集合a,b的并
template
//返回集合a,b的差
template
//返回 a –{v}
template
Multi_set
九、可研究与探索的问题:哈希函数的选取。比较哈希与平衡排序二叉树的优缺点、性能和速度。
十、验收及实验报告要求:现场操作及运行效果验收。要求程序必须上机编译通过并且正确运行。给出试验报告。给出平衡排序二叉树实现的多重集合和用哈希实现的多重集合的性能比较。
实验
八、图论
一、实验类别:设计型实验。
二、问题描述:实现图论中的各种算法。
1)最小代价生成树的Krscal 算法和Prim算法。2)单源点的最短路径的Dijstra 算法。3)深度优先遍历与广度优先遍历。4)拓扑排序
5)求所有节点之间的最短路径Floyd算法
(在这五个小题中只要选作一个即可。)
三、实验目的:学习根据不同的运算来选取不同的存储结构。
四、实验学时:2小时
五、实验组人数:3人。
六、实验设备环境:计算机。
七、实验原理及要点(知识点):图论中的各种算法及其复杂度。根据不同的操作来决定图的存储结构。
八、实验内容和要求:至少实现上面五个小题目中的一个。从文件中读入一个图的信息。
九、可研究与探索的问题:高级数据结构如堆、并查集在图论算法中的应用。
十、验收及实验报告要求:现场操作及运行效果验收。要求程序必须上机编译通过并且正确运行。给出试验报告。给出在均匀的随机分布下,平衡排序二叉树与一般排序二叉树的性能比较。
实验
九、内部排序性能的比较
一、实验类别:设计型实验。
二、问题描述:随机生成一组整数p0,p1,…pn-1。对这组数据进行排序。
三、实验目的:比较不同排序算法的性能。
四、实验学时:2小时
五、实验组人数:3人。
六、实验设备环境:计算机。
七、实验原理及要点(知识点):各种内部排序算法。
八、实验内容和要求: 1)实现插入排序,选择排序,希尔排序,堆排序以及快速排序。2)快速排序的多种版本。3)对单链表实现归并排序。4)基数排序。
5)对小型问题(n = 10)、中型问题(n = 1000)以及大型问题(n = 1百万)分别统计不同排序算法的键值比较次数、键值移动次数以及程序运行时间。
26)排序算法的时间复杂度可以有O(n)和 O(n log n)。对相同复杂度的算法,给出他们运行时间与时间复杂度的比值。
九、可研究与探索的问题:研究快速排序算法的不同改进方法。自省排序算法。只需要移动而不需要交换的快速排序方法。
十、验收及实验报告要求:现场操作及运行效果验收。要求程序必须上机编译通过并且正确运行。给出试验报告。给出在均匀的随机分布下,对大中小问题的最快的排序算法。
教材及主要参考文献
[1] 严蔚敏、吴伟民,数据结构习题集,清华大学出版社,1999年
[2] John R.Hubbard, Data Structures with C++, China Machine Press, 2002.[3] Mark Allen Weiss, Data Structures and Problem Solving Using C++, 2ed, 清华大学出版社。2004年。[4] Robert Sedgewick,Algorithms in C Part 1 – 4: Fundamentals, Data Structures, Sorting, rdSearching, 3, 中国电力出版社,2003年。
[5] 严蔚敏、吴伟民,数据结构(C语言版),清华大学出版社,2006年
第二篇:算法与数据结构实验
金陵科技学院实验报告
学 生 实 验 报 告 册
课程名称:
学生学号:
所属院部:
(理工类)
算法与数据结构 专业班级: 13网络工程
1305106009 学生姓名: 陈韬
网络与通信工程学院 指导教师: 沈奇 14 ——20 15 学年 第 1 学期
金陵科技学院教务处制
金陵科技学院实验报告
实验报告书写要求
实验报告原则上要求学生手写,要求书写工整。若因课程特点需打印的,要遵照以下字体、字号、间距等的具体要求。纸张一律采用A4的纸张。
实验报告书写说明
实验报告中一至四项内容为必填项,包括实验目的和要求;实验仪器和设备;实验内容与过程;实验结果与分析。各院部可根据学科特点和实验具体要求增加项目。
填写注意事项
(1)细致观察,及时、准确、如实记录。(2)准确说明,层次清晰。
(3)尽量采用专用术语来说明事物。
(4)外文、符号、公式要准确,应使用统一规定的名词和符号。(5)应独立完成实验报告的书写,严禁抄袭、复印,一经发现,以零分论处。
实验报告批改说明
实验报告的批改要及时、认真、仔细,一律用红色笔批改。实验报告的批改成绩采用百分制,具体评分标准由各院部自行制定。
实验报告装订要求
实验批改完毕后,任课老师将每门课程的每个实验项目的实验报告以自然班为单位、按学号升序排列,装订成册,并附上一份该门课程的实验大纲。
金陵科技学院实验报告
实验项目名称: 顺序表 实验学时: 2 同组学生姓名: 实验地点: 实验日期: 实验成绩: 批改教师: 批改时间:
金陵科技学院实验报告
实验1 顺序表
一、实验目的和要求
掌握顺序表的定位、插入、删除等操作。
二、实验仪器和设备
Turbo C 2.0/ Visual C++
三、实验内容与过程(含程序清单及流程图)
1、必做题
(1)编写程序建立一个顺序表,并逐个输出顺序表中所有数据元素的值。编写主函数测试结果。
(2)编写顺序表定位操作子函数,在顺序表中查找是否存在数据元素x。如果存在,返回顺序表中和x值相等的第1个数据元素的序号(序号从0开始编号);如果不存在,返回-1。编写主函数测试结果。(3)在递增有序的顺序表中插入一个新结点x,保持顺序表的有序性。
解题思路:首先查找插入的位置,再移位,最后进行插入操作;从第一个元素开始找到第一个大于该新结点值x的元素位置i即为插入位置;然后将从表尾开始依次将元素后移一个位置直至元素i;最后将新结点x插入到i位置。
(4)删除顺序表中所有等于X的数据元素。
2、选做题
(5)已知两个顺序表A和B按元素值递增有序排列,要求写一算法实现将A和B归并成一个按元素值递减有序排列的顺序表(允许表中含有值相同的元素)。
程序清单:
#include
金陵科技学院实验报告
} sequenlist;sequenlist L={{1,3,5,5,7,8,10,12,17},8};void print_list(){ int i;for(i=0;i<=L.last;i++)printf(“%4d”,L.data[i]);} void find_all_x(int x){ int found=0,i;for(i=0;i<=L.last;i++)if(L.data[i]==x){ printf(“%3d”,i+1);found=1;} if(found==0)printf(“-1n”);} void insert_x(int x){ int loc,i;for(i=0;i<=L.last;i++)if(x 金陵科技学院实验报告 loc=i;for(i=L.last;i>=loc;i--)L.data[i+1]=L.data[i];L.data[loc]=x;L.last++;} void delete_x(int x){ int i,j,found=0;for(i=0;i<=L.last;i++)if(x==L.data[i]){ found=1;for(j=i+1;j<=L.last;j++)L.data[j-1]=L.data[j];i--;L.last--;} if(found==0)printf(“x is not foundn”);else { printf(“x is deletedn”);printf(“the list after deletion is:n”);print_list(); 金陵科技学院实验报告 } } void main(){ int x,choice;while(1){ printf(“**********menu**********n”);printf(“ 1--printn”);printf(“ 2--searchn”);printf(“ 3--insertn”);printf(“ 4--deleten”);printf(“ 5--exitn”);printf(“please input your choice:”);scanf(“%d”,&choice); switch(choice){case 1: printf(“the original list is:n”);print_list();break;case 2: printf(“pls input x you want to search:n”); 金陵科技学院实验报告 scanf(“%d”,&x);find_all_x(x);break;case 3: printf(“pls input x you want to insert:n”);scanf(“%d”,&x);insert_x(x);printf(“the list after insertion is:n”);print_list();break;case 4: printf(“pls input x you want to delete:n”);scanf(“%d”,&x);delete_x(x);printf(“the list after deletion is:n”);print_list();break;case 5: exit(0);} } } 金陵科技学院实验报告 金陵科技学院实验报告 四、实验结果与分析(程序运行结果及其分析) 五、实验体会(遇到问题及解决办法,编程后的心得体会) 金陵科技学院实验报告 实验项目名称: 单链表 实验学时: 2 同组学生姓名: 实验地点: 实验日期: 实验成绩: 批改教师: 批改时间: 金陵科技学院实验报告 实验2 单链表 一、实验目的和要求 1、实验目的 掌握单链表的定位、插入、删除等操作。 2、实验要求 (1)注意链表的空间是动态分配的,某结点不用之后要及时进行物理删除,以便释放其内存空间。 (2)链表不能实现直接定位,一定注意指针的保存,防止丢失。 二、实验仪器和设备 Turbo C 2.0/ Visual C++ 三、实验内容与过程(含程序清单及流程图) 1、必做题 (1)编写程序建立一个单链表,并逐个输出单链表中所有数据元素。(2)在递增有序的单链表中插入一个新结点x,保持单链表的有序性。 解题思路:首先查找插入的位置然后进行插入操作;从第一个结点开始找到第一个大于该新结点值的结点即为插入位置;然后在找到的此结点之前插入新结点;注意保留插入位置之前结点的指针才能完成插入操作。 (3)编写实现带头结点单链表就地逆置的子函数,并编写主函数测试结果。 2、选做题 已知指针LA和LB分别指向两个无头结点单链表的首元结点。要求编一算法实现,从表LA中删除自第i个元素起共len个元素后,将它们插入到表LB中第j个元素之前。程序清单: 金陵科技学院实验报告 金陵科技学院实验报告 四、实验结果与分析(程序运行结果及其分析) 五、实验体会(遇到问题及解决办法,编程后的心得体会) 金陵科技学院实验报告 实验项目名称: 堆栈和队列 实验学时: 2 同组学生姓名: 实验地点: 实验日期: 实验成绩: 批改教师: 批改时间: 金陵科技学院实验报告 实验3 堆栈和队列 一、实验目的和要求 (1)掌握应用栈解决问题的方法。(2)掌握利用栈进行表达式求和的算法。 (3)掌握队列的存储结构及基本操作实现,并能在相应的应用问题中正确选用它们。 二、实验仪器和设备 Turbo C 2.0/ Visual C++ 三、实验内容与过程(含程序清单及流程图) 1、必做题 (1)判断一个算术表达式中开括号和闭括号是否配对。(2)测试“汉诺塔”问题。 (3)假设称正读和反读都相同的字符序列为”回文”,试写一个算法判别读入的一个以’@’为结束符的字符序列是否是“回文”。 2、选做题 在顺序存储结构上实现输出受限的双端循环队列的入列和出列算法。设每个元素表示一个待处理的作业,元素值表示作业的预计时间。入队列采取简化的短作业优先原则,若一个新提交的作业的预计执行时间小于队头和队尾作业的平均时间,则插入在队头,否则插入在队尾。程序清单: 金陵科技学院实验报告 四、实验结果与分析(程序运行结果及其分析) 金陵科技学院实验报告 五、实验体会(遇到问题及解决办法,编程后的心得体会) 金陵科技学院实验报告 实验项目名称: 串 实验学时: 2 同组学生姓名: 实验地点: 实验日期: 实验成绩: 批改教师: 批改时间: 金陵科技学院实验报告 实验4 串 一、实验目的和要求 掌握串的存储及应用。 二、实验仪器和设备 Turbo C 2.0/ Visual C++ 三、实验内容与过程(含程序清单及流程图) 1、必做题 (1)编写输出字符串s中值等于字符ch的第一个字符的函数,并用主函数测试结果。 (2)编写输出字符串s中值等于字符ch的所有字符的函数,并用主函数测试结果。 解题思路:可以将第一题程序改进成一个子函数,在本题中循环调用。(3)设字符串采用单字符的链式存储结构,编程删除串s从位置i开始长度为k的子串。 2、选做题 假设以链结构表示串,编写算法实现将串S插入到串T中某个字符之后,若串T中不存在这个字符,则将串S联接在串T的末尾。 提示:为提高程序的通用性,插入位置字符应设计为从键盘输入。程序清单: 金陵科技学院实验报告 四、实验结果与分析(程序运行结果及其分析) 金陵科技学院实验报告 五、实验体会(遇到问题及解决办法,编程后的心得体会) 金陵科技学院实验报告 实验项目名称: 二叉树 实验学时: 2 同组学生姓名: 实验地点: 实验日期: 实验成绩: 批改教师: 批改时间: 金陵科技学院实验报告 实验5 二叉树 一、实验目的和要求 (1)掌握二叉树的生成,以及前、中、后序遍历算法。(2)掌握应用二叉树递归遍历思想解决问题的方法。 二、实验仪器和设备 Turbo C 2.0/ Visual C++ 三、实验内容与过程(含程序清单及流程图) 1、必做题 (1)建立一棵二叉树。对此树进行前序遍历、中序遍历及后序遍历,输出遍历序列。 (2)在第一题基础上,求二叉树中叶结点的个数。(3)在第一题基础上,求二叉树中结点总数。(4)在第一题基础上,求二叉树的深度。 2、选做题 已知一棵完全二叉树存于顺序表sa中,sa.elem[1…sa.last]存储结点的值。试编写算法由此顺序存储结构建立该二叉树的二叉链表。 解题思路:根据完全二叉树顺序存储的性质来确定二叉树的父子关系即“还原”了二叉树,之后再按照二叉树二叉链表的构造方法进行建立。完全二叉树顺序存储的一个重要性质为,第i个结点的左孩子是编号为2i的结点,第i个结点的右孩子是编号为2i+1的结点。程序清单: 金陵科技学院实验报告 四、实验结果与分析(程序运行结果及其分析) 金陵科技学院实验报告 五、实验体会(遇到问题及解决办法,编程后的心得体会) 金陵科技学院实验报告 实验项目名称: 图 实验学时: 2 同组学生姓名: 实验地点: 实验日期: 实验成绩: 批改教师: 批改时间: 金陵科技学院实验报告 实验6 图 一、实验目的和要求 (1)熟练掌握图的基本概念、构造及其存储结构。 (2)熟练掌握对图的深度优先搜索遍历和广度优先搜索遍历的算法。 二、实验仪器和设备 Turbo C 2.0/ Visual C++ 三、实验内容与过程(含程序清单及流程图) 1、必做题 (1)构造一个无向图(用邻接矩阵表示存储结构)。 (2)对上面所构造的无向图,进行深度优先遍历和广度优先遍历,输出遍历序列。 2、选做题 采用邻接表存储结构,编写一个判别无向图中任意给定的两个顶点之间是否存在一条长度为k的简单路径的算法。简单路径是指其顶点序列中不含有重复顶点的路径。提示:两个顶点及k值均作为参数给出。程序清单: 金陵科技学院实验报告 四、实验结果与分析(程序运行结果及其分析) 五、实验体会(遇到问题及解决办法,编程后的心得体会) 金陵科技学院实验报告 实验项目名称: 排序 实验学时: 2 同组学生姓名: 实验地点: 实验日期: 实验成绩: 批改教师: 批改时间: 金陵科技学院实验报告 实验7 排序 一、实验目的和要求 (1)熟练掌握希尔排序、堆排序、直接插入排序、起泡排序、快速排序、直接选择排序、归并排序和基数排序的基本概念。 (2)掌握以上各种排序的算法。区分以上不同排序的优、缺点。 二、实验仪器和设备 Turbo C 2.0/ Visual C++ 三、实验内容与过程(含程序清单及流程图) 1、必做题 用随机数产生100000个待排序数据元素的关键字值。测试下列各排序函数的机器实际执行时间(至少测试两个):直接插入排序、希尔排序(增量为4,2,1)、冒泡排序、快速排序、直接选择排序、堆排序。 2、选做题 假设含n个记录的序列中,其所有关键字为值介于v和w之间的整数,且其中很多关键字的值是相同的。则可按如下方法排序:另设数组number[v…w],令number[i]统计关键字为整数i的纪录个数,然后按number重排序列以达到有序。试编写算法实现上述排序方法,并讨论此种方法的优缺点。程序清单: 金陵科技学院实验报告 四、实验结果与分析(程序运行结果及其分析) 金陵科技学院实验报告 五、实验体会(遇到问题及解决办法,编程后的心得体会) 金陵科技学院实验报告 实验项目名称: 查找 实验学时: 2 同组学生姓名: 实验地点: 实验日期: 实验成绩: 批改教师: 批改时间: 金陵科技学院实验报告 实验8 查找 一、实验目的和要求 (1)掌握顺序表查找、有序表查找、索引顺序表查找的各种算法。(2)掌握哈希表设计。 二、实验仪器和设备 Turbo C 2.0/ Visual C++ 三、实验内容与过程(含程序清单及流程图) 1、必做题 (1)在一个递增有序的线性表中利用二分查找法查找数据元素X。 2、选做题 (2)构造一个哈希表,哈希函数采用除留余数法,哈希冲突解决方法采用链地址法。设计一个测试程序进行测试。 提示:构造哈希表只是完成查找的第一步,大家应该掌握在哈希表上进行查找的过程,可以试着编程序实现。程序清单: 金陵科技学院实验报告 四、实验结果与分析(程序运行结果及其分析) 五、实验体会(遇到问题及解决办法,编程后的心得体会) 《数据结构》实验(训)指导书 电气与信息工程学院实验中心 前 言 《数据结构》是计算机相关专业的一门核心基础课程,也是很多高校研究生入学考试专业课必考课程之一。它主要介绍线性结构、树型结构、图形结构三种逻辑结构元素的存储实现,在此基础上介绍一些典型算法及时、空效率分析。这门课程的主要任务是培养学生的算法分析、设计能力及良好的程序设计习惯。通过学习,要求学生能够掌握典型算法的设计思想及程序实现,能够根据实际问题选取合适的存储方案,设计出简洁、高效、实用的算法,为后续课程的学习及软件开发打下良好的基础。学习这门课程,习题和实验是两个关键环节。学生理解算法的最佳途径是上机实验。因此,实验环节的好坏是学生能否学好《数据结构》的关键。为了更好地配合学生实验,特编写该实验指导书。 一、实验目的、要求和任务 计算机编程中加工处理的对象是数据,而数据具有一定的组织结构,所以学习编写计算机程序仅仅了解计算机语言是不够的,还必须掌握数据组织、存储和运算的一般方法,这是数据结构课程中学习和研究的内容。由于数据结构的原理和算法较抽象,而该课程一般在本科低年级开设,对于计算机程序设计知识的初学者,理解和掌握其中的原理就显得较为困难。 1.熟练掌握C语言的编辑、编译、调试程序。2.会书写类C语言的算法,并将算法转变为程序实现。 3.正确理解各种数据结构的逻辑特性和存储表示和基本操作的算法实现。4.有较强的逻辑分析能力。 5.针对问题的不同选择合适的数据结构,提高算法设计的能力和动手实验的技能。 6.学会分析研究计算机加工的数据结构的特性,以便为应用设计的数据选择适当的逻辑结构、存储结构及其相应的算法,并初步掌握算法的时间分析和空间分析的技术。 7.本课程的学习过程也是复杂程序设计的训练过程,要求学生编写的程序结构清楚、正确易读,符合软件过程的规范,从而培养学生的数据抽象能力。 8.通过若干数据结构应用实例,引导学生学习数据类型的使用,为今后学习面向对象的程序做一些铺垫。 二、实验基本内容及学时分配 为了达到实验目的,本课程安排了4个实验单元,训练的重点在于基本的数据结构,而不是强调面面俱到。各实验单元与教科书的各章只具有粗略的对应关系,一个实验题常常涉及到几部分教学内容。总学时:8学时。 1、线性表(2学时) (1)熟悉线性表的基本运算在两种存储结构(顺序结构和链式结构)上的实现;(2)以线性表的各种操作(建立、插入、删除等)的实现为重点; (3)通过本次实验帮助学生提高C语言的编程能力(特别是函数参数、指针类型、链表的使用)。 2、数组和广义表(2学时)(1)掌握稀疏矩阵的压缩存储 (2)掌握稀疏矩阵的转置算法 3、树与二叉树(2学时) 常见的二叉树遍历算法有先序遍历,中序遍历和后序遍历算法。实现简单的先序遍历,中序遍历和后序遍历算法。 4、排序(2学时) 常见的内部排序算法,插入类排序算法,如直接插入排序和希尔排序;交换类排序算法,如冒泡排序和快速排序;选择类排序算法,如简单选择排序、树形选择类排序和堆排序。实冒泡排序或者直接插入排序算法。 三、说明 该课程采用理论与实践相结合的教学方法,集知识性与趣味性于一体,达到良好的教学效果。硬件要求:在多媒体教室讲解及演示。为保证教学顺利进行,要求实验室提供电脑等设备。学生每次上机实验都必须遵守实验室的有关规定。 四、实验报告规范 实验报告的内容包括: 1、实验目的:说明实验所验证的知识点。 2、需求分析:以无歧义的陈述说明程序设计的任务、约束条件、输入输出要求、对功能的规定及模型。 3、逻辑设计:说明本程序中用到的所有抽象的数据类型的定义、主程序的流程以及各程序模块之间的层次调用关系。 4、详细设计:逻辑设计中定义的所有数据类型的实现,核心算法的设计描述、人机界面设计、函数之间调用关系的描述,主要功能的算法框架,测试数据设计。 5、测试分析:测试结果的分析与讨论,测试过程中遇到的主要问题及采取的解决措施。 6、心得:软件设计与实现过程中的经验与体会,进一步改进的设想。 7、程序清单:源程序中应有足够的注释。如果提交源程序软盘,列出程序文件名。 五、如何提高上机效率 为了提高上机的效率,真正达到实验目的,要求同学做好实验前的准备工作,写好实验预习报告,即实验报告规范中的1)、2)、3)、4)部分,编写好程序,并用一组测试数据手工执行程序静态检查程序是否有错,通过阅读、执行程序或给别人讲解自己的程序而深入全面地理解程序逻辑,提高程序的正确性。对C语言程序不熟悉的同学,上机时最好带上C语言程序设计的教材,以备查阅。调试中遇到问题,应认真分析,确定可疑点,设置调试断点或输出断点处变量的值,以便发现问题,迅速排除问题,加快调试速度。 实验室要求: 不能旷课,不迟到,不穿拖鞋进实验室 实验需预习报告(不能单纯抄写,预习程序代码)实验报告(总结,注释,实验结果) 目 录 实验一 线性表实验(设计性实验)..........................................4 实验二 数组和广义表实验(设计性实验)....................................6 实验三 树与二叉树(设计性实验)..........................................8 实验四 排序(设计性实验)................................................9 实验一 线性表实验(设计性实验) 一、实验目的 1.熟悉C语言的上机环境,进一步掌握C语言的结构特点。2.掌握线性表的顺序存储结构的定义及C语言实现。 3.掌握线性表的链式存储结构——单链表的定义及C语言实现。4.掌握线性表在顺序存储结构即顺序表中的各种基本操作。5.掌握线性表在链式存储结构——单链表中的各种基本操作。 二、实验内容 1.顺序线性表的建立、插入及删除。2.链式线性表的建立、插入及删除。 三、实验仪器设备与器材 上机电脑 四、实验步骤 1.建立含n个数据元素的顺序表并输出该表中各元素的值及顺序表的长度。 2.利用前面的实验先建立一个顺序表L={21,23,14,5,56,17,31},然后在第i个位置插入元素68。 3.建立一个带头结点的单链表,结点的值域为整型数据。要求将用户输入的数据按尾插入法来建立相应单链表。 五、实验提示 1.由于C语言的数组类型也有随机存取的特点,一维数组的机内表示就是顺序结构。因此,可用C语言的一维数组实现线性表的顺序存储。 在此,我们利用C语言的结构体类型定义顺序表: #define MAXSIZE 1024 typedef int elemtype;/* 线性表中存放整型元素 */ typedef struct { elemtype vec[MAXSIZE];int len;/* 顺序表的长度 */ }sequenlist;将此结构定义放在一个头文件sqlist.h里,可避免在后面的参考程序中代码重复书写,另外在该头文件里给出顺序表的建立及常量的定义。 2.注意如何取到第i个元素,在插入过程中注意溢出情况以及数组的下标与位序(顺序表中元素的次序)的区别。 3.单链表的结点结构除数据域外,还含有一个指针域。用C语言描述结点结构如下: typedef int elemtype;typedef struct node { elemtype data;//数据域 struct node *next;//指针域 }linklist; 注意结点的建立方法及构造新结点时指针的变化。构造一个结点需用到C语言的标准函数malloc(),如给指针变量p分配一个结点的地址: p=(linklist *)malloc(sizeof(linklist));该语句的功能是申请分配一个类型为linklist的结点的地址空间,并将首地址存入指针变量p 中。当结点不需要时可以用标准函数free(p)释放结点存储空间,这时p为空值(NULL)。 六、实验总结与思考 1.如果按由表尾至表头的次序输入数据元素,应如何建立顺序表。2.在main函数里如果去掉L=&a语句,会出现什么结果? 实验二 数组和广义表实验(设计性实验) 一、实验目的 1.掌握稀疏矩阵的压缩存储 2.掌握稀疏矩阵的转置算法 二、实验内容 1.实现上三角阵的压缩存储。 2.用三元组顺序表存储稀疏矩阵,并实现矩阵的转置。 三、实验仪器设备与器材 上机电脑 四、实验步骤 1.创建一个数组。2.输入数据 3.给定矩阵任一元素的下标,4.打印给定下标所对应的数据。5.创建三元组顺序表。a22 7.A输出对应的矩阵。 21五、实验提示 aaa6.输入矩阵中的数据。11a11a313233a21221.对于如下对称矩阵: Aaaa424341a31a32a331个位置,a21存入到第二个位置,将它们存入到一个线性数组中B,不存非零元素,a11存入到第a41a42aija44aij的位则aij能存到第几个位置,我们要以用梯形公式算面积。置是它上面的元素之和再加上左边的元素之和。 它上面的元素之和为((1+(i-1))×(i-1)/2,左边的元素为(j-1)所以这个元素存储的位置为k=i(i-1)/2+j-1。 因为矩阵A为对称矩阵,(另一部分没有写出),所以另一部分的元素为 k=j(j-1)/2+i-1.所以存在关系k=i(i-1)/2+j-1(i>j)和k=j(j-1)/2+i-1(i 2.结点结构 struct triple{ int i,j;//非零元的行下标和列下标 elemtype e;//非零元数据} 三元组顺序表存储类型 struct tsmatrix{ triple data[12500];aaa44 int mu,nu,tu;} 三元顺序表的转置 方法:(1)将矩阵行列互换,(2)重排矩阵 六、实验总结与思考 1.如何存储三对角阵? 2.如何用行逻辑链接顺序表及十字链表存储稀疏矩阵? 实验三 树与二叉树(设计性实验) 一、实验目的 1.掌握稀疏矩阵的压缩存储 2.掌握稀疏矩阵的转置算法 二、实验内容 1.练习二叉树的建立与存储 2.练习二叉树的遍历 三、实验仪器设备与器材 上机电脑 四、实验步骤 1.建立自己的头文件BT.H,内容包括二叉链表的结构描述、二叉树的建立、二叉树的先序、中序与后序遍历算法。 2.建立二叉树,并通过调用函数,,输出先序遍历、中序遍历与后序遍历的结果。 五、实验提示 建立二叉树的代码如下: BTCHINALR * createbt(){ BTCHINALR *q;struct node1 *s[30];int j,i,x;printf(“建立二叉树,输入结点对应的编号和值,编号和值之间用逗号隔开nn”);printf(“i,x = ”);scanf(“%d,%c”,&i,&x);while(i!= 0 && x!= '$') {q =(BTCHINALR*)malloc(sizeof(BTCHINALR));/*建立一个新结点q*/ q->data = x;q->lchild = NULL;q->rchild = NULL; s[i] = q;/*q新结点地址存入s指针数组中*/ if(i!= 1)/*i = 1,对应的结点是根结点*/ {j = i / 2;/*求双亲结点的编号j*/ if(i % 2 == 0)s[j]->lchild = q;/*q结点编号为偶数则挂在双亲结点j的左边*/ else s[j]->rchild = q;} /*q结点编号为奇数则挂在双亲结点j的右边*/ printf(“i,x = ”); scanf(“%d,%c”,&i,&x);} return s[1];/*返回根结点地址*/ } 六、实验总结与思考 1.如何用孩子兄弟表示法存储树? 2.熟悉及难赫夫曼树。 实验四 排序(设计性实验) 一、实验目的 1.掌握常用的排序方法,并掌握用高级语言实现排序算法的方法; 2.深刻理解排序的定义和各种排序方法的特点,并能加以灵活应用; 3.了解各种方法的排序过程及其时间复杂度的分析方法。 二、实验内容 统计成绩 给出n个学生的考试成绩表,每条信息由姓名和分数组成,试设计一个算法: (1)按分数高低次序,打印出每个学生在考试中获得的名次,分数相同的为同一名次;(2)按名次列出每个学生的姓名与分数。 三、实验仪器设备与器材 上机电脑 四、实验步骤 1.定义结构体。2.定义结构体数组。 3.定出主程序,对数据进行排序。 五、实验提示 #define n 30 typedef struct student { char name[8];int score;} student R[n];main(){ int num, i, j, max, temp;printf(“n请输入学生成绩: n”);for(i=0;i if(max!=i){ temp = R[max];R[max]=R[i];R[i]= temp;} if((i>0)&&(R[i].score 六、实验总结与思考 1.快速排序算法解决本问题。2.较各种排序算法的优缺点及。 3.使用其它排序算法实现该问题(直接插入排序、希尔排序、简单选择排序、堆排序等)。 数 据 结 构 实 验 指 导 书 南京工程学院 信息管理与信息系统教研室 2014年3月 实验一 线性表操作 一、实验目的 1.熟悉C语言的上机环境,进一步掌握C语言的结构特点。2.掌握线性表的顺序存储结构的定义及C语言实现。 3.掌握线性表的链式存储结构——单链表的定义及C语言实现。4.掌握线性表在顺序存储结构即顺序表中的各种基本操作。5.掌握线性表在链式存储结构——单链表中的各种基本操作。 二、实验内容 1.顺序线性表的建立、插入及删除。 2.链式线性表的建立、插入及删除。 三、实验步骤 1.建立含n个数据元素的顺序表并输出该表中各元素的值及顺序表的长度。2.利用前面的实验先建立一个顺序表L={21,23,14,5,56,17,31},然后在第i个位置插入元素68。 3.建立一个带头结点的单链表,结点的值域为整型数据。要求将用户输入的数据按尾插入法来建立相应单链表。 四、实现提示 1.由于C语言的数组类型也有随机存取的特点,一维数组的机内表示就是顺序结构。因此,可用C语言的一维数组实现线性表的顺序存储。 在此,我们利用C语言的结构体类型定义顺序表: #define MAXSIZE 1024 typedef int elemtype;/* 线性表中存放整型元素 */ typedef struct { elemtype vec[MAXSIZE];int len;/* 顺序表的长度 */ }sequenlist;将此结构定义放在一个头文件sqlist.h里,可避免在后面的参考程序中代码重复书写,另外在该头文件里给出顺序表的建立及常量的定义。 2.注意如何取到第i个元素,在插入过程中注意溢出情况以及数组的下标与位序(顺序表中元素的次序)的区别。 3.单链表的结点结构除数据域外,还含有一个指针域。用C语言描述结点结构如下: typedef int elemtype;typedef struct node { elemtype data;//数据域 struct node *next;//指针域 }linklist;注意结点的建立方法及构造新结点时指针的变化。构造一个结点需用到C语言的标准函数malloc(),如给指针变量p分配一个结点的地址: p=(linklist *)malloc(sizeof(linklist));该语句的功能是申请分配一个类型为linklist的结点的地址空间,并将首地址存入指针变量p 中。当结点不需要时可以用标准函数free(p)释放结点存储空间,这时p为空值(NULL)。 五、思考与提高 1.如果按由表尾至表头的次序输入数据元素,应如何建立顺序表。2.在main函数里如果去掉L=&a语句,会出现什么结果? 实验二 栈和队列的应用 一、实验目的 1.掌握栈的顺序表示和实现 2.掌握队列的链式表示和实现 二、实验内容 1.编写一个程序实现顺序栈的各种基本运算。2.实现队列的链式表示和实现。 三、实验步骤 1.顺序栈(1)初始化顺序栈;(2)插入元素(3)删除栈顶元素(4)取栈顶元素(5)遍历顺序栈(6)置空顺序栈 2.链队列 (1)初始化并建立链队列(2.)入链队列(3)出链队列(4)遍历链队列 四、实现提示 1./*定义顺序栈的存储结构*/ typedef struct { ElemType stack[MAXNUM];int top;}SqStack; /*初始化顺序栈函数*/ void InitStack(SqStack *p) {q=(SqStack*)malloc(sizeof(SqStack));/*申请空间*/} /*入栈函数*/ void Push(SqStack *p,ElemType x){if(p->top SqStack S; ElemType e; int N; /*初始化顺序栈*/ /*入栈*/ /*出栈*/ /*遍历顺序栈*/ getch();} 2./*定义链队列*/ typedef struct Qnode { ElemType data;struct Qnode *next;}Qnodetype;typedef struct { Qnodetype *front;Qnodetype *rear;}Lqueue; /*初始化并建立链队列函数*/ void creat(Lqueue *q) { h=(Qnodetype*)malloc(sizeof(Qnodetype));/*初始化申请空间*/ h->next=NULL;q->front=h;q->rear=h;for(i=1;i<=n;i++)*利用循环快速输入数据*/ { scanf(“%d”,&x);Lappend(q,x);} /*利用入链队列函数快速输入数据*/ } /*入链队列函数*/ void Lappend(Lqueue *q,int x){ s->data=x;s->next=NULL;q->rear->next=s;q->rear=s;} /*出链队列函数*/ ElemType Ldelete(Lqueue *q){ p=q->front->next;q->front->next=p->next;if(p->next==NULL)q->rear=q->front;x=p->data;free(p);} /*释放空间*/ /*遍历链队列函数*/ void display(Lqueue *q){ while(p!=NULL)/*利用条件判断是否到队尾*/ { printf(“%d-->”,p->data);p=p->next;} } 可参考如下代码: #include “stdio.h” #define MaxSize 100 typedef int ElemType;main(){ LinkQueue Q; ElemType e; /*初始化并建立链队列*/ /*入链队列*/ /*出链队列*/ *遍历链队列*/ } DestoryQueue(&Q); getch();} 五、思考与提高 1.读栈顶元素的算法与退栈顶元素的算法有何区别? 试写一个算法,判别读入的一个以‘@’为结束符的字符序列是否是‚回文‛。实验三 树操作 一、实验目的 1.通过实验,掌握二叉树的建立与存储 2.通过实验,掌握二叉树的遍历方法 二、实验内容 1.练习二叉树的建立与存储 2.练习二叉树的遍历 三、实验步骤 1.建立二叉链表的结构描述、二叉树的建立、二叉树的先序、中序与后序遍历算法。 2.建立二叉树,并通过调用函数, 输出先序遍历、中序遍历与后序遍历的结果。 四、实现提示 1.采用递归方法建立二叉树: 首先建立二叉树的根 结点,然后建立其左右子树,直到空子树为止。 2.先序遍历、中序遍历与后序遍历二叉树。#include BiTree CreateBiTree(BiTree &T){ } /*先序遍历*/ Status PreOrderTraverse(BiTree T){ } /*中序遍历*/ Status InOrderTraverse(BiTree T){ } /*后序遍历*/ Status PostOrderTraverse(BiTree T){ } int main(){ BiTree T;CreateBiTree(T);PreOrderTraverse(T);printf(“n”);/*先序遍历*/ InOrderTraverse(T);printf(“n”);/*中序遍历*/ PostOrderTraverse(T);printf(“n”);/*后序遍历*/ return 0;} 五、思考与提高 编写递归算法,计算二叉树中叶子结点的数目。 目 录 实验规则················································2 实验环境················································2 实验报告要求············································3 实验一 单链表 (一)······································4 实验二 单链表 (二)······································5 实验三 栈···············································6 实验四 二叉树···········································7 实验五 最短路径·········································8 实验六 内部排序·········································9 实 验 规 则 为了顺利完成实验教学任务,确保人身、设备的安全,培养严谨、踏实、实事求是的科学作风和爱护国家财产的优良品质,特制定以下实验规则: 1、实验前必须充分预习,完成指定的预习任务。预习要求如下: (1)认真阅读指导书,进行必要的设计与计算。(2)熟悉实验内容。 (3)预先复习,并按要求编写程序。(4)未完成预习任务者不得进入实验室。 2、遵守以下纪律: (1)在实验室不得做和实验无关的事情。 (2)进行任课老师指定内容以外的实验,必须经指导教师同意。(3)遵守纪律,不迟到。 (4)保持实验室内安静、整洁,爱护公物,不许乱写乱画。 实 验 环 境 本实验在386以上的微机上进行,运行环境为VC6.0。 实验报告要求 1、实验题目 2.实验目的 3.实验环境 4.实验内容与完成情况(可以附上自主设计的源程序)5.出现的问题及对问题的解决方案 6.实验思考:(学生对本次实验的收获的总结) 实验一 单链表 (一)一、实验目的 掌握线性表的链式存储结构及其基本操作。 二、预习要求 1、看懂书上的算法,深入理解链表的物理存储模式和逻辑模式。 2、根据要求,编写程序准备上机调试。 三、实验内容 实现一个简单的学生信息管理系统,该系统的功能有: 1、利用单链表建立学生基本信息表 2、浏览每个学生的信息 3、根据学号查询某个学生的基本信息 4、添加学生信息到单链表中 5、删除一个学生的信息 四、实现提示 设计结点的结构体类型,包括学生的学号、姓名、年龄、性别;要求设计一个简单的菜单界面,根据需要选择所要进行的操作;构造函数,每一个函数实现上述的一个功能。 实验二 单链表 (二)一、实验目的 掌握线性表的链式存储结构及其基本操作。 二、预习要求 1、看懂书上的算法,深入理解链表的物理存储模式和逻辑模式。 2、根据要求,编写程序准备上机调试。 三、实验内容 1、实现单链表的就地逆置。 2、建立两个非递减有序单链表,然后合并成一个非递减链表。 3、建立两个非递减有序单链表,然后合并成一个非递增链表。 4、编写一个主函数,调试上述算法。 四、选做题、思考题 1、如何用带表头结点的单链表作为多项式的存储表示,实现两个多项式的相加。 2、约毖夫环的实现。 3、如何利用文件实现学生信息的存取。 实验三 栈 一、实验目的 深入了解并掌握栈的特性及其在实际中的应用;熟练掌握栈的算法实现;运用栈操作求解实际问题。 二、预习要求 1、看懂书上的算法,深入理解栈的特性和存储结构,以便在实际问题背景下灵活运用。 2、根据要求,编写程序准备上机调试。 三、实验内容 利用栈实现数据的分类,要求当输入为偶数时进栈1,当输入为奇数时进栈2,最后分别从栈1和栈2输出偶数和奇数序列。 四、实现提示 1、开辟一个连续的存储空间,实现两个栈顺序存储空间的共享;分别在两端设置栈顶指针,并按要求实现栈操作。 2、采用顺序存储实现栈的初始化、入栈、出栈操作。 五、选做题、思考题 1、两栈空间共享时,栈满的条件是什么? 2、为停车场编制进行管理的模拟程序(习题集P96,2.1)。 3、编写程序,利用栈实现表达式求值。 实验四 二叉树 一、实验目的 通过实践掌握二叉树的存储结构和遍历思想;掌握二叉树的常见算法的程序实现。 二、预习要求 二叉树的三种遍历方法。 三、实验内容 1、输入字符序列,建立二叉链表。 2、利用栈,编写非递归算法,编程实现二叉树的中序遍历。 3、求二叉树的叶子结点个数。 4、在主函数中设计一个简单的菜单,分别调试上述算法。 四、选做题、思考题 1、如何实现二叉树的后序遍历(非递归)。 2、如何求二叉树的高度。 实验五 最短路径(旅游景点导游咨询模拟) 一、实验目的 利用图的最短路径原理为用户提供路径咨询,掌握求最短路径的算法并编程实现。 二、预习要求 学习了解图的存储结构,掌握求最短路径的两种算法。 三、实验内容 设计一个旅游景点导游模拟程序,为来访的客人提供景点最短路径的信息查询服务,任意选取n城市,构成一个有向带权图,图中顶点表示城市,边上的权值表示两点间的距离,根据用户指定的始点和终点输出相应的最短路径。 四、实现提示 咨询以用户和计算机的对话方式进行,由用户输入起始点和终点,输出信息:最短路径是多少?并指出所经过的城市。存储结构可选用邻接矩阵。 五、选做题、思考题 1.如何实现对城市信息进行编辑(如:添加或删除)的功能。 2.用邻接表作存储结构,求一指定景点出发,到其余各景点的最短路径。 实验六 内部排序 一、实验目的 直观感受算法的关键字比较次数和关键字移动次数。 二、预习要求 1、常见的排序算法(插入排序、交换排序、选择排序、归并排序、基数排序等)的思想、特点及其适用条件。 2、根据要求,编写程序准备上机调试。 三、实验内容 1、对直接插入排序和简单选择排序算法进行关键字比较次数和关键字移动次数的比较。 2、利用链式存储结构,编写程序,实现直接插入排序和冒泡排序。 四、实现提示 测试数据可以为几组典型的数据:正序、逆序、乱序。 五、选做题、思考题 1、快速排序算法的非递归实现。 2、结合实验,理解针对不同待排元素的特点而选择不同排序方法的重要性。 3、如何对本实验进行时间、空间的复杂度分析。第三篇:《数据结构》实验指导书
第四篇:《数据结构》实验指导书
第五篇:数据结构实验指导书