山东建筑大学数据结构课程设计报告
数据结构课程设计报告范文

数据结构课程设计报告课程设计报告课程设计题目:链表的创立、插入、删除、修改学生姓名专业计算机科学与技术班级学号指导教师艾9月 30日一、实验题目:实现链表的创立、插入、删除和修改任务:实现链表的创立、插入、删除、修改和输出要求:建立一个简单的人机对话,创立、插入、删除、修改和输出功能能够根据需要选择使用。
二、实验时间、地点:-12-26~ -12-30、信工楼302三、实验目的本次课程设计的主要目的是综合运用所学的数据结构知识解决一个比较实际问题,侧重对链表、数组、字符串、图、树等相关内容的综合应用,使同学们能进一步熟悉掌握数据结构的基础知识,进一步提升自己的解决问题和编程调试能力,为后续专业课程的学习打下良好的基础。
四、实验要求1. 了解数据结构及其分类、数据结构与算法的密切关系;2. 熟悉各种基本数据结构及其操作,学会根据实际问题来选择数据结构;3. 掌握设计算法的步骤和分析方法;4. 掌握数据结构在排序和查找等常见算法中的应用。
5. 独立完成;6.每个人需按照选题规则确定好自己的题目(注意不是多人完成一题,每人独立完成一题),不得以任何理由选择其它的题目,当然在完成自己的题目之后根据个人兴趣能够继续选做其它的题目;7.课程设计完成后严格按照报告格式撰写课程设计报告,并于结束后的第三天上交到学习委员统一交给老师;8.课程设计的成绩由两部分组成:程序检查成绩(40%,每个功能占程序分的20%)+报告检查成绩(40%)+平时考核(20%)五、实现思路链表是一种动态数据结构,她的特点是用一组任意的存储单元(能够是连续的,也能够是不连续的)存放数据元素。
链表中每一个元素成为“结点”,每一个结点都是由数据域和指针域组成的,每个结点中的指针域指向下一个结点。
Head是“头指针”,表示链表的开始,用来指向第一个结点,而最后一个指针的指针域为NULL(空地址),表示链表的结束。
能够看出链表结构必须利用指针才能实现,即一个结点中必须包含一个指针变量,用来存放下一个结点的地址。
《数据结构》课程设计报告范本

《数据构造》课程设计报告一、课程设计旳内容、规定1 线性表旳另一种实现。
对顺序表空间被耗尽问题旳一种解决措施是:当数组溢出时,用一种更大旳数组替代该数组。
一种较好旳法则是:当浮现溢出时,数组长度加长一倍具有较高旳时间和空间效率。
参照教材中顺序表旳有关内容,按上面旳规定实现顺序表,并测试当数组溢出时你旳实现旳运作状况。
二、所采用旳数据构造ADT List{数据对象: D = {a i|a i ∈ElemSet, i=1,2…n>=0}数据关系: R1={<a i-1, a i>|a i-1, a i∈D, i=1,2,…,n}基本操作:void IniList(SqList& L);void DestroyList(SqList& L);bool ListEmpty(SqList L);int ListLength(SqList L);void GetElem(SqList L, int i, Elem &e);bool PriorElem(SqList L, Elem cur_e, Elem &pre_e);bool NextElem(SqList L, Elem cur_e, Elem &next_e);void ListInsert(SqList &L, int i, Elem e);void ListDelete(SqList &L, int i);void ClearList(SqList& L);}三、重要模块(或函数)及其功能typedef struct LIST{ElemType *data;int size;int max_size;}LIST;void InitList(LIST *list)//初始化{list->data = (int*)malloc(sizeof(ElemType)*INIT_SIZE);list->size = 0;list->max_size = INIT_SIZE;}void DestroyList(LIST &list){list.size = 0;list.max_size = 0;free(list.data);}bool ListEmpty(LIST list){if(list.size > 0) return false;else return true;}int ListLength(LIST list)return list.size;}bool GetElem(LIST list,int i,ElemType &e){if(i < 1 || i > list.size) return false;else{e = list.data[i];return true;}}int LocateElem(LIST list, ElemType e,bool (*compare)(ElemType, ElemType)){// 在顺序线性表L中查找第1个值与e满足compare()旳元素旳位序。
数据结构--课程设计报告

信息科学与工程学院课程设计任务书题目:算术表达式求值学号:姓名:年级:专业:计算机网络技术课程:数据结构指导教师:完成时间: 2012年12月28日课程设计任务书及成绩评定目录第一章概述 (1)第二章系统分析 (1)第三章概要设计 (2)第四章详细设计 (5)第五章运行与测试 (13)第六章总结与心得 (16)概述课程设计是实践性教学中的一个重要环节,它以某一课程为基础,可以涉及和课程相关的各个方面,是一门独立于课程之外的特殊课程。
课程设计是让同学们对所学的课程更全面的学习和应用,理解和掌握课程的相关知识。
《数据结构》是一门重要的专业基础课,是计算机理论和应用的核心基础课程。
数据结构课程设计,要求学生在数据结构的逻辑特性和物理表示、数据结构的选择和应用、算法的设计及其实现等方面,加深对课程基本内容的理解。
同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。
在这次的课程设计中我选择的题目是算术表达式求值演示。
表达式计算是实现程序设计语言的基本问题之一,也是栈的应用的一个典型例子。
设计一个程序,演示用算符优先法对算术表达式求值的过程。
深入了解栈和队列的特性,以便在解决实际问题中灵活运用它们,同时加深对这种结构的理解和认识。
系统分析1.以字符列的形式从终端输入语法正确的、不含变量的整数表达式。
利用已知的算符优先关系,实现对算术四则混合运算表达式的求值,并仿照教科书的例子在求值中运算符栈、运算数栈、输入字符和主要操作的变化过程。
2.一般来说,计算机解决一个具体问题时,需要经过几个步骤:首先要从具体问题抽象出一个适当的数学模型,然后设计一个解决此数学模型的算法,最后编出程序,进行测试,调试直至得到想要的答案。
对于算术表达式这个程序,主要利用栈,把运算的先后步骤进行分析并实现简单的运算!为实现算符优先算法,可以使用两个栈,一个用以寄存运算符,另一个用以寄存操作数和运算结果。
3.演示程序是以用户于计算机的对话方式执行,这需要一个模块来完成使用者与计算机语言的转化。
数据结构课设报告-绝对原版大家珍惜啊参考模板

数据结构课程设计报告姓名:班级:学号:指导教师成绩:一.各个课设概述1.算术表达式求值(必做)A 算法思想及数据结构及时间复杂度(括号内容):算式(栈):计算部分(n):建立运算符优先规则,存在一个二维数组中。
运用数字栈和运算符栈,逐个字符读入算式,若字符为数字则放入数字栈;若字符为运算符则让它和元素符栈的栈顶元素比较优先级,若优先级低则进运算符栈,若优先级高,则取数字栈中元素进行运算。
直至读到#。
纠错部分(n):首先对每个读入的字符进行判断,如果非法则终止程序。
对于运算符匹配,则在计算完后查看字符栈和数字栈,进而判断。
B 程序测试正确表达式测试:#7+8+(9+6*5)+4#结果:OPTR:OPND:OPTR: #OPND:OPTR: #OPND: 7OPTR: + #OPND: 7OPTR: + #OPND: 8 7OPTR: #OPND: ?OPTR: + #OPND: ?OPTR: ( + #OPND: ?OPTR: ( + #OPND: 9 ?OPTR: + ( + # OPND: 9 ?OPTR: + ( + # OPND: 6 9 ?OPTR: * + ( + # OPND: 6 9 ?OPTR: * + ( + # OPND: 5 6 9 ?OPTR: + ( + # OPND: N 9 ?OPTR: ( + #OPND: W ?OPTR: + #OPND: W ?OPTR: #OPND: fOPTR: + #OPND: fOPTR: + #OPND: 4 fOPTR: #OPND: jresult: 58错误表达式测试#(7*5)(3+4)#输出结果:OPTR:OPND:OPTR: #OPND:OPTR: ( #OPND:OPTR: ( #OPND: 7OPTR: * ( #OPND: 7OPTR: * ( #OPND: 5 7OPTR: ( #OPND: SOPTR: #OPND: SOPTR: ( #OPND: SOPTR: ( #OPND: 3 SOPTR: + ( #OPND: 3 SOPTR: + ( #OPND: 4 3 SOPTR: ( #OPND: 7 SOPTR: #OPND: 7 S算式操作符搭配有问题,请重新输入。
山东大学数据结构实验报告四

山东大学数据结构实验报告四一、引言数据结构实验报告四旨在通过实践巩固和应用所学的数据结构知识,培养学生的编程能力和问题解决能力。
本次实验的主要目的是设计并实现一个基于数据结构的应用程序,通过使用合适的数据结构和算法解决实际问题。
二、实验内容本次实验要求设计一个程序,实现以下功能:1. 输入一组整数,建立一个二叉排序树;2. 实现二叉排序树的查找、插入和删除操作;3. 对建立的二叉排序树进行中序遍历,并输出排序结果。
三、实验步骤1. 设计二叉排序树的数据结构在开始编写代码之前,我们需要先设计二叉排序树的数据结构。
二叉排序树的每个节点包含一个整数值和两个指针,分别指向左子树和右子树。
2. 实现二叉排序树的建立首先,我们需要实现一个函数,用于创建二叉排序树。
该函数根据输入的一组整数,逐个插入到二叉排序树中。
具体步骤如下:- 创建一个空的二叉排序树;- 依次读取输入的整数,并将其插入到二叉排序树中的合适位置;- 返回建立好的二叉排序树。
3. 实现二叉排序树的查找在二叉排序树中查找一个特定的值,可以使用递归或迭代的方式实现。
具体步骤如下:- 如果当前节点为空,返回空指针;- 如果当前节点的值等于目标值,返回当前节点;- 如果目标值小于当前节点的值,递归地在左子树中查找;- 如果目标值大于当前节点的值,递归地在右子树中查找。
4. 实现二叉排序树的插入在二叉排序树中插入一个新的值,需要保持二叉排序树的有序性。
具体步骤如下:- 如果树为空,将新值作为根节点插入;- 如果新值小于当前节点的值,将新值插入到左子树中;- 如果新值大于当前节点的值,将新值插入到右子树中。
5. 实现二叉排序树的删除在二叉排序树中删除一个特定的值,需要保持二叉排序树的有序性。
具体步骤如下:- 如果树为空,返回空指针;- 如果目标值小于当前节点的值,递归地在左子树中删除;- 如果目标值大于当前节点的值,递归地在右子树中删除;- 如果目标值等于当前节点的值,进行删除操作。
数据结构课程设计报告

数据结构课程设计报告 姓 名: 班 级:05级04班 所选课题:5、封锁资源管理子系统 目录
1、需求分析: 、背景介绍 在并发操作的系统中,许多用户可能同时对同一数据进行操作;并发操作带来的问题是数据的不一致性,并发控制的主要技术是封锁; 封锁资源管理子系统就是通过加锁来控制用户对系统资源的并发使用;基本的封锁类型有S锁共享锁和X锁排他锁;共享锁:用户A对资源R加上S锁,则只允许A读取R,但不能修改R,其它的用户只能再对R加S锁,直到A释放了R上的S锁;这就保证了其它用户可以读R但在A释放R上的S锁之前不能对R进行修改;排它锁:用户A对资源R加上锁,则只允许A读取和修改R其它用户不能再对R加任何锁,直到A释放了R上的锁; 两种封锁方式的相容矩阵如图所示: S X S OK NO X NO NO 相容矩阵 用户使用系统资源前必须申请封锁,即给出申请封锁的对象资源号、封锁方式和用户名;其中资源号是取值为一正整数;子系统受封锁请求,根据所保存的封锁状态信息决定请求是否能够获得封锁,进行相应处理,并向用户反馈处理结果;如果获得封锁,则赋给该请求一个批准号,可以使用该资源;否则需要进入等待队列赋给该请求一个批准号; 用户结束对某资源的使用后,应释放封锁给出封锁对象的资源号和封锁批准号;系统受理解锁请求时必须能迅速找到有关对象的封锁状况信息,以进行相应处理;
、功能要求 1、受理用户资源请求, 把用户添加进等待队列或活动队列 2、受理用户释放资源请求 3、查看资源活动队列 4、查看资源等待队列 5、查看系统所有资源 6、添加资源 7、用户读取使用资源 8、用户修改资源 9、添加用户 用列图如下:
2、概要设计 此部分为整个核心设计的流程,包括资源结构、用户结构、锁结构、等待队列、活动队列、资源高效存储查询的设计,及请求、释放、读、写资源的实现方式设计; 为满足高效存储、查询资源的要求,可采用散列表为资源建索引,并用链表解决冲突,存储的结构如下图所示: 封锁管理子系统示意图 其中散列表的元素对应为封锁对象,以对象的资源号为散列函数的自变量即关键码值;散列表中元素仅为一个指向封锁对象链表的指针;LO为封锁对象结点,对应于同一散列地址的封锁对象链接到一个链表中;LR为封锁请求结点;每个封锁对象结点带两个封锁请求队列:活动队列中为当前持有对该对象的封锁请求,等待队列中为正在等待对该对象进行封锁的封锁请求;LO结点和LR结点均向子系统自己管理的可利用空间表申请; Hash函数采用求余的方法,在这个系统中应为资源的个数是不确定的,因此hash表的大小也可以随着资源数的不同而改变,我的设计是当记录的个数大于资源个数的五倍时hash表大小翻倍; 而S锁和X锁的设计则采用了多态的方法,设计一个公共的抽象基类:Lock里面定义了三个接口,XLock和SLock类都派生自这个类,这样就可以用一个指针来操作这两个不同的锁了; 而请求的批准号则是系统自动给的,用户可以通过查看资源的请求队列和活动队列获得批准号,等待队列和活动队列都是基于链表的,这样就不会浪费空间; 用户请求资源顺序图如下: 用户释放资源顺序图如下:
数据结构课程实验报告

数据结构课程实验报告一、实验目的本次数据结构课程实验的主要目的是通过实践掌握常见数据结构的基本操作,包括线性结构、树形结构和图形结构。
同时,也要求学生能够熟练运用C++语言编写程序,并且能够正确地使用各种算法和数据结构解决具体问题。
二、实验内容本次实验涉及到以下几个方面:1. 线性表:设计一个线性表类,并且实现线性表中元素的插入、删除、查找等基本操作。
2. 栈和队列:设计一个栈类和队列类,并且分别利用这两种数据结构解决具体问题。
3. 二叉树:设计一个二叉树类,并且实现二叉树的遍历(前序遍历、中序遍历和后序遍历)。
4. 图论:设计一个图类,并且利用图论算法解决具体问题(如最短路径问题)。
三、实验过程1. 线性表首先,我们需要设计一个线性表类。
在这个类中,我们需要定义一些成员变量(如线性表大小、元素类型等),并且定义一些成员函数(如插入元素函数、删除元素函数等)。
在编写代码时,我们需要注意一些细节问题,如边界条件、异常处理等。
2. 栈和队列接下来,我们需要设计一个栈类和队列类。
在这两个类中,我们需要定义一些成员变量(如栈顶指针、队头指针等),并且定义一些成员函数(如入栈函数、出栈函数、入队函数、出队函数等)。
在编写代码时,我们需要注意一些细节问题,如空间不足的情况、空栈或空队列的情况等。
3. 二叉树然后,我们需要设计一个二叉树类,并且实现二叉树的遍历。
在这个类中,我们需要定义一个节点结构体,并且定义一些成员变量(如根节点指针、节点数量等),并且定义一些成员函数(如插入节点函数、删除节点函数、遍历函数等)。
在编写代码时,我们需要注意一些细节问题,如递归调用的情况、空节点的情况等。
4. 图论最后,我们需要设计一个图类,并且利用图论算法解决具体问题。
在这个类中,我们需要定义一个邻接矩阵或邻接表来表示图形结构,并且定义一些成员变量(如顶点数量、边的数量等),并且定义一些成员函数(如添加边函数、删除边函数、最短路径算法等)。
数据结构课程设计最终报告

《数据结构》实验报告实验题目:现在有一个英文字典(每个单词都是由小写的'a'-'z'组成),单词量很大,达到120 多万的单词,而且还有很多重复的单词。
此外,我们现在还有一些 Document,每个Document 包含一些英语单词。
针对这个问题,请你选择合适的数据结构,组织这些数据,使时间复杂度和空间复杂度尽可能低,并且解决下面的问题和分析自己算法的时间复杂度。
◎实验目的:在本次课程设计中,希望同学们根据自己所学的知识,查找相关的资料,构造合适的数据结构,尽自己最大的努力解决这些问题,从而使自己学到更多新的知识。
◎实验内容:1)基本型问题(1)选择合适的数据结构,将所有的英文单词生成一个字典 Dictionary。
(2)给定一个单词,判断这个单词是否在字典 Dictionary 中。
如果在单词库中,输出这个单词总共出现的次数。
否则输出NO2)扩展型问题(3)给定一个单词,按字典序输出字典 Dictionary 中所有以这个单词为前缀的单词。
例如,如果字典T={a,aa, aaa, b, ba}, 如果你输入a,那么输出应该为{a, aa, aaa}。
(4)给定一个单词,输出在 Dictionary 中以这个单词为前缀的单词的出现频率最高的10 个单词,对于具有相同出现次数的情况,按照最近(即最后)插入的单词优先级比较高的原则输出。
(5)输出 Dictionary 中出现次数最高的10 个单词。
3)高级型问题(6)现在我们有一些 Document,每个Document 由一些单词组成,现在的问题就是给你一个word,检索出哪些Document 包含这个word,输出这些Document 的DocumentID (就如同搜索引擎一样,即输入一些关键字,然后检索出和这些关键字相关的文档)。
(7)在第(6)问中,我们只考虑了一个word 在哪些Document 中的情况,我们进一步考虑2 个相邻word 的情况,检索出同时包含这两个相邻word 的DocumentID。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
山东建筑大学计算机科学与技术学院 课程设计说明书
题 目: 基于逆邻接表的有向图基本操作的实现 课 程: 数据结构 院 (部): 计算机学院 专 业: 计科 班 级: 133 学生姓名: 潘含笑 学 号: 20131111092 指导教师: 李盛恩 完成日期: 2015.07.03山东建筑大学计算机学院课程设计说明书 目 录 课程设计任务书.................................................. I 课程设计任务书................................................. II 逆邻接链表实现有向图............................................ 3 一、问题描述................................................ 3 二、数据结构................................................ 3 三、逻辑设计................................................ 3 四、编码.................................................... 5 五、测试数据............................................... 14 六、 测试情况.............................................. 16 逆邻接链表实现有向图........................................... 17 一、问题描述............................................... 17 二、数据结构............................................... 17 三、逻辑设计............................................... 17 四、编码................................................... 18 五、测试数据............................................... 24 七、 测试情况.............................................. 24 结 论.......................................................... 26 课程设计指导教师评语........................................... 28 山东建筑大学计算机学院课程设计说明书
I 山东建筑大学计算机科学与技术学院
课程设计任务书
指导教师(签字): 教研室主任(签字) 设计题目 基于逆邻接表的有向图基本操作的实现 已知技术参数和设计要求
题目三、实现类NetWork,实现BFS、DFS、拓扑排序,并实现采用逆邻接表作为存储结构的有向图,要继承NetWork。逆邻接表要使用STL提供的List和Vector等实现。
设计内容与步骤
1、设计存储结构 2、设计算法 3、编写程序,进行调试 4、总结并进行演示、讲解
设计工作计划与进度安排
2015.6.17~2015.6.23,实现基类Network和有向图Graph,实现逆邻接链表的存储结构。 2015.6.23~2015.7.1,编写测试代码。 2015.7.1~2015.7.3,改正一些错误,完成实验。
设计考核要求
1、考勤20%
2、课程设计说明书50% 3、成果展示30% 山东建筑大学计算机学院课程设计说明书
II 山东建筑大学计算机科学与技术学院 课程设计任务书
指导教师(签字): 教研室主任(签字)设计题目 双向循环链表 已知技术参数和设计要求
实现双向循环链表。
设计内容与步骤
5、设计存储结构 6、设计算法 7、编写程序,进行调试 8、总结并进行演示、讲解
设计工作计划与进度安排
2015.4.22~2015.4.35,实现双向循环链表 2015.4.25~2015.4.29,编写测试代码。
设计考核要求
4、考勤20%
5、课程设计说明书50% 6、成果展示30% 山东建筑大学计算机学院课程设计说明书
3 逆邻接链表实现有向图
一、问题描述
二、数据结构 三、逻辑设计 1、总体思路 先实现Network类,通过队列实现BFS,通过堆栈实现DFS和拓扑排序。再构建Graph类,并继承Network类实现以逆邻接链表为存储结构的有向图。
2、模块划分(以图示的方法给出各个函数的调用关系)
2 1 5 4 3
6
1 2 3 4 5 6
1 1 2 3
2 3
4 5 山东建筑大学计算机学院课程设计说明书
4 3、函数或类的具体定义和功能 Network类:
Network类 Graph类 Begin 虚函数 Nextvertex
虚函数 Edges
虚函数 Vertices
虚函数 Initializepos
虚函数 Deactivatepos
虚函数 BFS
函数 DFS
函数 Topological
函数
Begin函数 Nextvertex
函数 Edges
函数 Vertices
函数 Initializepos
函数 Deactivatepos
函数 Out函数 山东建筑大学计算机学院课程设计说明书
5 virtual int Begin(int i) = 0;//确定起始顶点 virtual int Nextvertex(int i) = 0;//下一个顶点 virtual int Edges()=0;//确定点 virtual int Vertices()=0;//确定边 virtual void Initializepos(int i)=0;//让迭代器等于链表的第i个顶点的第一个元素 virtual void Deactivatepos(int i)=0;//删除迭代器指的元素 void BFS(int v,int reach[],int label,int a[]);//宽度遍历 void DFS(int v,int reach[],int label,int a[]);//深度遍历 bool Topological(int v[]);//拓扑排序 virtual ~Network();//析构函数
Graph类: virtual ~Graph();//析构函数 int InDegree(int node);//入度 int OutDegree(int node);//出度 Graph& Add(int node1, int node2);//添加点 Graph& Delete(int node1, int node2);//删除点 int Begin(int i);//确定起始顶点 int Nextvertex(int i);//下一个顶点 int Edges() {return e;}//确定点 int Vertices() {return n;}//确定边 void Initializepos(int i){pos=al[i].begin(); }////让迭代器等于链表的第i个顶点的第一个元素 void Deactivatepos(int i){al[i].erase(pos);}//删除迭代器指的元素 void Out();//输出函数
四、编码 //Network.h #include #include #include #include using namespace std; class Network {
public: virtual int Begin(int i) = 0; 山东建筑大学计算机学院课程设计说明书 6 virtual int Nextvertex(int i) = 0; virtual int Edges()=0; virtual int Vertices()=0; virtual void Initializepos(int i)=0;//让迭代器等于链表的第i点的第一个元素 virtual void Deactivatepos(int i)=0;//删除迭代器指的元素 void BFS(int v,int reach[],int label,int a[]);//宽度遍历 void DFS(int v,int reach[],int label,int a[]);//深度遍历 bool Topological(int v[]);//拓扑排序 virtual ~Network();
}; //Network.cpp #include "Network.h" void Network::BFS(int v,int reach[],int label,int a[]) {
int n=Vertices(); //获取n的值,有几个顶点 queue Q; //创建一个队列 int k=0; //定义一个k来使元素得到保存 reach[v]=label; //标记点 a[k++]=v; //用数组记录BFS的遍历顺序 Q.push(v); //把一个元素加入队列 while(!Q.empty()) { int x; x=Q.front(); //获取队列中的第一个元素 Q.pop(); //让队列中的第一个元