Removed_数据结构课程设计实验指导书
Removed_自动化课程设计格式说明书54
湘潭大学课程设计说明书(居中隶书小初)题目:三号宋加粗课程名称:三号宋加粗学院:三号宋加粗专业:三号宋加粗学号:三号宋加粗姓名:三号宋加粗指导教师:三号宋加粗完成日期:三号宋加粗课程设计任务书设计题目设计时间学生姓名所在学院学号年级专业班级设计任务及要求:目录1.…………………………………………………………… 页码1.1……………………………………………………………页码1.2……………………………………………………………页码...2.……………………………………………………………页码2.1………………………………………………………… 页码2.2………………………………………………………… 页码...(给出二级目录,宋体小四,20磅行距)设计题目(标题用黑体小二字,居中书写,单倍行距,段前空24磅,段后空18磅。
)摘要:(摘要内容用小四号宋体字书写,两端对齐。
论文的摘要,是课程内容的高度概括,摘要应包括:对设计目的简要描述、对使用的方法和设计过程进行的进行介绍、对设计结果的简要概括等内容。
摘要的写法应力求精确简明,尤其要避免“第1章……;第2章……;……”这样的陈述方式。
)关键词:(不超过5个,每个关键词之间用分号间隔)1. 设计背景(黑体三号字,居中书写,单倍行距,段前空24磅,段后空18磅)1.1 任务阐述(黑体四号(14pt)字居左书写,行距为固定值20磅,段前空24磅,段后空6磅,其中数字、符号采用Times New Roman)(采用小四号(12pt)字,汉字用宋体,英文用Times New Roman体,两端对齐书写,段落首行左缩进2个汉字符。
行距为固定值20磅(段落中有数学表达式时,可根据表达需要设置该段的行距。
)1.2 任务分析(宋体小四,1.5倍行距)2.设计方案2.1 系统方案设计(分析比较各种方案的优缺点,画出系统框图;宋体小四,1.5倍行距)2.2单元电路设计(单元电路设计、参数计算和器件选择;宋体小四,1.5倍行距)注意:图、表和表达式按章编号,用两位阿拉伯数字分别编号,前一位数字为章的序号,后一数字为本章内图、表或表达式的顺序号。
Removed_数据结构约瑟夫环课程设计报告书
:50 45. 44. 43. by 42.41.— 4—0.— 3—9.—3—8.by37@.—— 36.35. —34—. ——33.312. 1.2.3.34.0.5.6—.—29.by28.by@27.26.—— 25. 24. 23. 22. by 21.20. — 1—9.by:18.by:17.— 1—6.— 1—5.—1—4.—— 13. 12. 111.0“. ”by: 9M.“OOOKN”b8y.:——7.——6.——5.——4.——3.——2.——1.——
s=(LNode *)malloc(sizeof(LNode)); if (L==0) p=s; if (n==start) t=s; s->data=n; s->next=L; L=s; n--; } p->next=L; return t; } LNode* GetNode(LNode *p)/*出队函数*/ { LNode *q; for (q=p;q->next!=p;q=q->next); q->next=p->next; free (p); return (q); }
其次,建立一个不带头结点的循环链表并由头指针 p 指示。
最后,设计约瑟夫环问题的算法。
1、工作指针 first,r,s,p,q 初始化
2、输入人数(n)和报数(m)
3、循环 n 次,用尾插法创建链表
int start=k-1; LNode *s,*p,*L=0,*t; if (start==0) start=n; while (n!=0) { s=(LNode *)malloc(sizeof(LNode)); if (L==0) p=s; if (n==start) t=s; s->data=n; s->next=L; L=s; n--; } p->next=L; return t; } LNode* GetNode(LNode *p)/*出队函数*/ { LNode *q; for (q=p;q->next!=p;q=q->next); q->next=p->next; free (p); return (q); }
Removed_合肥工业大学编译原理实验 LL(1)分析法
if(c==Vt[i])return i;//在表中,就返回位置 } return -1;//返回-1 表示不在表中 } void addfi(String s, int j){//求关于某一个产生式的 first 集 int v=vn(s.charAt(0));//v 为产生式左边的非终结符 int i; if(vt(s.charAt(j))!=-1){//产生式右边第一个为终结符
fi[v][vt(s.charAt(j))]=true;//就把 s.charAt(j)加入 s.charAt(0)的 first 集
}else{//产生式右边第一个为非终结符 if(!fi[vn(s.charAt(j))][Vt.length]){//如果 s.charAt(j)的
first 集没有求,先求 s.charAt(j)的 first 集 first(s.charAt(j));
int vn(char c){//返回 c 在非终结符表中的位置 int i; for(i=0;i<Vn.length;i++){ if(c==Vn[i])return i;//在表中,就返回位置 } return -1;//返回-1 表示不在表中
} int vt(char c){//返回 c 在终结符表中的位置
4、算法流程图
:50 45. 44. 43. by 42.41.— 4—0.— 3—9.—3—8.by37@.—— 36.35. —34—. ——33.312. 1.2.3.34.0.5.6—.—29.by28.by@27.26.—— 25. 24. 23. 22. by 21.20. — 1—9.by:18.by:17.— 1—6.— 1—5.—1—4.—— 13. 12. 111.0“. ”by: 9M.“OOOKN”b8y.:——7.——6.——5.——4.——3.——2.——1.——
数据结构课程实验指导书
《数据结构》实验指导书第一部分前言一、实验的目的《数据结构》是计算机学科一门重要的专业基础课程,也是计算机学科的一门核心课程。
本课程的另一重要教学目的是训练学生进行复杂程序设计的技能和培养良好程序设计的习惯,要做到这一点,上机实习是必须的。
数据结构实验是对学生的一种全面综合训练,是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。
通常,实验课题中的问题比平时的习题复杂得多,也更接近实际。
实验着眼于原理与应用的结合点,使学生学会如何把书上学到的知识用于解决实际问题,训练学生实际动手进行程序设计和调试程序的能力,加深对数据结构相关概念和算法的理解。
通过完成本实验课程的实验,学生应学会并掌握本课程的基本和重点知识,深刻理解逻辑结构、物理结构和算法设计之间的关系,初步学会算法分析的方法,并能在一定范围内运用所掌握的分析方法进行算法分析,培养软件工作所需要的动手能力和作为一个软件工作者所应具备的科学工作方法和作风。
二、实验前的准备工作1.每个学生需配备一台计算机,操作系统需Windows2000/XP以上版本,软件需Visual C++6.0以上版本。
2.实验前要求学生按实验要求编写好相关实验程序,准备上机调试运行。
三、实验的步骤(一)建立一个文件夹,如“数据结构”,用来存放自己的所有实验程序,在该文件夹中建立子目录用来存放每个项目(一个子目录一个项目),如“顺序表”,项目中需要的所有文件都存在该文件夹中。
(二)新建一个项目文件1.双击Visual C++ 6.0快捷图标,进入Visual C++ 6.0集成开发环境;或者点击“开始”→“程序”→“Microsoft Visual Studio 6.0”→“Microsoft Visual C++ 6.0”进入Visual C++ 6.0集成开发环境。
2.单击“File”菜单,选择“New”命令3.创建一个项目文件并保存在项目所在文件夹中;3. 创建源程序文件并保存在项目所在文件夹中;4.输入源程序;5.单击“保存”按钮保存源程序。
《数据结构》实验指导书
《数据结构》实验指导书软件学院2011年9月概述实习目的和要求《数据结构》在计算机科学中是一门实践性较强的专业基础课, 上机实习是对学生的一种全面综合训练, 是与课堂听讲、自习和练习相辅相成的必不可少的一个教学环节。
实习着眼于原理与应用的结合, 使学生学会把学到的知识用于解决实际问题, 起到深化理解和灵活掌握教学内容的目的。
同时, 通过本课程的上机实习, 使学生在程序设计方法及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。
实习包括的步骤1. 简要描述题目要求, 对问题的描述应避开算法及所涉及的数据类型, 只是对所需完成的任务做出明确的陈述, 例如输入数据的类型、值的范围以及输入的形式, 输出数据的类型、值的范围以及输出的形式。
2. 选定数据结构, 写出算法, 根据自顶向下发展算法的方法, 首先描述算法的基本思想, 然后进行算法细化, 再对所设计的算法的时间复杂性和空间复杂性进行简单分析。
3. 准备好上机所需的程序, 选定一种程序设计语言(如C 语言), 手工编好上机程序, 并进行反复检查, 使程序中的逻辑错误和语法错误减少到最低程度。
对程序中有疑问的地方, 应做出标记, 以便在上机时给予注意。
4.上机输入和调试程序, 在调试程序过程中除了系统的问题以外, 一般应自己独立解决。
在程序调试通过后, 打印输出程序清单和运行结果。
5.上机结束后, 总结和整理实习报告。
实习报告的内容1.简述题目要解决的问题是什么, 并说明输入和输出数据的形式。
2.简述存储结构和算法的基本思想。
3.列出调试通过的源程序。
4.列出上面程序对应的运行结果。
分析程序的优缺点、时空性能以及改进思想, 写出心得体会。
实验一线性表一. 目的与要求本次实习的主要目的是为了使学生熟练掌握线性表的基本操作在顺序存储结构和链式存储结构上的实现, 提高分析和解决问题的能力。
要求仔细阅读并理解下列例题, 上机通过, 并观察其结果, 然后独立完成后面的实习题。
Removed_数据结构实验2——栈和队列实验报告37
int top; //栈顶指针 }; template <class T> void SeqStack<T>::Push(T x) //入栈操作 {
if(top>=StackSize-1) throw "上溢"; top++;//栈顶指针上移 data[top]=x; } template <class T> void SeqStack<T>::Pop()//出栈操作 { if(Empty()) throw "下溢"; top--;//栈顶指针下移 } template <class T> bool SeqStack<T>::Judgement()//判断该位置是否合适 { for(int i=0;i<top;i++)
void Push(T x); //入栈操作
void Pop();//出栈操作
void PlaceQueen(int row); //放置皇后
bool Judgement();//判断是否符合条件
void Print();//输出符合条件的皇后排列
bool Empty(){if(top==-1) return true;else return false;}; //判断栈是 否为空
Print();//输出符合条件的皇后
} }
Pop();//出栈
} } template <class T>
void SeqStack<T>::Print()//输出皇后函数
{ cout<<"NO."<<num<<":"<<endl; for(int i=0;i<StackSize;i++) {
Removed_微机接口技术实验任务书
图 1-1 Masm for Windows 集成实验环境
三、预备知识
在学习汇编语言、用 MASM 进行编程、上机调试中,一个重要的调试工具就是 DEBUG,它 通过步进、设置断点等方式为汇编语言程序员提供了非常有效的调试手段。DEBUG 功能很多, 每项功能是通过用户(上机者)键入某个 CEBUG 命令来请求的。所有的 DEBUG 命令均为单字符, 且不区分大小写。大部分命令都可以带有参数,而第一个参数与命令符间可不带空格分隔符。
1. 熟悉 Windows XP 操作系统下汇编集成软件的环境与用法。 2. 掌握汇编集成软件环境下进行程序编辑、连接编译和运行调试汇编语言程序的过程。 3. 掌握 DEBUG 的基本命令及其功能。
二、实验条件与环境
1. PⅡ以上的 PC 计算机,及操作系统 Windows XP。 2. Masm for Windows 集成实验环境 V6.0 版本。 Masm for Windows 集成实验环境 V6.0 以上版本其集成环境如图 1-1 所示:
其中 F3,“X”“Y”“Z”和 8D 各占一个字节,用这五个字节代替原内存单元
:50 45. 44. 43. by 42.41.— 4—0.— 3—9.—3—8.by 37@.—— 36.35. —34—. ——33.3312..1.2.3.43.05..6—.—29.by28.by@ 27.26.—— 25. 24. 23. 22. by 21.20. — 1—9.by:18.by:17.— 1—6.— 1—5.—1—4.—— 13. 12. 111.0.“ ”by:M9.“OOOKN”b8y. :——7.——6.——5.——4.——3.——2.——1.——
数据结构课程实验指导书
数据结构实验指导书一、实验目的《数据结构》是计算机学科一门重要的专业基础课程,也是计算机学科的一门核心课程。
本课程较为系统地论述了软件设计中常用的数据结构以及相应的存储结构与实现算法,并做了相应的性能分析和比较,课程内容丰富,理论系统。
本课程的学习将为后续课程的学习以及软件设计水平的提高打下良好的基础。
由于以下原因,使得掌握这门课程具有较大的难度:1)理论艰深,方法灵活,给学习带来困难;2)内容丰富,涉及的知识较多,学习有一定的难度;3)侧重于知识的实际应用,要求学生有较好的思维以及较强的分析和解决问题的能力,因而加大了学习的难度;根据《数据结构》课程本身的特性,通过实验实践内容的训练,突出构造性思维训练的特征,目的是提高学生分析问题,组织数据及设计大型软件的能力。
课程上机实验的目的,不仅仅是验证教材和讲课的内容,检查自己所编的程序是否正确,课程安排的上机实验的目的可以概括为如下几个方面:(1)加深对课堂讲授内容的理解实验是对学生的一种全面综合训练。
是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。
通常,实验题中的问题比平时的习题复杂得多,也更接近实际。
实验着眼于原理与应用的结合点,使学生学会如何把书上学到的知识用于解决实际问题,培养软件工作所需要的动手能力;另一方面,能使书上的知识变"活",起到深化理解和灵活掌握教学内容的目的。
不少学生在解答习题尤其是算法设计时,觉得无从下手。
实验中的内容和教科书的内容是密切相关的,解决题目要求所需的各种技术大多可从教科书中找到,只不过其出现的形式呈多样化,因此需要仔细体会,在反复实践的过程中才能掌握。
(2)培养学生软件设计的综合能力平时的练习较偏重于如何编写功能单一的"小"算法,而实验题是软件设计的综合训练,包括问题分析、总体结构设计、用户界面设计、程序设计基本技能和技巧,多人合作,以至一整套软件工作规范的训练和科学作风的培养。
《数据结构》实验指导书(新教学计划)
数据结构实验指导书数据结构实验指导书目录数据结构实验指导书 (1)目录 (1)实验指导书概述 (2)实验题目 (3)实验一单链表的插入、删除 (3)[实验目的] (3)[实验内容] (3)[测试数据] (3)[实现提示] (3)实验二栈及其应用 (5)[实验目的] (5)[实验内容] (5)[测试数据] (5)实验三二叉树的递归算法 (5)[实验目的] (5)[实验内容] (6)[测试数据] (6)实验四查找及排序算法的应用 (7)[实验目的] (7)[实验内容] (7)[测试数据] (7)实验指导书概述“数据结构”是计算机专业一门重要的专业技术基础课程,是一门关键性核心课程。
本课程系统地介绍了软件设计中常用的数据结构以及相应的存储结构和实现算法,介绍了多种常用的查找和排序技术,并对其进行了性能分析和比较,内容非常丰富。
本课程的学习将为后续课程的学习以及软件设计水平的提高打下良好的基础。
由于以下原因,使得掌握这门课程具有较大难度:∙内容多,时间短,给学习带来困难;∙贯穿全书的动态链表存储结构和递归技术是学习中的重点和难点;∙隐含在各部分的技术和方法丰富,也是学习的重点和难点;∙先修课程中所介绍的专业性知识不多,加大了学习难度。
由于数据结构课程的技术性与实践性,《数据结构课程实验》的设置十分必要。
为了帮助学生更好地学习本课程,理解和掌握算法设计所需的技术,为整个专业学习打好基础,要求运用所学知识,上机解决一些典型问题,通过分析、设计、编码、调试等各环节的训练,使学生深刻理解、牢固掌握所用到的一些技术。
数据结构中稍微复杂一些的算法设计中可能同时要用到多种技术和方法,如算法设计的构思方法,动态链表,算法的编码,递归技术,与特定问题相关的技术等,要求重点掌握线性链表、二叉树和树、图结构、数组结构相关算法的设计。
在掌握基本算法的基础上,掌握分析、解决实际问题的能力。
通过实验实践内容的训练,突出构造性思维训练的特征, 提高学生组织数据及编写大型程序的能力。
数据结构课程设计实验指导书
数据结构课程设计实验指导书《数据结构课程设计》实验指导书1.1编写实验报告的基本要求1.1.1问题描述这一部分需要简要介绍课题的内容,即实验将要做什么。
1.1.2算法描述这一部分需要详细描述解决问题需要用到算法和重要的数据结构,即该实验到底应该怎么做。
基本要求:应清楚地描述处理问题所用的关键算法,而不仅仅是主要功能。
算法和数据结构可以用伪代码和图表来描述。
不要只写源代码和注释。
1.1.3试验结果这一部分内容需要紧扣实习的题目类型和要求,涉及提供相应的测试方法和结果。
对于需要通过某种算法解决的问题,需要设计并填写测试用例表。
每个测试用例通常包括以下内容:(1)测试输入:设计一组输入数据;(2)测试目的:设计此输入的目的是测试程序中可能存在的漏洞;(3)正确输出:应该输入的内容。
如果程序正确,则应将其输出;(4)实际输出:数据输入后实际测试得到的输出;(5)错误原因:如果实际输出与正确输出不符,需分析产生错误的可能原因;(6)当前状态:可分为三种状态:通过(实际输出与正确输出一致)、已纠正(实际输出与正确输出不一致,但现在已正确修改)和待修改(实际输出与正确输出不一致,尚未纠正);(7)测试结果分析:需要详细解释测试策略,对得到的数据进行分析,总结出算法的时空复杂度,得出自己对算法性能等方面分析的结论。
附录:源代码源代码列在附录中。
节目风格要求清晰易懂,有足够的评论。
如果有意义的注释行少于代码的30%,则不会评分。
1.2实习作业的提交要求每个实习项目完成后,学生应根据实验报告的格式和内容要求提交一份实验报告(印刷版),同时提交一份压缩电子数据。
电子数据应按如下方式包装:学号姓名.rar文件夹:包括实验报告的电子版源代码文件代码文件夹:源代码文件对应的可执行文件readme.txt文件,告知如何编译源代码,生成可执行文件2.1实验项目2.1.1通讯录管理问题描述:设计一个计算机程序来实现地址簿管理。
设计要求:1.设计一个含有6个菜单项的主控菜单,这6个菜单项的内容和输入提示如下:1建立通讯录2插入通讯录节点3查询通讯录节点4删除通讯录节点5输出通讯录0退出管理系统。
Removed_B13计本_数据结构课程设计任务书
B13计算机科学与技术《数据结构与算法分析》课程设计任务书电气与信息工程学院计算机系颜慧(2014.11)一.课程设计目的2013级计算机科学与技术(本)专业学生在学习《数据结构与算法分析》课程后,进行为期2周的课程设计。
本次课程设计要达到如下教学目的:1.巩固已学过的基础知识。
包括:复习巩固顺序表、链表、字符串、栈、队列、数组、矩阵、树与二叉树、图等数据结构的逻辑结构、存储结构和基本操作的实现和应用;递归、查找、排序等技术。
2.提高基础知识的应用水平,对零散的知识点进行整合,形成完整的编程知识,提高编程能力和编程技巧。
3.学会具有一定规模应用项目的分析、设计、实现、调试的方法和步骤,在实践中掌握设计要点。
4.学会自己进行参考资料的收集、整理;掌握课程设计文档的撰写方法和要点。
二.设计课题及要求本次课程设计由指导教师指定课题。
学生运用所学的数据结构的知识,从下面题目中选择一个题目完成。
(一).复杂表达式求值(栈的应用)设计要求:求复杂算数表达式的值。
具体要求:设计一个程序,计算含有如下标识符的表达式的值。
(1) 数值:包括整数和实数,数值可带正、负号。
(2) 一般运算符:正号、负号、加、减、乘、除、求模和乘方,其中可以包括括号。
(3) 单词(即运算函数):abs、sqrt、exp、ln、log10、sin、cos和tanh。
例如:输入一个表达式: 2*sqrt(16)-(-3+5)*(-5),得到运算结果18(二). 文字处理程序(字符串的应用)设计要求:用户可通过键盘输入一页文字,也可以从硬盘上打开一个文件,设计一个可以统计出字符个数的程序(分别统计各种字符和总字符数),并可实现查找、替换、文件的保存、文件的加密和解密等功能。
具体要求:用户可以输入一页文字,每行最多不超过80个字符,共N行。
输入的文字包括英文字母(可大小写)、任何数字及标点符号。
将用户输入的文字存储在本地硬盘上。
(1)分别统计出其中的英文字母个数、空格个数、整篇文章总字数(带标点符号),并显示统计信息;(2)统计某一字符串在文章中出现的次数,并输出该次数;(3)允许用户删除某一子串,并将后面的字符前移。
数据结构课程设计指导书
{count++;
q=p;
p=p->next;ቤተ መጻሕፍቲ ባይዱ
if(p->data==NULL)
{q=p;p=q->next;}
}
printf("%d",p->data);
if(p!=q)
{q->next=p->next;
free(p);
p=q->next;}
else
{
free(p);
/*建立一个无头结点的循环单链表*/
p=malloc(sizeof(LNode));
p->data=1;
p->next=p;
for(i=n;i>1;i--)
{q=malloc(sizeof(LNode));
q->data=i;
q->next=p->next;
p->next=q;
}
/*查找报数的起始结点*/
【基本要求】
(1)设计本校的校园平面图,所含景点不少于6个。以图中顶点表示校内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。
(2)为来访客人提供图中任意景点相关信息的查询。
(3)为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。可以拓展。
Alter()的功能:修改某人的信息,如果未找到要修改的人,则提示通讯录中没有此人的信息,并返回选单。
Delete()的功能:删除某人的信息,如果未找到要删除的人,则提示通讯录中没有此人的信息,并返回选单。
List()的功能:显示通讯录中的所有记录。
Save()的功能:保存通讯录中的所有记录到指定文件中。
数据结构课程设计指导书
数据结构课程设计指导书《数据结构》课程设计指导书一、课程设计目的《数据结构》是一门实践性较强的软件基础课程,为了学好这门课程,必须在掌握理论知识的同时,加强上机实践。
课程设计是加强学生实践能力的一个强有力手段。
本课程设计的目的就是要达到理论与实际应用相结合,使学生深化理解书本知识,获取上机实践经验,使学生能够根据数据对象的特性,学会数据组织的方法,能把现实世界中的实际问题在计算机内部表示出来,并培养软件工作者所需的动手能力、独立解决问题的能力。
该课程设计侧重软件设计的综合训练,包括问题分析、总体结构设计、用户界面设计、程序设计基本技能和技巧,以至一整套软件工作规范的训练和科学作风的培养。
通过该课程设计的操作与实践,使学生真正掌握数据结构相关算法的实现及应用方法,在一定程度上提高使用数据结构相关算法的综合设计能力,具体掌握的基本能力如下:1.了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;2.初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;3.提高综合运用所学的理论知识和方法独立分析和解决问题的能力;4.训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。
二、课程设计要求学生必须仔细阅读《数据结构》课程设计方案,认真主动完成课程设计的要求。
通过设计一个完整的程序,使学生掌握数据结构的应用,算法的编写。
要求如下:1.做好上机准备:要充分认识课程设计对自己的重要性,认真做好设计前的各项准备工作。
每次上机前,要事先编制好准备调试的程序,认真想好调试步骤和有关环境的设置方法,准备好有关的文件。
2.既要虚心接受老师的指导,又要充分发挥主观能动性。
结合课题,独立思考,努力钻研,勤于实践,勇于创新。
充分利用时间,安排好课程设计的时间计划,并在课程设计过程中不断检测自己的计划完成情况,及时向教师汇报。
3.独立思考,独立完成:课程设计中各项任务的设计和调试要求独立完成,遇到问题可以讨论,但不可以拷贝。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构课程设计指导书计算机科学与技术学院2016年1月目录1前言 (3)2 顺序表与链表 (6)2.1 实验内容 (6)2.2 实现提示 (7)3 树和二叉树 (8)3.1 实验内容 (8)3.2 实现提示 (8)4 图 (9)4.1 实验内容 (9)4.2 实现提示 (10)5 赫夫曼编码 (11)5.1赫夫曼编码的应用 (11)5.2设计要求 (11)5.3 实验内容 (12)5.4 问题分析 (13)5.5 实现提示 (13)1前言《数据结构》是计算机科学与技术专业的一门核心专业基础课程,它主要介绍线性结构、树型结构和图型结构的存储实现与基本操作,尤其是查找与排序算法的实现,并分析相应算法的时间、空间效率。
其主要任务是培养学生的算法设计能力及良好的程序设计习惯。
通过学习,要求学生掌握典型算法的设计思想及程序实现,能够根据实际问题选取合适的存储方案、设计出简洁、高效、实用的算法,并为后续课程的学习及软件开发打下良好的基础。
为了更好地配合数据结构课程的实践,特编写此课程设计指导书。
1.1指导思想本次课程设计的指导思想是:1、学习获取知识的方法;2、提高发现问题、分析问题和解决实际问题的能力;3、加强创新意识和创新精神;4、加强团队的分工与合作;5、掌握面向实际背景思考问题的方法。
1.2设计任务本次课程设计任务主要分为个人任务和小组任务两种。
个人基本任务:完成第2章以及第3章中的设计任务,其中选做题可不做。
小组任务:完成第4章和第5章的设计任务,其中选做题可不做。
1.3要求1、每项目小组人员为3~5名。
2、每项目小组提交一份课程设计报告,内容包括:课题名称(第4、第5个任务为两个课题),课题参加人员名单和贡献度,课题的目的,课题内容,需求分析、概要设计、主要代码分析、测试结果、课题特色和创新之处、使用说明、收获与体会。
3、每人必须在完成个人任务的基础上提交个人任务的设计报告,内容包括:任务名称、目的、具体内容、需求分析、概要设计、主要代码分析、测试结果、收获与体会。
无论是个人任务还是小组任务希望各小组团队合作,小组成员之间应互相讨论,互相启发。
1.4参考进度第1天,布置任务。
第1、2、3天,完成第2章任务第4、5、6天,开始第3章任务。
第7到10天,完成小组任务。
说明:以上所指的“天”为一个时间段,也就是我们半天的上课时间。
1.5成绩评定采用小组考核和个人考核两级考核方法。
1、小组考核(1)圆满完成第4章和第5章的全部内容的小组成绩为优。
(2)第4章选做题任务未完成的小组成绩为良。
(3)未通过验收的项目为不及格。
2、个人考核:全部完成并经过良好测试才能评优。
个人未完成选做题任务的为良;个人只完成所有个人任务的一半以上的为及格;个人成绩的评定还受项目组成绩影响。
3、小组成绩折算成个人成绩方法:小组交实验报告时同时交一份成员贡献表(该贡献表位于封面的下一页),表格式如下:学号姓名贡献度101张三120102李四90103王五90104钱六100(总计)400上表中,如果成员数为4,则贡献度总和为400。
如果小组成绩为80分,则折算到个人的成绩如下:张三:80*120/100=96分李四:80*90/100=72分王五:80*90/100=72分钱六:80*100/100=80分如果某小组无此表格,则每个成员的贡献度按100计算。
如果某小组的贡献度平均值大于100,则降低组长的贡献度,使得平均值为100。
如果某同学折算的小组成绩超过100分,则按100分计。
1.6注意事项:1、迟到3次或缺席一次,成绩下降一个档次,迟到6次或缺席2次,成绩再下降一个档次,依次类推。
2、上机时发现玩游戏一次,成绩下降一个档次,玩游戏二次,成绩再下降一个档次,依次类推。
3、课程设计开始前,各班的同学在班内自由组合,形成小组,每小组自行推荐小组长一人,在课程设计开始的第一天上交组长名单、小组组员名单,名单上注明班级、学号、姓名。
4、小组成员尽量坐在一起,在电脑正常的情况下,座位需要固定下来。
1.7参考书目[1] 严蔚敏等著,数据结构(C语言版),清华大学出版社2 顺序表与链表2.1 实验内容1、顺序表的应用(1).对于顺序存储的线性表,请实现以下功能:1)实现二路归并排序算法。
2)实现快速排序算法。
3)实现堆排序算法。
4)实现冒泡排序和选择排序算法(2).已知长度为n的线性表A采用顺序存储结构,请写一时间复杂度为0(n)、空间复杂度为0(1)的算法,该算法删除线性表中所有值为item的数据元素。
要求:线性表元素个数n很大,而值为item的数据元素个数很少,要求移动元素个数尽量少;删除后的数组元素与原数组元素不必保持顺序一致。
(3).编写一个主函数,调试上述算法。
注:需要额外设计一个线性表初始化的函数。
(4). 对上述五个排序算法,使用两个长度为50万的线性表分别测试其性能,记录其运行时间(生成线性表的时间不计算在内)。
第一个:线性表内的元素值随机生成;第二个:线性表的第i个元素值为i,即本来就有序。
说明:如果算法本身原因导致程序运行出错,可不做改进,在实验报告中说明现象即可。
2、链表的应用(1).假设有两个按元素值递增次序排列的线性表A和B,均以单链表形式存储,里面的大部分元素对应相等,请删除一些元素(A中有而B中没有,或B中有而A中没有),使得两个有序表中保留下来的元素对应相等(相当于求集合的交集)。
比如,A中元素为(1,3,5,7,8,10,13,18),B中元素为(1,3,6,8,9,10,13,15),则删除元素后A、B里的元素为(1,3,8,10,13)。
(2).猴子选大王。
n只猴子围成一圈,从1到m报数,报m的猴子出局。
余下的猴子从第m+1只开始继续从1到m报数,报m的猴子出局。
第n只猴子报数后,第1只猴子接着报数(因为围成了圈)。
待整个圈只剩下一只猴子时,该猴子即为大王。
n和m由用户输入,请输出当选大王的猴子的编号。
(3).设有一头指针为L的带有表头结点的非循环双向链表,其每个结点中除有prev(前驱指针),data(数据)和next(后继指针)域外,还有一个访问频度域freq。
在链表被起用前,其值均初始化为零。
每当在链表中进行一次Locate(L,x)运算时,令元素值为x的结点中freq域的值增1,并使此链表中结点保持按访问频度非增(递减)的顺序排列,同时最近访问的结点排在频度相同的结点的最后,以便使频繁访问的结点总是靠近表头。
试编写符合上述要求的Locate(L,x)运算的算法,该运算为函数过程,返回找到结点的地址,类型为指针型。
(4).对于稀疏矩阵的存储,可不使用二维数组来存储,而使用链表,只存储其中的非0元素。
链表中的每个结点包含的域为(行,列,值, next),如以下稀疏矩阵:02000300060000000700则链表为:请实现两个稀疏矩阵的相加,并输出结果。
要求:相加后原来的两个矩阵仍然存在。
(5).在主函数中设计一个简单的菜单,分别调试上述算法。
3、选做题(1).对顺序表的快速排序算法中,如何选取一个界值(又称为轴元素),影响着快速排序的效率,而且界值也并不一定是被顺序表中的一个元素。
例如,我们可以用被划分序列中所有元素的平均值作为界值。
编写算法实现以平均值为界值的快速排序方法。
(2).设有n个待排序元素存放在一个不带表头结点的单链表中, 每个链表结点只存放一个元素, 头指针为r。
试设计一个算法, 对其进行二路归并排序, 要求不移动结点中的元素, 只改各链结点中的指针, 排序后r仍指示结果链表的第一个结点。
2.2 实现提示(1)顺序表的第2题:顺序表中删除值为item的元素:并未要求元素间的相对位置不变。
因此可以考虑设头尾两个指针(i=1,j=n),从两端向中间移动,凡遇到值item的数据元素时,直接将右端元素左移至值为item的数据元素位置。
(2)选做题的快速排序:保存划分的第一个元素。
以平均值作为枢轴,进行普通的快速排序,最后枢轴的位置存入已保存的第一个元素,若此关键字小于平均值,则它属于左半部,否则属于右半部。
(3)选做题的二路归并排序:先对待排序的单链表进行一次扫描, 将它划分为若干有序的子链表, 其表头指针存放在一个指针队列中。
当队列不空时重复执行, 从队列中退出两个有序子链表, 对它们进行二路归并, 结果链表的表头指针存放到队列中。
如果队列中退出一个有序子链表后变成空队列, 则算法结束。
这个有序子链表即为所求。
3 树和二叉树3.1 实验内容1.基本题(1)输入字符序列,建立二叉链表。
(2)遍历二叉树输出。
(3)在二叉树中查找值为x的结点,请编写一算法用以打印值为x的结点的所有祖先,假设值为x的结点不多于1个。
3.2 实现提示(1)基本题第3题:非递归后序遍历该二叉树,由于最后才访问根结点,当访问到值为x的结点时,栈中所有元素均为该结点的祖先。
4 图4.1 实验内容1.有向图(1)键盘输入数据,建立一个有向图的邻接表,并输出该邻接表。
(2)采用邻接表存储实现有向图的深度优先遍历。
(3)试写一算法,判断以邻接表方式存储的有向图中是否存在由顶点Vi到顶点Vj的路径(i<>j)。
(4)已有邻接表表示的有向图,请编程判断从第u顶点至第v顶点是否有简单路径,若有则印出该路径上的顶点。
(5)在主函数中设计一个简单的菜单,分别调试上述算法。
2.无向图(1)建立一个无向图的邻接表,并输出该邻接表。
(2)采用邻接表存储实现无向图的深度优先遍历。
(3)无向图采用邻接表存储方式,试写出删除边(i,j)的算法,并输出深度优先遍历的结果。
(4)在主函数中设计一个简单的菜单,分别调试上述算法。
3.选做题:(1)最小生成树问题:若要在n个城市之间建设通信网络,只需要架设n-1条线路即可。
如何以最低的经济代价建设这个通信网,是一个网的最小生成树问题。
设无向图的顶点数不超过30个,并为简单起见,图中边的权值设成小于100的整数。
步骤:1)利用普里姆算法求网的最小生成树。
2)以文本形式输出生成树中各条边以及他们的权值.例.测试运行实例:对下图求最小生成树。
(2)关键路径问题步骤:1、建立AOE网的存储结构2、对AOE网进行拓扑排序,同时按拓扑序列的次序求出各顶点事件的最早发生时间ve。
3、按拓扑序列的逆序求出各顶点事件的最迟发生时间vl。
4、根据各顶点事件的ve值和v1值,求出各活动ai的最早开始时间e(i)和最迟开始时间l(i)。
若e(i)=1(i),则ai为关键活动。
5、求关健路径例.测试运行实例:对下图求出关键路径。
4.2 实现提示(1)有向图第4题:以顶点u为起点,非递归深度优先遍历图,当访问到顶点v时,栈中所有元素均为路径上的顶点。
5 赫夫曼编码5.1赫夫曼编码的应用赫夫曼编码的应用很广泛,利用赫夫曼树求得的用于通信的二进制编码称为赫夫曼编码。