实验大纲数据结构.docx
《实验大纲数据结构.docx》由会员分享,可在线阅读,更多相关《实验大纲数据结构.docx(14页珍藏版)》请在冰豆网上搜索。
实验大纲数据结构
《数据结构》课程实验大纲
课程名称:
数据结构课程编号:
04512017
英文名称:
DataStructure
课程类型:
学科基础平台课(必修)
实验学时:
36
适用对象:
计算机科学与技术、软件工程、网络工程专业本科
先修课程:
《C/C++程序设计》
一、课程简介
《数据结构》主要讨论各种数据结构的逻辑结构、存储结构及有关操作的算法。
目的是使学生学会分析和研究计算机处理的数据结构的特点,以便为应用中涉及到的数据选择适当的逻辑结构、存储结构及相应的算法,并初步了解对算法的时间复杂度分析和空间复杂度的分析方法。
二、实验课程性质、目的和任务
《数据结构》是计算机各相关专业的一门专业课,通过实验,使学生加深对理论的理解和掌握,提高系统分析及制作各种应用软件的能力。
三、实验课程基本要求
(1)掌握C语言的基本语句和程序设计方法。
(2)掌握根据实际问题,选择适当的数据表示方法,并进行算法设计的方法。
(3)学会独立调试程序。
四、实验课程内容及要求
必须仔细理解《数据结构》实验内容,认真主动完成实验的要求。
有问题及时主动通过各种方式与教师联系沟通,要发挥自主学习的能力,充分利用时间,安排好实验的时间计划,并在实验过程中不断检测自己的计划完成情况,及时的向教师汇报。
五、实验课程说明及建议
《数据结构》中的算法需要通过高级程序语言来实现,本课程实验是在VC6.0环境下使用C语言来实现,所以要求学生有较好的C语言基础。
试验的最后章节最好有一个综合实验,能够让学生体会到数据结构的应用。
六、各实验环节学时分配
序号
实验名称
实验学时
1
多个数的求和、平均、最大值、最小值
2
集合的交、并差
3
顺序表的基本操作
6
4
链表的基本操作
5
顺序栈的基本操作
链队列的基本操作
7
矩阵的2种转置运算
8
二叉树的应用
9
赫夫曼树的构建
10
构造无向图(算法7.1),深度和广度遍历
合计
七、考核方式
根据程序设计的具体步骤和实验基本要求,综合评定分为优、良、中、及格、不及格五个等级。
并折合入总成绩,占总成绩的20%。
八、推荐实验教材和实验参考书
教材:
《数据结构》(c语言版),严蔚敏、吴伟民编著,清华大学出版社
参考书:
《C程序设计》谭浩强清华大学出版社
九、实验内容
实验1、多个数的求和、平均、最大值、最小值(2学时)
(1)实验目的
通过该实验,让学生对上学期所学C语言的相关内容进行回顾和熟悉,特别是顺序结构、循环结构和分支结构,熟悉C中对数组相关操作的实现。
(2)实验内容
通过键盘输入整数,直到遇到一个负数为止,该负数不考虑在内,求所输整数的合、平均值、最大值和最小值,并在屏幕上输出。
(3)验收/测试用例
输入:
1、3、5、10、16、-1
输出:
总和=35;平均值=7;最大值=10;最小值=1
#include"stdio.h"
#include"math.h"
main()
{
inta[10],i,j,b,c,d,e,k,l,p;
i=0;
printf("请输入数:
\n");
scanf("%d",&a[i]);
while(a[i]>0)
i++;
}
j=i;
printf("共%d个整数\n",j);
//add
b=0;
for(k=0;kb+=a[k];printf("总和为%d\n",b);//averagec=b/j;printf("平均数为%d\n",c);//maxd=a[0];for(l=0;l{if(dd=a[l];}printf("最大值为%d\n",d);//mine=a[0];for(p=0;p{if(e>a[p])e=a[p];}printf("最小值为%d\n",e);} 实验2、集合的交、并差(2学时)(1)实验目的通过该实验,进一步让学生熟练掌握循环结构、循环控制条件、分支结构和数组/链表基本操作的实现,掌握函数参数设定的有关内容,体会到用数组存储集合时,需要记录集合元素的个数,否则输出结果会出现数据越界现象。(2)实验内容通过键盘,分别输入两个数据元素类型为正整数的集合A和B,以负数输入为结束条件,输出两个集合的交、并、差。从程序完善性上考虑,集合元素输入时,要有检查元素重复的功能。集合可以用数组也可以用链表存储。(3)验收/测试用例输入:A={1,2,3,4,5}B={3,4,5,6,7}输出A交B={3,4,5}A并B={1,2,3,4,5,6,7}A-B={1,2}#include"stdio.h"main(){inta[10],b[10];printf("请输入集合A");printf("请输入集合B");}实验3、顺序表的基本操作(6学时)(1)实验目的通过该实验,深入理解顺序表的逻辑结构、物理结构等概念,掌握顺序表基本操作的编程实现,注意顺序表插入、删除等操作过程中数据元素的移动现象,培养学生编写程序时,要考虑程序的强壮性,熟练掌握通过函数参数返回函数结果的办法。(2)实验内容编程实现顺序表下教材第二章定义的线性表的基本操作,最好用菜单形式对应各个操作,使其编程一个完整的小软件。(3)参考界面(3)验收/测试用例通过菜单调用各个操作,测试点:●没有初始化前进行其他操作,程序是否能控制住;●初始化一个顺序表;●插入数据(位置,数据),要测插入位置不合法的情况(0,1)、(2,1),正确插入4个数据(1,2)、(1,1)、(3,3);●显示顺序表中的数据,屏幕输出1,2,3;●判空,屏幕输出顺便表非空;●顺便表长度,屏幕输出3;●获取指定位置元素,要测指定位置在【1,3】范围之外的情况和之内的情况;●定位,输入:4,输出:不存在,输入2,输出位置为2;●求直接前驱,要测求第一个元素的前驱、不存在顺序表中的元素的直接前驱,其他元素的直接前驱;●求直接后继,要测最后一个元素的后继、不存在顺序表中的元素的直接后继,其他元素的直接后继;●删除,要测位置在【1,3】范围之外的情况和之内的情况;●清空操作后再测长度;●销毁顺序表实验4、链表的基本操作(4学时)(1)实验目的通过该实验,深入理解链表的逻辑结构、物理结构等概念,掌握链表基本操作的编程实现,熟练掌握C语言中指针的操作。和实验3对比,掌握线性结构两种不同存储方式的区别。(2)实验内容编程实现链表下教材第二章定义的线性表的基本操作,最好用菜单形式对应各个操作,使其编程一个完整的小软件。(3)参考界面(4)验收/测试用例同实验4实验5、顺序栈的基本操作(2学时)(1)实验目的通过该实验,让学生掌握栈的相关基本概念,认识栈是插入和删除集中在一端进行的线性结构,掌握栈的“先入后出”操作特点。栈在进行各类操作时,栈底指针固定不动,掌握栈空、栈满的判断条件。(2)实验内容用顺序存储结构,实现教材定义的栈的基本操作,提供数制转换功能,将输入的十进制整数转换成二进制。(3)参考界面(4)验收/测试用例通过菜单调用各个操作,测试点:●没有初始化前进行其他操作,程序是否能控制住;●初始化一个栈;●判栈空,屏幕显示栈为空;●3个数入栈,1、2、3;●栈长度,屏幕输出3;●取栈顶元素,再判栈空,然后再判栈长度。让学生知道取栈顶元素不改变栈中的内容,栈顶指针不发生改变;●出栈,再判栈长度;●销毁栈,再做其他操作,判断程序是否能控制;●数制转换,输入:8,输出:100实验6、链队列的基本操作(2学时)(1)实验目的通过该实验,使学生理解链队列的构造特点并灵活应用,掌握链队基本操作的编程实现,认识栈是在一端进行插入,在另一端进行删除集中操作的线性结构,掌握队列的“先入先出”操作特点,知道判断队列空和满的条件,进一步熟悉C语言中指针操作。(2)实验内容用链式存储结构,实现教材定义的队列的基本操作。(3)参考界面(4)验收/测试用例通过菜单调用各个操作,测试点:●没有初始化前进行其他操作,程序是否能控制住;●初始化一个队列;●判队列空,屏幕显示队列为空;●4个数入队,1、2、3、5;●栈长度,屏幕输出4;●取队头元素,再判栈空,然后再判栈长度。让学生知道取队头元素不改变队列中的内容,队头指针不发生改变;●出队,再判栈长度;●销毁队,再做其他操作,判断程序是否能控制;实验7、矩阵的2种转置运算(4学时)(1)实验目的通过该实验,让学生理解矩阵压缩存储的概念、方法等相关知识,掌握用三元组表方式如何进行矩阵的压缩存储,并在此基础上进行转置操作,理解转置和快速转置两种矩阵转置算法的思想。(2)实验内容用三元组表压缩存储矩阵,实现创建矩阵、显示以及教材中介绍的两种转置算法。(3)参考界面(4)验收/测试用例●创建,输入:4(行数)4(列数)5(非零元个数)(1,1,1)(2,3,2)(3,1,3)(3,4,5)(4,2,4)检查是否能拦截元素重复输入●显示屏幕上输出1000002030050400●转置屏幕上输出1030000402000050实验8、二叉树的应用(4学时)(1)实验目的通过该实验,使学生理解二叉树的链式存储,掌握二叉树的几种遍历算法,并通过该实验使学生理解递归的含义,掌握C语言编写递归函数的方法和注意事项。(2)实验内容实现教材中算法6.4描述的二叉树创建算法,在此基础上实现二叉树的先序、后序递归遍历算法、两种非递归中序遍历、层序遍历、求二叉树的深度。(3)参考界面(4)验收/测试用例●创建输入:ABC$$DE$G$$F$$$($表示空格)该输入对应的树如图所示●先序屏幕输出ABCDEGF●后序屏幕输出CGEFDBA●中序屏幕输出CBEGDFA(两种中序非递归还需看源代码)●层序屏幕输出ABCDEFG●深度屏幕显示深度为5实验9、赫夫曼树的构建(6学时)(1)实验目的通过该实验,使学生理解赫夫曼树的概念,掌握赫夫曼树及赫夫曼编码的构造过程,体会网络发送端和接收端编码和译码过程及其工作原理。(2)实验内容给定报文中26个字母a-z及空格的出现频率{64,13,22,32,103,21,15,47,57,1,5,32,20,57,63,15,1,48,51,80,23,8,18,1,16,1,168},构建赫夫曼树并为这27个字符编制赫夫曼编码,并输出。模拟发送端,从键盘输入字符串,以%为结束标记,在屏幕上输出输入串的编码;模拟接收端,从键盘上输入0-1赫夫曼编码串,翻译出对应的原文。(3)参考界面(4)验收/测试用例●模拟发送端输入:Iloveyou输出:01101111011110011100000010111100011100100001●模拟接收端输入输入:01101101111011000111111010111101101001100001输出:itisadog 实验10、构造无向图(算法7.1),深度和广度遍历(4学时)(1)实验目的通过该实验,使学生掌握图的几种存储结构,理解图的深度优先和广度优先遍历算法的思想和实现办法,(2)实验内容实现教材算法7.2利用邻接矩阵构造无向图的算法,提供从邻接矩阵获得邻接表的功能,在此基础上进行深度优先遍历和广度优先遍历。(3)参考界面(4)验收/测试用例●创建所示无向图屏幕输出邻接矩阵010001101100010110011010001101100010●深度优先遍历屏幕输出:123456●广度优先遍历屏幕输出:126345 实验大纲制订人:乔保军实验大纲审定人:制订日期:2013.08
b+=a[k];
printf("总和为%d\n",b);
//average
c=b/j;
printf("平均数为%d\n",c);
//max
d=a[0];
for(l=0;l{if(dd=a[l];}printf("最大值为%d\n",d);//mine=a[0];for(p=0;p{if(e>a[p])e=a[p];}printf("最小值为%d\n",e);} 实验2、集合的交、并差(2学时)(1)实验目的通过该实验,进一步让学生熟练掌握循环结构、循环控制条件、分支结构和数组/链表基本操作的实现,掌握函数参数设定的有关内容,体会到用数组存储集合时,需要记录集合元素的个数,否则输出结果会出现数据越界现象。(2)实验内容通过键盘,分别输入两个数据元素类型为正整数的集合A和B,以负数输入为结束条件,输出两个集合的交、并、差。从程序完善性上考虑,集合元素输入时,要有检查元素重复的功能。集合可以用数组也可以用链表存储。(3)验收/测试用例输入:A={1,2,3,4,5}B={3,4,5,6,7}输出A交B={3,4,5}A并B={1,2,3,4,5,6,7}A-B={1,2}#include"stdio.h"main(){inta[10],b[10];printf("请输入集合A");printf("请输入集合B");}实验3、顺序表的基本操作(6学时)(1)实验目的通过该实验,深入理解顺序表的逻辑结构、物理结构等概念,掌握顺序表基本操作的编程实现,注意顺序表插入、删除等操作过程中数据元素的移动现象,培养学生编写程序时,要考虑程序的强壮性,熟练掌握通过函数参数返回函数结果的办法。(2)实验内容编程实现顺序表下教材第二章定义的线性表的基本操作,最好用菜单形式对应各个操作,使其编程一个完整的小软件。(3)参考界面(3)验收/测试用例通过菜单调用各个操作,测试点:●没有初始化前进行其他操作,程序是否能控制住;●初始化一个顺序表;●插入数据(位置,数据),要测插入位置不合法的情况(0,1)、(2,1),正确插入4个数据(1,2)、(1,1)、(3,3);●显示顺序表中的数据,屏幕输出1,2,3;●判空,屏幕输出顺便表非空;●顺便表长度,屏幕输出3;●获取指定位置元素,要测指定位置在【1,3】范围之外的情况和之内的情况;●定位,输入:4,输出:不存在,输入2,输出位置为2;●求直接前驱,要测求第一个元素的前驱、不存在顺序表中的元素的直接前驱,其他元素的直接前驱;●求直接后继,要测最后一个元素的后继、不存在顺序表中的元素的直接后继,其他元素的直接后继;●删除,要测位置在【1,3】范围之外的情况和之内的情况;●清空操作后再测长度;●销毁顺序表实验4、链表的基本操作(4学时)(1)实验目的通过该实验,深入理解链表的逻辑结构、物理结构等概念,掌握链表基本操作的编程实现,熟练掌握C语言中指针的操作。和实验3对比,掌握线性结构两种不同存储方式的区别。(2)实验内容编程实现链表下教材第二章定义的线性表的基本操作,最好用菜单形式对应各个操作,使其编程一个完整的小软件。(3)参考界面(4)验收/测试用例同实验4实验5、顺序栈的基本操作(2学时)(1)实验目的通过该实验,让学生掌握栈的相关基本概念,认识栈是插入和删除集中在一端进行的线性结构,掌握栈的“先入后出”操作特点。栈在进行各类操作时,栈底指针固定不动,掌握栈空、栈满的判断条件。(2)实验内容用顺序存储结构,实现教材定义的栈的基本操作,提供数制转换功能,将输入的十进制整数转换成二进制。(3)参考界面(4)验收/测试用例通过菜单调用各个操作,测试点:●没有初始化前进行其他操作,程序是否能控制住;●初始化一个栈;●判栈空,屏幕显示栈为空;●3个数入栈,1、2、3;●栈长度,屏幕输出3;●取栈顶元素,再判栈空,然后再判栈长度。让学生知道取栈顶元素不改变栈中的内容,栈顶指针不发生改变;●出栈,再判栈长度;●销毁栈,再做其他操作,判断程序是否能控制;●数制转换,输入:8,输出:100实验6、链队列的基本操作(2学时)(1)实验目的通过该实验,使学生理解链队列的构造特点并灵活应用,掌握链队基本操作的编程实现,认识栈是在一端进行插入,在另一端进行删除集中操作的线性结构,掌握队列的“先入先出”操作特点,知道判断队列空和满的条件,进一步熟悉C语言中指针操作。(2)实验内容用链式存储结构,实现教材定义的队列的基本操作。(3)参考界面(4)验收/测试用例通过菜单调用各个操作,测试点:●没有初始化前进行其他操作,程序是否能控制住;●初始化一个队列;●判队列空,屏幕显示队列为空;●4个数入队,1、2、3、5;●栈长度,屏幕输出4;●取队头元素,再判栈空,然后再判栈长度。让学生知道取队头元素不改变队列中的内容,队头指针不发生改变;●出队,再判栈长度;●销毁队,再做其他操作,判断程序是否能控制;实验7、矩阵的2种转置运算(4学时)(1)实验目的通过该实验,让学生理解矩阵压缩存储的概念、方法等相关知识,掌握用三元组表方式如何进行矩阵的压缩存储,并在此基础上进行转置操作,理解转置和快速转置两种矩阵转置算法的思想。(2)实验内容用三元组表压缩存储矩阵,实现创建矩阵、显示以及教材中介绍的两种转置算法。(3)参考界面(4)验收/测试用例●创建,输入:4(行数)4(列数)5(非零元个数)(1,1,1)(2,3,2)(3,1,3)(3,4,5)(4,2,4)检查是否能拦截元素重复输入●显示屏幕上输出1000002030050400●转置屏幕上输出1030000402000050实验8、二叉树的应用(4学时)(1)实验目的通过该实验,使学生理解二叉树的链式存储,掌握二叉树的几种遍历算法,并通过该实验使学生理解递归的含义,掌握C语言编写递归函数的方法和注意事项。(2)实验内容实现教材中算法6.4描述的二叉树创建算法,在此基础上实现二叉树的先序、后序递归遍历算法、两种非递归中序遍历、层序遍历、求二叉树的深度。(3)参考界面(4)验收/测试用例●创建输入:ABC$$DE$G$$F$$$($表示空格)该输入对应的树如图所示●先序屏幕输出ABCDEGF●后序屏幕输出CGEFDBA●中序屏幕输出CBEGDFA(两种中序非递归还需看源代码)●层序屏幕输出ABCDEFG●深度屏幕显示深度为5实验9、赫夫曼树的构建(6学时)(1)实验目的通过该实验,使学生理解赫夫曼树的概念,掌握赫夫曼树及赫夫曼编码的构造过程,体会网络发送端和接收端编码和译码过程及其工作原理。(2)实验内容给定报文中26个字母a-z及空格的出现频率{64,13,22,32,103,21,15,47,57,1,5,32,20,57,63,15,1,48,51,80,23,8,18,1,16,1,168},构建赫夫曼树并为这27个字符编制赫夫曼编码,并输出。模拟发送端,从键盘输入字符串,以%为结束标记,在屏幕上输出输入串的编码;模拟接收端,从键盘上输入0-1赫夫曼编码串,翻译出对应的原文。(3)参考界面(4)验收/测试用例●模拟发送端输入:Iloveyou输出:01101111011110011100000010111100011100100001●模拟接收端输入输入:01101101111011000111111010111101101001100001输出:itisadog 实验10、构造无向图(算法7.1),深度和广度遍历(4学时)(1)实验目的通过该实验,使学生掌握图的几种存储结构,理解图的深度优先和广度优先遍历算法的思想和实现办法,(2)实验内容实现教材算法7.2利用邻接矩阵构造无向图的算法,提供从邻接矩阵获得邻接表的功能,在此基础上进行深度优先遍历和广度优先遍历。(3)参考界面(4)验收/测试用例●创建所示无向图屏幕输出邻接矩阵010001101100010110011010001101100010●深度优先遍历屏幕输出:123456●广度优先遍历屏幕输出:126345 实验大纲制订人:乔保军实验大纲审定人:制订日期:2013.08
if(dd=a[l];}printf("最大值为%d\n",d);//mine=a[0];for(p=0;p{if(e>a[p])e=a[p];}printf("最小值为%d\n",e);} 实验2、集合的交、并差(2学时)(1)实验目的通过该实验,进一步让学生熟练掌握循环结构、循环控制条件、分支结构和数组/链表基本操作的实现,掌握函数参数设定的有关内容,体会到用数组存储集合时,需要记录集合元素的个数,否则输出结果会出现数据越界现象。(2)实验内容通过键盘,分别输入两个数据元素类型为正整数的集合A和B,以负数输入为结束条件,输出两个集合的交、并、差。从程序完善性上考虑,集合元素输入时,要有检查元素重复的功能。集合可以用数组也可以用链表存储。(3)验收/测试用例输入:A={1,2,3,4,5}B={3,4,5,6,7}输出A交B={3,4,5}A并B={1,2,3,4,5,6,7}A-B={1,2}#include"stdio.h"main(){inta[10],b[10];printf("请输入集合A");printf("请输入集合B");}实验3、顺序表的基本操作(6学时)(1)实验目的通过该实验,深入理解顺序表的逻辑结构、物理结构等概念,掌握顺序表基本操作的编程实现,注意顺序表插入、删除等操作过程中数据元素的移动现象,培养学生编写程序时,要考虑程序的强壮性,熟练掌握通过函数参数返回函数结果的办法。(2)实验内容编程实现顺序表下教材第二章定义的线性表的基本操作,最好用菜单形式对应各个操作,使其编程一个完整的小软件。(3)参考界面(3)验收/测试用例通过菜单调用各个操作,测试点:●没有初始化前进行其他操作,程序是否能控制住;●初始化一个顺序表;●插入数据(位置,数据),要测插入位置不合法的情况(0,1)、(2,1),正确插入4个数据(1,2)、(1,1)、(3,3);●显示顺序表中的数据,屏幕输出1,2,3;●判空,屏幕输出顺便表非空;●顺便表长度,屏幕输出3;●获取指定位置元素,要测指定位置在【1,3】范围之外的情况和之内的情况;●定位,输入:4,输出:不存在,输入2,输出位置为2;●求直接前驱,要测求第一个元素的前驱、不存在顺序表中的元素的直接前驱,其他元素的直接前驱;●求直接后继,要测最后一个元素的后继、不存在顺序表中的元素的直接后继,其他元素的直接后继;●删除,要测位置在【1,3】范围之外的情况和之内的情况;●清空操作后再测长度;●销毁顺序表实验4、链表的基本操作(4学时)(1)实验目的通过该实验,深入理解链表的逻辑结构、物理结构等概念,掌握链表基本操作的编程实现,熟练掌握C语言中指针的操作。和实验3对比,掌握线性结构两种不同存储方式的区别。(2)实验内容编程实现链表下教材第二章定义的线性表的基本操作,最好用菜单形式对应各个操作,使其编程一个完整的小软件。(3)参考界面(4)验收/测试用例同实验4实验5、顺序栈的基本操作(2学时)(1)实验目的通过该实验,让学生掌握栈的相关基本概念,认识栈是插入和删除集中在一端进行的线性结构,掌握栈的“先入后出”操作特点。栈在进行各类操作时,栈底指针固定不动,掌握栈空、栈满的判断条件。(2)实验内容用顺序存储结构,实现教材定义的栈的基本操作,提供数制转换功能,将输入的十进制整数转换成二进制。(3)参考界面(4)验收/测试用例通过菜单调用各个操作,测试点:●没有初始化前进行其他操作,程序是否能控制住;●初始化一个栈;●判栈空,屏幕显示栈为空;●3个数入栈,1、2、3;●栈长度,屏幕输出3;●取栈顶元素,再判栈空,然后再判栈长度。让学生知道取栈顶元素不改变栈中的内容,栈顶指针不发生改变;●出栈,再判栈长度;●销毁栈,再做其他操作,判断程序是否能控制;●数制转换,输入:8,输出:100实验6、链队列的基本操作(2学时)(1)实验目的通过该实验,使学生理解链队列的构造特点并灵活应用,掌握链队基本操作的编程实现,认识栈是在一端进行插入,在另一端进行删除集中操作的线性结构,掌握队列的“先入先出”操作特点,知道判断队列空和满的条件,进一步熟悉C语言中指针操作。(2)实验内容用链式存储结构,实现教材定义的队列的基本操作。(3)参考界面(4)验收/测试用例通过菜单调用各个操作,测试点:●没有初始化前进行其他操作,程序是否能控制住;●初始化一个队列;●判队列空,屏幕显示队列为空;●4个数入队,1、2、3、5;●栈长度,屏幕输出4;●取队头元素,再判栈空,然后再判栈长度。让学生知道取队头元素不改变队列中的内容,队头指针不发生改变;●出队,再判栈长度;●销毁队,再做其他操作,判断程序是否能控制;实验7、矩阵的2种转置运算(4学时)(1)实验目的通过该实验,让学生理解矩阵压缩存储的概念、方法等相关知识,掌握用三元组表方式如何进行矩阵的压缩存储,并在此基础上进行转置操作,理解转置和快速转置两种矩阵转置算法的思想。(2)实验内容用三元组表压缩存储矩阵,实现创建矩阵、显示以及教材中介绍的两种转置算法。(3)参考界面(4)验收/测试用例●创建,输入:4(行数)4(列数)5(非零元个数)(1,1,1)(2,3,2)(3,1,3)(3,4,5)(4,2,4)检查是否能拦截元素重复输入●显示屏幕上输出1000002030050400●转置屏幕上输出1030000402000050实验8、二叉树的应用(4学时)(1)实验目的通过该实验,使学生理解二叉树的链式存储,掌握二叉树的几种遍历算法,并通过该实验使学生理解递归的含义,掌握C语言编写递归函数的方法和注意事项。(2)实验内容实现教材中算法6.4描述的二叉树创建算法,在此基础上实现二叉树的先序、后序递归遍历算法、两种非递归中序遍历、层序遍历、求二叉树的深度。(3)参考界面(4)验收/测试用例●创建输入:ABC$$DE$G$$F$$$($表示空格)该输入对应的树如图所示●先序屏幕输出ABCDEGF●后序屏幕输出CGEFDBA●中序屏幕输出CBEGDFA(两种中序非递归还需看源代码)●层序屏幕输出ABCDEFG●深度屏幕显示深度为5实验9、赫夫曼树的构建(6学时)(1)实验目的通过该实验,使学生理解赫夫曼树的概念,掌握赫夫曼树及赫夫曼编码的构造过程,体会网络发送端和接收端编码和译码过程及其工作原理。(2)实验内容给定报文中26个字母a-z及空格的出现频率{64,13,22,32,103,21,15,47,57,1,5,32,20,57,63,15,1,48,51,80,23,8,18,1,16,1,168},构建赫夫曼树并为这27个字符编制赫夫曼编码,并输出。模拟发送端,从键盘输入字符串,以%为结束标记,在屏幕上输出输入串的编码;模拟接收端,从键盘上输入0-1赫夫曼编码串,翻译出对应的原文。(3)参考界面(4)验收/测试用例●模拟发送端输入:Iloveyou输出:01101111011110011100000010111100011100100001●模拟接收端输入输入:01101101111011000111111010111101101001100001输出:itisadog 实验10、构造无向图(算法7.1),深度和广度遍历(4学时)(1)实验目的通过该实验,使学生掌握图的几种存储结构,理解图的深度优先和广度优先遍历算法的思想和实现办法,(2)实验内容实现教材算法7.2利用邻接矩阵构造无向图的算法,提供从邻接矩阵获得邻接表的功能,在此基础上进行深度优先遍历和广度优先遍历。(3)参考界面(4)验收/测试用例●创建所示无向图屏幕输出邻接矩阵010001101100010110011010001101100010●深度优先遍历屏幕输出:123456●广度优先遍历屏幕输出:126345 实验大纲制订人:乔保军实验大纲审定人:制订日期:2013.08
d=a[l];
printf("最大值为%d\n",d);
//min
e=a[0];
for(p=0;p{if(e>a[p])e=a[p];}printf("最小值为%d\n",e);} 实验2、集合的交、并差(2学时)(1)实验目的通过该实验,进一步让学生熟练掌握循环结构、循环控制条件、分支结构和数组/链表基本操作的实现,掌握函数参数设定的有关内容,体会到用数组存储集合时,需要记录集合元素的个数,否则输出结果会出现数据越界现象。(2)实验内容通过键盘,分别输入两个数据元素类型为正整数的集合A和B,以负数输入为结束条件,输出两个集合的交、并、差。从程序完善性上考虑,集合元素输入时,要有检查元素重复的功能。集合可以用数组也可以用链表存储。(3)验收/测试用例输入:A={1,2,3,4,5}B={3,4,5,6,7}输出A交B={3,4,5}A并B={1,2,3,4,5,6,7}A-B={1,2}#include"stdio.h"main(){inta[10],b[10];printf("请输入集合A");printf("请输入集合B");}实验3、顺序表的基本操作(6学时)(1)实验目的通过该实验,深入理解顺序表的逻辑结构、物理结构等概念,掌握顺序表基本操作的编程实现,注意顺序表插入、删除等操作过程中数据元素的移动现象,培养学生编写程序时,要考虑程序的强壮性,熟练掌握通过函数参数返回函数结果的办法。(2)实验内容编程实现顺序表下教材第二章定义的线性表的基本操作,最好用菜单形式对应各个操作,使其编程一个完整的小软件。(3)参考界面(3)验收/测试用例通过菜单调用各个操作,测试点:●没有初始化前进行其他操作,程序是否能控制住;●初始化一个顺序表;●插入数据(位置,数据),要测插入位置不合法的情况(0,1)、(2,1),正确插入4个数据(1,2)、(1,1)、(3,3);●显示顺序表中的数据,屏幕输出1,2,3;●判空,屏幕输出顺便表非空;●顺便表长度,屏幕输出3;●获取指定位置元素,要测指定位置在【1,3】范围之外的情况和之内的情况;●定位,输入:4,输出:不存在,输入2,输出位置为2;●求直接前驱,要测求第一个元素的前驱、不存在顺序表中的元素的直接前驱,其他元素的直接前驱;●求直接后继,要测最后一个元素的后继、不存在顺序表中的元素的直接后继,其他元素的直接后继;●删除,要测位置在【1,3】范围之外的情况和之内的情况;●清空操作后再测长度;●销毁顺序表实验4、链表的基本操作(4学时)(1)实验目的通过该实验,深入理解链表的逻辑结构、物理结构等概念,掌握链表基本操作的编程实现,熟练掌握C语言中指针的操作。和实验3对比,掌握线性结构两种不同存储方式的区别。(2)实验内容编程实现链表下教材第二章定义的线性表的基本操作,最好用菜单形式对应各个操作,使其编程一个完整的小软件。(3)参考界面(4)验收/测试用例同实验4实验5、顺序栈的基本操作(2学时)(1)实验目的通过该实验,让学生掌握栈的相关基本概念,认识栈是插入和删除集中在一端进行的线性结构,掌握栈的“先入后出”操作特点。栈在进行各类操作时,栈底指针固定不动,掌握栈空、栈满的判断条件。(2)实验内容用顺序存储结构,实现教材定义的栈的基本操作,提供数制转换功能,将输入的十进制整数转换成二进制。(3)参考界面(4)验收/测试用例通过菜单调用各个操作,测试点:●没有初始化前进行其他操作,程序是否能控制住;●初始化一个栈;●判栈空,屏幕显示栈为空;●3个数入栈,1、2、3;●栈长度,屏幕输出3;●取栈顶元素,再判栈空,然后再判栈长度。让学生知道取栈顶元素不改变栈中的内容,栈顶指针不发生改变;●出栈,再判栈长度;●销毁栈,再做其他操作,判断程序是否能控制;●数制转换,输入:8,输出:100实验6、链队列的基本操作(2学时)(1)实验目的通过该实验,使学生理解链队列的构造特点并灵活应用,掌握链队基本操作的编程实现,认识栈是在一端进行插入,在另一端进行删除集中操作的线性结构,掌握队列的“先入先出”操作特点,知道判断队列空和满的条件,进一步熟悉C语言中指针操作。(2)实验内容用链式存储结构,实现教材定义的队列的基本操作。(3)参考界面(4)验收/测试用例通过菜单调用各个操作,测试点:●没有初始化前进行其他操作,程序是否能控制住;●初始化一个队列;●判队列空,屏幕显示队列为空;●4个数入队,1、2、3、5;●栈长度,屏幕输出4;●取队头元素,再判栈空,然后再判栈长度。让学生知道取队头元素不改变队列中的内容,队头指针不发生改变;●出队,再判栈长度;●销毁队,再做其他操作,判断程序是否能控制;实验7、矩阵的2种转置运算(4学时)(1)实验目的通过该实验,让学生理解矩阵压缩存储的概念、方法等相关知识,掌握用三元组表方式如何进行矩阵的压缩存储,并在此基础上进行转置操作,理解转置和快速转置两种矩阵转置算法的思想。(2)实验内容用三元组表压缩存储矩阵,实现创建矩阵、显示以及教材中介绍的两种转置算法。(3)参考界面(4)验收/测试用例●创建,输入:4(行数)4(列数)5(非零元个数)(1,1,1)(2,3,2)(3,1,3)(3,4,5)(4,2,4)检查是否能拦截元素重复输入●显示屏幕上输出1000002030050400●转置屏幕上输出1030000402000050实验8、二叉树的应用(4学时)(1)实验目的通过该实验,使学生理解二叉树的链式存储,掌握二叉树的几种遍历算法,并通过该实验使学生理解递归的含义,掌握C语言编写递归函数的方法和注意事项。(2)实验内容实现教材中算法6.4描述的二叉树创建算法,在此基础上实现二叉树的先序、后序递归遍历算法、两种非递归中序遍历、层序遍历、求二叉树的深度。(3)参考界面(4)验收/测试用例●创建输入:ABC$$DE$G$$F$$$($表示空格)该输入对应的树如图所示●先序屏幕输出ABCDEGF●后序屏幕输出CGEFDBA●中序屏幕输出CBEGDFA(两种中序非递归还需看源代码)●层序屏幕输出ABCDEFG●深度屏幕显示深度为5实验9、赫夫曼树的构建(6学时)(1)实验目的通过该实验,使学生理解赫夫曼树的概念,掌握赫夫曼树及赫夫曼编码的构造过程,体会网络发送端和接收端编码和译码过程及其工作原理。(2)实验内容给定报文中26个字母a-z及空格的出现频率{64,13,22,32,103,21,15,47,57,1,5,32,20,57,63,15,1,48,51,80,23,8,18,1,16,1,168},构建赫夫曼树并为这27个字符编制赫夫曼编码,并输出。模拟发送端,从键盘输入字符串,以%为结束标记,在屏幕上输出输入串的编码;模拟接收端,从键盘上输入0-1赫夫曼编码串,翻译出对应的原文。(3)参考界面(4)验收/测试用例●模拟发送端输入:Iloveyou输出:01101111011110011100000010111100011100100001●模拟接收端输入输入:01101101111011000111111010111101101001100001输出:itisadog 实验10、构造无向图(算法7.1),深度和广度遍历(4学时)(1)实验目的通过该实验,使学生掌握图的几种存储结构,理解图的深度优先和广度优先遍历算法的思想和实现办法,(2)实验内容实现教材算法7.2利用邻接矩阵构造无向图的算法,提供从邻接矩阵获得邻接表的功能,在此基础上进行深度优先遍历和广度优先遍历。(3)参考界面(4)验收/测试用例●创建所示无向图屏幕输出邻接矩阵010001101100010110011010001101100010●深度优先遍历屏幕输出:123456●广度优先遍历屏幕输出:126345 实验大纲制订人:乔保军实验大纲审定人:制订日期:2013.08
if(e>a[p])
e=a[p];
printf("最小值为%d\n",e);
实验2、集合的交、并差(2学时)
通过该实验,进一步让学生熟练掌握循环结构、循环控制条件、分支结构和数组/链表基本操作的实现,掌握函数参数设定的有关内容,体会到用数组存储集合时,需要记录集合元素的个数,否则输出结果会出现数据越界现象。
通过键盘,分别输入两个数据元素类型为正整数的集合A和B,以负数输入为结束条件,输出两个集合的交、并、差。
从程序完善性上考虑,集合元素输入时,要有检查元素重复的功能。
集合可以用数组也可以用链表存储。
A={1,2,3,4,5}B={3,4,5,6,7}
输出A交B={3,4,5}A并B={1,2,3,4,5,6,7}A-B={1,2}
inta[10],b[10];
printf("请输入集合A");
printf("请输入集合B");
实验3、顺序表的基本操作(6学时)
通过该实验,深入理解顺序表的逻辑结构、物理结构等概念,掌握顺序表基本操作的编程实现,注意顺序表插入、删除等操作过程中数据元素的移动现象,培养学生编写程序时,要考虑程序的强壮性,熟练掌握通过函数参数返回函数结果的办法。
编程实现顺序表下教材第二章定义的线性表的基本操作,最好用菜单形式对应各个操作,使其编程一个完整的小软件。
(3)参考界面
通过菜单调用各个操作,测试点:
●没有初始化前进行其他操作,程序是否能控制住;
●初始化一个顺序表;
●插入数据(位置,数据),要测插入位置不合法的情况(0,1)、(2,1),正确插入4个数据(1,2)、(1,1)、(3,3);
●显示顺序表中的数据,屏幕输出1,2,3;
●判空,屏幕输出顺便表非空;
●顺便表长度,屏幕输出3;
●获取指定位置元素,要测指定位置在【1,3】范围之外的情况和之内的情况;
●定位,输入:
4,输出:
不存在,输入2,输出位置为2;
●求直接前驱,要测求第一个元素的前驱、不存在顺序表中的元素的直接前驱,其他元素的直接前驱;
●求直接后继,要测最后一个元素的后继、不存在顺序表中的元素的直接后继,其他元素的直接后继;
●删除,要测位置在【1,3】范围之外的情况和之内的情况;
●清空操作后再测长度;
●销毁顺序表
实验4、链表的基本操作(4学时)
通过该实验,深入理解链表的逻辑结构、物理结构等概念,掌握链表基本操作的编程实现,熟练掌握C语言中指针的操作。
和实验3对比,掌握线性结构两种不同存储方式的区别。
编程实现链表下教材第二章定义的线性表的基本操作,最好用菜单形式对应各个操作,使其编程一个完整的小软件。
(4)验收/测试用例
同实验4
实验5、顺序栈的基本操作(2学时)
通过该实验,让学生掌握栈的相关基本概念,认识栈是插入和删除集中在一端进行的线性结构,掌握栈的“先入后出”操作特点。
栈在进行各类操作时,栈底指针固定不动,掌握栈空、栈满的判断条件。
用顺序存储结构,实现教材定义的栈的基本操作,提供数制转换功能,将输入的十进制整数转换成二进制。
●初始化一个栈;
●判栈空,屏幕显示栈为空;
●3个数入栈,1、2、3;
●栈长度,屏幕输出3;
●取栈顶元素,再判栈空,然后再判栈长度。
让学生知道取栈顶元素不改变栈中的内容,栈顶指针不发生改变;
●出栈,再判栈长度;
●销毁栈,再做其他操作,判断程序是否能控制;
●数制转换,输入:
8,输出:
100
实验6、链队列的基本操作(2学时)
通过该实验,使学生理解链队列的构造特点并灵活应用,掌握链队基本操作的编程实现,认识栈是在一端进行插入,在另一端进行删除集中操作的线性结构,掌握队列的“先入先出”操作特点,知道判断队列空和满的条件,进一步熟悉C语言中指针操作。
用链式存储结构,实现教材定义的队列的基本操作。
●初始化一个队列;
●判队列空,屏幕显示队列为空;
●4个数入队,1、2、3、5;
●栈长度,屏幕输出4;
●取队头元素,再判栈空,然后再判栈长度。
让学生知道取队头元素不改变队列中的内容,队头指针不发生改变;
●出队,再判栈长度;
●销毁队,再做其他操作,判断程序是否能控制;
实验7、矩阵的2种转置运算(4学时)
通过该实验,让学生理解矩阵压缩存储的概念、方法等相关知识,掌握用三元组表方式如何进行矩阵的压缩存储,并在此基础上进行转置操作,理解转置和快速转置两种矩阵转置算法的思想。
用三元组表压缩存储矩阵,实现创建矩阵、显示以及教材中介绍的两种转置算法。
●创建,输入:
4(行数)4(列数)5(非零元个数)
(1,1,1)(2,3,2)(3,1,3)(3,4,5)(4,2,4)
检查是否能拦截元素重复输入
●显示
屏幕上输出
1000
0020
3005
0400
●转置
1030
0004
0200
0050
实验8、二叉树的应用(4学时)
通过该实验,使学生理解二叉树的链式存储,掌握二叉树的几种遍历算法,并通过该实验使学生理解递归的含义,掌握C语言编写递归函数的方法和注意事项。
实现教材中算法6.4描述的二叉树创建算法,在此基础上实现二叉树的先序、后序递归遍历算法、两种非递归中序遍历、层序遍历、求二叉树的深度。
●创建
ABC$$DE$G$$F$$$($表示空格)
该输入对应的树如图所示
●先序屏幕输出ABCDEGF
●后序屏幕输出CGEFDBA
●中序屏幕输出CBEGDFA
(两种中序非递归还需看源代码)
●层序屏幕输出ABCDEFG
●深度屏幕显示深度为5
实验9、赫夫曼树的构建(6学时)
通过该实验,使学生理解赫夫曼树的概念,掌握赫夫曼树及赫夫曼编码的构造过程,体会网络发送端和接收端编码和译码过程及其工作原理。
给定报文中26个字母a-z及空格的出现频率{64,13,22,32,103,21,15,47,57,1,5,32,20,57,63,15,1,48,51,80,23,8,18,1,16,1,168},构建赫夫曼树并为这27个字符编制赫夫曼编码,并输出。
模拟发送端,从键盘输入字符串,以%为结束标记,在屏幕上输出输入串的编码;模拟接收端,从键盘上输入0-1赫夫曼编码串,翻译出对应的原文。
●模拟发送端
Iloveyou
01101111011110011100000010111100011100100001
●模拟接收端输入
01101101111011000111111010111101101001100001
itisadog
实验10、构造无向图(算法7.1),深度和广度遍历(4学时)
通过该实验,使学生掌握图的几种存储结构,理解图的深度优先和广度优先遍历算法的思想和实现办法,
实现教材算法7.2利用邻接矩阵构造无向图的算法,提供从邻接矩阵获得邻接表的功能,在此基础上进行深度优先遍历和广度优先遍历。
●创建所示无向图
屏幕输出邻接矩阵
010001
101100
010110
011010
001101
100010
●深度优先遍历
屏幕输出:
123456
●广度优先遍历
126345
实验大纲制订人:
乔保军
实验大纲审定人:
制订日期:
2013.08
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1