算法与数据结构实验册.docx
- 文档编号:9392387
- 上传时间:2023-05-18
- 格式:DOCX
- 页数:17
- 大小:66.76KB
算法与数据结构实验册.docx
《算法与数据结构实验册.docx》由会员分享,可在线阅读,更多相关《算法与数据结构实验册.docx(17页珍藏版)》请在冰点文库上搜索。
算法与数据结构实验册
学生实验报告册
(理工类)
课程名称:
算法与数据结构专业班级:
14计单
(2)
学生学号:
1413201007学生姓名:
毛卓
所属院部:
计算机工程学院指导教师:
章海鸥
2016——2017学年第二学期
金陵科技学院教务处制
实验报告书写要求
实验报告原则上要求学生手写,要求书写工整。
若因课程特点需打印的,要遵照以下字体、字号、间距等的具体要求。
纸张一律采用A4的纸张。
实验报告书写说明
实验报告中一至四项内容为必填项,包括实验目的和要求;实验仪器和设备;实验内容与过程;实验结果与分析。
各院部可根据学科特点和实验具体要求增加项目。
填写注意事项
(1)细致观察,及时、准确、如实记录。
(2)准确说明,层次清晰。
(3)尽量采用专用术语来说明事物。
(4)外文、符号、公式要准确,应使用统一规定的名词和符号。
(5)应独立完成实验报告的书写,严禁抄袭、复印,一经发现,以零分论处。
实验报告批改说明
实验报告的批改要及时、认真、仔细,一律用红色笔批改。
实验报告的批改成绩采用百分制,具体评分标准由各院部自行制定。
实验报告装订要求
实验批改完毕后,任课老师将每门课程的每个实验项目的实验报告以自然班为单位、按学号升序排列,装订成册,并附上一份该门课程的实验大纲。
实验项目名称:
顺序表实验学时:
2
同组学生姓名:
实验地点:
实验日期:
实验成绩:
批改教师:
批改时间:
实验1顺序表
一、实验目的和要求
掌握顺序表的定位、插入、删除等操作。
二、实验仪器和设备
VC6.0
三、实验内容与过程(含程序清单及流程图)
1、必做题
(1)编写程序建立一个顺序表,并逐个输出顺序表中所有数据元素的值。
编写主函数测试结果。
(2)编写顺序表定位操作子函数,在顺序表中查找是否存在数据元素x。
如果存在,返回顺序表中和x值相等的第1个数据元素的序号(序号从0开始编号);如果不存在,返回-1。
编写主函数测试结果。
(3)在递增有序的顺序表中插入一个新结点x,保持顺序表的有序性。
解题思路:
首先查找插入的位置,再移位,最后进行插入操作;从第一个元素开始找到第一个大于该新结点值x的元素位置i即为插入位置;然后将从表尾开始依次将元素后移一个位置直至元素i;最后将新结点x插入到i位置。
(4)删除顺序表中所有等于X的数据元素。
2、选做题
(5)已知两个顺序表A和B按元素值递增有序排列,要求写一算法实现将A和B归并成一个按元素值递减有序排列的顺序表(允许表中含有值相同的元素)。
程序清单:
(1):
/*编写程序建立一个顺序表,并逐个输出顺序表中所有数据元素的值。
*/
#include
typedefintdatatype;
#definemaxsize1024
typedefstruct
{
datatypedata[maxsize];
intlast;
}sequenlist;
voidmain()
{
sequenlistL;
inti,n;
printf("请输入元素个数:
");
scanf("%d",&n);
printf("\n请输入元素:
");
for(i=0;i scanf("%d,",&L.data[i]); printf("元素输出: "); for(i=0;i printf("%d\t",L.data[i]); printf("\n"); } (2): /*在顺序表中查找是否存在数据元素x。 如果存在,返回顺序表中和x值相等的第1个数据元素的序号(序号从0开始编号); 如果不存在,返回-1。 */ #include typedefintdatatype; #definemaxsize1024 typedefstruct { datatypedata[maxsize]; intlast; }sequenlist; intfun(sequenlistL,intx,intn) { inti; for(i=0;i if(L.data[i]==x) returni; return-1; } voidmain() { sequenlistL; inti,n,y; intx; printf("请输入元素个数: "); scanf("%d",&n); printf("\n请输入元素: "); for(i=0;i { scanf("%d,",&L.data[i]); } printf("\n请输入要查找的数据元素: "); scanf("%d",&x); y=fun(L,x,n); if(y==-1) printf("\n所要查找的数据元素不存在。 \n"); else printf("\n数据元素%d所在的位置为%d\n",x,y); } (3): /*在递增有序的顺序表中插入一个新结点x,保持顺序表的有序性。 解题思路: 首先查找插入的位置,再移位,最后进行插入操作; 从第一个元素开始找到第一个大于该新结点值x的元素位置i即为插入位置; 然后将从表尾开始依次将元素后移一个位置直至元素i;最后将新结点x插入到i位置。 */ #definemaxsize100 typedefstruct{ intdata[maxsize]; intlast; }sequenlist; main() { inti,x,j; sequenlistl={{1,3,5,6,7,9},5}; printf("\n插入元素前的数据为: "); for(i=0;i<=l.last;i++) printf("%2d",l.data[i]); printf("\n请输入要插入的元素: "); scanf("%d",&x); for(i=1;i<=l.last;i++) if(l.data[i-1]>x)break; if(i>l.last) { l.data[l.last+1]=x; } else { for(j=l.last;j>=i-1;j--) l.data[j+1]=l.data[j]; l.data[i-1]=x; } l.last++; printf("插入元素后的数据为: \n"); for(j=0;j<=l.last;j++) printf("%3d",l.data[j]); printf("\n"); } (4): /*删除顺序表中所有等于X的数据元素。 */ #definemaxsize100 typedefstruct{ intdata[maxsize]; intlast; }sequenlist; main(){ inti,j,x=0,k=0; sequenlistL={{1,3,5,7,2,4,6,8,2,9},9}; printf("\n原数据为: "); for(i=0;i<=L.last;i++)printf("%3d",L.data[i]); printf("\n请输入要删除的数据: "); scanf("%d",&x); for(i=1;i<=L.last+1;i++) if(L.data[i-1]==x){ for(j=i;j<=L.last+1;j++)L.data[j-1]=L.data[j]; L.last--; i--; k=1; } if(k==1){ printf("删除后的数据为: \n"); for(j=0;j<=L.last;j++)printf("%3d",L.data[j]); } elseprintf("Notfound! \n"); printf("\n"); } 四、实验结果与分析(程序运行结果及其分析) (1)结果: 请输入元素个数: 5 请输入元素: 12345 元素输出: 12345 (2)结果: 请输入元素个数: 5 请输入元素: 12345 请输入要查找的数据元素: 5 数据元素5所在的位置为4 (3)结果: 插入数据前的元素为: 135679 请输入要插入的元素为: 10 插入元素后的数据为: 13567910 (4)结果: 原数据为: 1357246829 请输入要删除的数据为: 7 删除后的数据为: 135246829 五、实验体会(遇到问题及解决办法,编程后的心得体会) 实验项目名称: 单链表实验学时: 2 同组学生姓名: 实验地点: 实验日期: 实验成绩: 批改教师: 批改时间: 实验2单链表 一、实验目的和要求 1、实验目的 掌握单链表的定位、插入、删除等操作。 2、实验要求 (1)注意链表的空间是动态分配的,某结点不用之后要及时进行物理删除,以便释放其内存空间。 (2)链表不能实现直接定位,一定注意指针的保存,防止丢失。 二、实验仪器和设备 VisualC++6.0 三、实验内容与过程(含程序清单及流程图) 1、必做题 (1)编写程序建立一个单链表,并逐个输出单链表中所有数据元素。 (2)在递增有序的单链表中插入一个新结点x,保持单链表的有序性。 解题思路: 首先查找插入的位置然后进行插入操作;从第一个结点开始找到第一个大于该新结点值的结点即为插入位置;然后在找到的此结点之前插入新结点;注意保留插入位置之前结点的指针才能完成插入操作。 (3)编写实现带头结点单链表就地逆置的子函数,并编写主函数测试结果。 2、选做题 已知指针LA和LB分别指向两个无头结点单链表的首元结点。 要求编一算法实现,从表LA中删除自第i个元素起共len个元素后,将它们插入到表LB中第j个元素之前。 程序清单: 四、实验结果与分析(程序运行结果及其分析) 五、实验体会(遇到问题及解决办法,编程后的心得体会) 实验项目名称: 堆栈和队列实验学时: 2 同组学生姓名: 实验地点: 实验日期: 实验成绩: 批改教师: 批改时间: 实验3堆栈和队列 一、实验目的和要求 (1)掌握应用栈解决问题的方法。 (2)掌握利用栈进行表达式求和的算法。 (3)掌握队列的存储结构及基本操作实现,并能在相应的应用问题中正确选用它们。 二、实验仪器和设备 VisualC++6.0 三、实验内容与过程(含程序清单及流程图) 1、必做题 (1)判断一个算术表达式中开括号和闭括号是否配对。 (2)测试“汉诺塔”问题。 (3)假设称正读和反读都相同的字符序列为”回文”,试写一个算法判别读入的一个以’@’为结束符的字符序列是否是“回文”。 2、选做题 在顺序存储结构上实现输出受限的双端循环队列的入列和出列算法。 设每个元素表示一个待处理的作业,元素值表示作业的预计时间。 入队列采取简化的短作业优先原则,若一个新提交的作业的预计执行时间小于队头和队尾作业的平均时间,则插入在队头,否则插入在队尾。 程序清单: 四、实验结果与分析(程序运行结果及其分析) 五、实验体会(遇到问题及解决办法,编程后的心得体会) 实验项目名称: 串实验学时: 2 同组学生姓名: 实验地点: 实验日期: 实验成绩: 批改教师: 批改时间: 实验4串 一、实验目的和要求 掌握串的存储及应用。 二、实验仪器和设备 VisualC++6.0 三、实验内容与过程(含程序清单及流程图) 1、必做题 (1)编写输出字符串s中值等于字符ch的第一个字符的函数,并用主函数测试结果。 (2)编写输出字符串s中值等于字符ch的所有字符的函数,并用主函数测试结果。 解题思路: 可以将第一题程序改进成一个子函数,在本题中循环调用。 (3)设字符串采用单字符的链式存储结构,编程删除串s从位置i开始长度为k的子串。 2、选做题 假设以链结构表示串,编写算法实现将串S插入到串T中某个字符之后,若串T中不存在这个字符,则将串S联接在串T的末尾。 提示: 为提高程序的通用性,插入位置字符应设计为从键盘输入。 程序清单: 四、实验结果与分析(程序运行结果及其分析) 五、实验体会(遇到问题及解决办法,编程后的心得体会) 实验项目名称: 二叉树实验学时: 2 同组学生姓名: 实验地点: 实验日期: 实验成绩: 批改教师: 批改时间: 实验5二叉树 一、实验目的和要求 (1)掌握二叉树的生成,以及前、中、后序遍历算法。 (2)掌握应用二叉树递归遍历思想解决问题的方法。 二、实验仪器和设备 VisualC++6.0 三、实验内容与过程(含程序清单及流程图) 1、必做题 (1)建立一棵二叉树。 对此树进行前序遍历、中序遍历及后序遍历,输出遍历序列。 (2)在第一题基础上,求二叉树中叶结点的个数。 (3)在第一题基础上,求二叉树中结点总数。 (4)在第一题基础上,求二叉树的深度。 2、选做题 已知一棵完全二叉树存于顺序表sa中,sa.elem[1…sa.last]存储结点的值。 试编写算法由此顺序存储结构建立该二叉树的二叉链表。 解题思路: 根据完全二叉树顺序存储的性质来确定二叉树的父子关系即“还原”了二叉树,之后再按照二叉树二叉链表的构造方法进行建立。 完全二叉树顺序存储的一个重要性质为,第i个结点的左孩子是编号为2i的结点,第i个结点的右孩子是编号为2i+1的结点。 程序清单: 四、实验结果与分析(程序运行结果及其分析) 五、实验体会(遇到问题及解决办法,编程后的心得体会) 实验项目名称: 图实验学时: 2 同组学生姓名: 实验地点: 实验日期: 实验成绩: 批改教师: 批改时间: 实验6图 一、实验目的和要求 (1)熟练掌握图的基本概念、构造及其存储结构。 (2)熟练掌握对图的深度优先搜索遍历和广度优先搜索遍历的算法。 二、实验仪器和设备 VisualC++6.0 三、实验内容与过程(含程序清单及流程图) 1、必做题 (1)构造一个无向图(用邻接矩阵表示存储结构)。 (2)对上面所构造的无向图,进行深度优先遍历和广度优先遍历,输出遍历序列。 2、选做题 采用邻接表存储结构,编写一个判别无向图中任意给定的两个顶点之间是否存在一条长度为k的简单路径的算法。 简单路径是指其顶点序列中不含有重复顶点的路径。 提示: 两个顶点及k值均作为参数给出。 程序清单: 四、实验结果与分析(程序运行结果及其分析) 五、实验体会(遇到问题及解决办法,编程后的心得体会) 实验项目名称: 排序实验学时: 2 同组学生姓名: 实验地点: 实验日期: 实验成绩: 批改教师: 批改时间: 实验7排序 一、实验目的和要求 (1)熟练掌握希尔排序、堆排序、直接插入排序、起泡排序、快速排序、直接选择排序、归并排序和基数排序的基本概念。 (2)掌握以上各种排序的算法。 区分以上不同排序的优、缺点。 二、实验仪器和设备 VisualC++6.0 三、实验内容与过程(含程序清单及流程图) 1、必做题 用随机数产生100000个待排序数据元素的关键字值。 测试下列各排序函数的机器实际执行时间(至少测试两个): 直接插入排序、希尔排序(增量为4,2,1)、冒泡排序、快速排序、直接选择排序、二路归并排序、堆排序和基于链式队列的基数排序。 2、选做题 假设含n个记录的序列中,其所有关键字为值介于v和w之间的整数,且其中很多关键字的值是相同的。 则可按如下方法排序: 另设数组number[v…w],令number[i]统计关键字为整数i的纪录个数,然后按number重排序列以达到有序。 试编写算法实现上述排序方法,并讨论此种方法的优缺点。 程序清单: 四、实验结果与分析(程序运行结果及其分析) 五、实验体会(遇到问题及解决办法,编程后的心得体会) 实验项目名称: 查找实验学时: 2 同组学生姓名: 实验地点: 实验日期: 实验成绩: 批改教师: 批改时间: 实验8查找 一、实验目的和要求 (1)掌握顺序表查找、有序表查找、索引顺序表查找的各种算法。 (2)掌握哈希表设计。 二、实验仪器和设备 VisualC++6.0 三、实验内容与过程(含程序清单及流程图) 1、必做题 (1)在一个递增有序的线性表中利用二分查找法查找数据元素X。 2、选做题 (2)构造一个哈希表,哈希函数采用除留余数法,哈希冲突解决方法采用链地址法。 设计一个测试程序进行测试。 提示: 构造哈希表只是完成查找的第一步,大家应该掌握在哈希表上进行查找的过程,可以试着编程序实现。 程序清单: 四、实验结果与分析(程序运行结果及其分析) 五、实验体会(遇到问题及解决办法,编程后的心得体会)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 数据结构 实验
![提示](https://static.bingdoc.com/images/bang_tan.gif)