数据结构课程设计报告书
- 格式:doc
- 大小:276.00 KB
- 文档页数:18
数据结构课程设计实验报告完整版【正文】一、实验目的本实验主要目的是通过实践,掌握数据结构的基本概念、常见数据结构的实现方式以及在实际应用中的应用场景和效果。
二、实验背景数据结构是计算机科学与技术领域中的一个重要概念,是研究数据的组织方式、存储方式、访问方式以及操作等方面的方法论。
在计算机科学领域,数据结构是实现算法和解决问题的基础,因此对数据结构的理解和应用具有重要意义。
三、实验内容本次数据结构课程设计实验主要分为以下几个部分:1. 实验环境的准备:包括选择合适的开发平台、安装必要的软件和工具。
2. 实验数据的收集和处理:通过合适的方式收集实验所需的数据,并对数据进行处理和整理。
3. 数据结构的选择和实现:根据实验需求,选择合适的数据结构,并进行相应的数据结构实现。
4. 数据结构的测试和优化:对所实现的数据结构进行测试,包括性能测试和功能测试,并根据测试结果对数据结构进行优化和改进。
5. 实验报告的撰写:根据实验过程和结果,撰写完整的实验报告,包括实验目的、实验背景、实验内容、实验结果和结论等。
四、实验过程1. 实验环境的准备本实验选择了Visual Studio作为开发平台,安装了相应版本的Visual Studio,并根据官方指引进行了相应的配置和设置。
2. 实验数据的收集和处理本实验选取了一份包含学生信息的数据集,包括学生姓名、学号、性别、年龄等信息。
通过编写Python脚本,成功提取了所需信息,并对数据进行了清洗和整理。
3. 数据结构的选择和实现根据实验需求,我们选择了链表作为数据结构的实现方式。
链表是一种常见的动态数据结构,能够高效地插入和删除元素,适用于频繁插入和删除的场景。
在实现链表时,我们定义了一个节点结构,包含数据域和指针域。
通过指针的方式将节点连接起来,形成一个链式结构。
同时,我们还实现了相关的操作函数,包括插入、删除、查找等操作。
4. 数据结构的测试和优化在完成链表的实现后,我们对其进行了性能测试和功能测试。
数据结构课程设计报告数据结构课程设计报告设计题目:实现一个简单的通讯录管理系统设计背景:在日常生活中,我们经常需要管理并使用一些联系人的联系信息,例如电话号码、姓名、地址等。
为了方便对这些联系人进行管理和查询,我们设计了一个简单的通讯录管理系统。
设计目的:本设计旨在通过实现一个通讯录管理系统,加深对数据结构的理解和应用。
通过该系统,用户可以方便地添加、删除、修改和查询联系人信息,提高信息的管理效率和准确性。
设计原理:该系统采用基于链表的数据结构,其中每个节点存储一个联系人的信息,包括姓名、电话号码和地址。
系统提供了以下功能:1. 添加联系人:用户可以输入联系人的姓名、电话号码和地址,程序将创建一个新节点,并将其插入链表中。
2. 删除联系人:用户可以输入要删除的联系人姓名,程序将遍历链表查找到该节点,并将其删除。
3. 修改联系人信息:用户可以输入要修改的联系人姓名,程序将遍历链表查找到该节点,并允许用户修改联系人的电话号码和地址。
4. 查询联系人信息:用户可以输入要查询的联系人姓名,程序将遍历链表查找到该节点,并显示联系人的姓名、电话号码和地址。
设计过程:1. 定义联系人信息结构:创建一个结构体,包含姓名、电话号码和地址等字段的定义。
2. 定义链表节点结构:创建一个结构体,包含联系人信息和指向下一个节点的指针。
3. 实现添加联系人功能:用户输入联系人信息,程序创建一个新节点,并将其插入链表的适当位置。
4. 实现删除联系人功能:用户输入要删除的联系人姓名,程序遍历链表查找到该节点,并将其删除。
5. 实现修改联系人信息功能:用户输入要修改的联系人姓名,程序遍历链表查找到该节点,并允许用户修改联系人的电话号码和地址。
6. 实现查询联系人信息功能:用户输入要查询的联系人姓名,程序遍历链表查找到该节点,并显示联系人的姓名、电话号码和地址。
7. 设计界面显示:使用控制台界面,根据用户选择调用相应的功能函数。
设计结果:通过实验和测试,我们成功实现了一个简单的通讯录管理系统。
第一章链表的应用线性表是数据结构中最简单、最常用的一种线性结构,也是学习数据结构全部内容的基础,其掌握的好坏直接影响着后继课程的学习。
线性表的顺序存储结构,即顺序表的概念相对比较简单,因此,本章的主要任务是使用有关单链表的操作来实现通讯录信息系统的管理。
1.1设计要求本章的设计实验要求使用有关链表的操作来实现通讯录信息系统的管理。
为了验证算法,通讯录管理包括单通讯录链表的建立、通讯者的插入、通讯者的删除、通讯者的查询及通讯录表的输出等。
主控菜单的设计要求使用数字0—5来选择菜单项,其他输入则不起作用。
程序运行后,给出6个菜单项的内容和输入提示:1.通讯录链表的建立2. 通讯者结点的插入3. 通讯者结点的查询4. 通讯者结点的删除5. 通讯录链表的输出0. 退出管理系统请选择0—5:1.2设计分析1.2.1主控菜单函数设计分析1.实现循环和功能选择首先编写一个主控菜单驱动程序,输入0—5以进入相应选择项。
假设输入选择用变量sn存储,它作为menu_select函数的返回值给switch语句。
使用for循环实现重复选择,并在主函数main()中实现。
实际使用时,只有选择大于5或小于0的值,程序才能结束运行,这就要使用循环控制。
这里使用for循环语句实现菜单的循环选择,为了结束程序的运行,使用了“return”语句,也可以使用“exit(0);”语句。
2.得到sn的合理值如前所述,应该设计一个函数用来输出提示信息和处理输入,这个函数应该返回一个数值sn,以便供给switch语句使用。
假设函数名为menu_select,对于sn的输入值,在switch 中case语句对应数字1—5,对于不符合要求的输入,提示输入错误并要求重新输入。
将该函数与主函数合在一起,编译运行程序,即可检查并验证菜单选择是否正确。
1.2.2功能函数设计分析1.建立通讯录链表的设计这里实际上是要求建立一个带头结点的单链表。
建立单链表有两种方法,一种称之为头插法,另一种称为尾插法。
1引言本设计使用C语言编写程序,以栈为主体实现功能,所以首先我们要认识一下栈。
栈是限定仅在表尾进行插入或删除操作的线性表,其存取数据时按照后进先出的原则进行。
而此次课程设计就是利用栈的这一特性并结合栈的输入、输出、判空等基本操作,来实现栈的三种实际应用:数制转换,行编辑和括号匹配。
2问题分析2.1 设计内容的分析本次课程设计的目标是使用C语言编写一个程序,当使用者进入程序时,首先出现一个菜单项,使用者可以选择所要实现的功能,从而进入相应的程序模块:数制转换:进入此模块后,程序提示输入任意一个十进制数和所要转换的进制,程序运行后得到相应进制的数据。
行编辑:进入模块后,程序提示输入原始数据,运行时当遇到#时退格一个,当遇到@时,清空所在行中之前的所有数据;当遇到\n时,完成前一行的输入处理,进行下一行的输入;当遇到¥时,全文输入编辑结束。
括号匹配:进入模块后,程序提示输入所要检验的括号以#为结束符,当括号匹配不正确时,程序输出相应的:左右括号匹配次序不正确,左括号多于右括号,右括号多于左括号。
当左右括号匹配无误时,输出左右括号匹配正确。
2.2 程序中用到的数据结构本程序主要是运用栈的相关知识,所以为了实现上述的三种功能,需要定义栈的结构用于储存数据:typedef char ElemType;//定义用户变量,代替char,便于以后修改typedef struct{ElemType *base;//在栈构造之前和销毁之后,base的值为NULLElemType *top;//栈顶指针int stacksize;//当前已分配的存储空间,以元素为单位}SqStack;实现第一个模块功能时,需要使用while语句进行栈的输入输出。
实现第二个模块功能时,需要使用while语句和swicth语句的嵌套来进行文本编辑实现第三个模块功能时,需要使用if、else语句的多重嵌套来判断匹配3总体设计3.1 总体设计思路本程序主要首先在主函数通过调用switch 语句来选择需要实现的功能,从而进入相应的函数模块。
数据结构课程设计(5篇)第一篇:数据结构课程设计课程设计说明书设计名称:数据结构课程设计题目:设计五:二叉树的相关操作学生姓名:专业:计算机科学与技术班级:学号:指导教师:日期: 2012 年 3 月 5 日课程设计任务书计算机科学与技术专业年级班一、设计题目设计五二叉树的相关操作二、主要内容建立二叉树,并对树进行相关操作。
三、具体要求1)利用完全二叉树的性质建立一棵二叉树。
(层数不小于4层)2)统计树叶子结点的个数。
3)求二叉树的深度。
4)能够输出用前序,中序,后序对二叉树进行遍历的遍历序列。
四、进度安排依照教学计划,课程设计时间为:2周。
本设计要求按照软件工程的基本过程完成设计。
建议将时间分为三个阶段:第一阶段,根据题目要求,确定系统的总体设计方案:即系统包括哪些功能模块,每个模块的实现算法,并画出相应的流程图.同时编写相应的设计文档;第二阶段,根据流程图编写程序代码并调试,再将调试通过的各个子模块进行集成调试;第三阶段,归纳文档资料,按要求填写在《课程设计说明书》上,并参加答辩。
三个阶段时间分配的大概比例是:35: 45: 20。
五、完成后应上交的材料本课程设计要求按照学校有关规范的要求完成,在课程设计完成后需要提交的成果和有关文档资料包括课程设计的说明书,课程设计有关源程序及可运行程序(含运行环境)。
其中课程设计说明书的格式按学校规范(见附件),其内容不能过于简单,必须包括的内容有:1、课程设计的基本思想,系统的总功能和各子模块的功能说明;2、课程设计有关算法的描述,并画出有关算法流程图;3、源程序中核心代码的说明。
4、本课程设计的个人总结,主要包括以下内容:(1)课程设计中遇到的主要问题和解决方法;(2)你的创新和得意之处;(3)设计中存在的不足及改进的设想;(4)本次课程设计的感想和心得体会。
5、源代码要求在关键的位置有注释,增加程序的可读性。
程序结构和变量等命名必须符合有关软件开发的技术规范(参见有关文献)。
一、设计目的《数据结构》是一门实践性较强的软件基础课程,为了学好这门课程,必须在掌握理论知识的同时,加强上机实践。
本课程设计的目的就是要达到理论与实际应用相结合,使同学们能够根据数据对象的特性,学会数据组织的方法,能把现实世界中的实际问题在计算机内部表示出来,并培养基本的、良好的程序设计技能。
二、设计要求1、通过这次设计,要求在数据结构的逻辑特性和物理表示、数据结构的选择应用、算法的设计及其实现等方面加深对课程基本内容的理解。
同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。
2、学生必须仔细研读《数据结构》课程设计(实习)要求,以学生自学为主、指导教师指导为辅,认真、独立地完成课程设计的任务,有问题及时主动与指导教师沟通。
3、本次课程设计按照教学要求需要在一周半时间内独立完成,学生要发挥自主学习的能力,充分利用时间,安排好课设的时间计划,并在课设过程中不断检测自己的计划完成情况,及时地向指导教师汇报。
4、编程语言任选。
三、设计题目及内容文章编辑一、需求分析功能:输入一页文字,程序可以统计出文字、数字、空格的个数。
静态存储一页文章,每行最多不超过80个字符,共N行;要求:(1)分别统计出其中英文字母数和空格数及整篇文章总字数;(2)统计某一字符串在文章中出现的次数,并输出该次数;(3)删除某一子串,并将后面的字符前移。
存储结构使用线性表,分别用几个子函数实现相应的功能;输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号。
输出形式:(1)分行输出用户输入的各行字符;(2)分4行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数"(3)输出删除某一字符串后的文章;二、概要设计1、定义结构体struct line,文本行采用顺序存储,行与行之间采用链式存储开始主函数输入文字统计个数查找某一子串输出文字统计字母、数字、空删除这一子串格、某一字符串的个数以及文章总字数输出删除后的文章具体操作三、主要函数:int FindString(LINE * &head,char *str) /*统计str在文章中出现的次数*/ 求在一行中Str出现的次数的流程图:①.查找第一个字符,如果有第一个字符即p->data[i]==str[0],设计数器k=0 ②.查找这个字符后面的字符与要查找的字符串是否匹配即p->data[i+j]==str[j],如果匹配k++③.重复第二步,如果k=len2,则查找到,count++;如果没查找到,重新进行第一步void delstringword(char *s,char *str) /*删除字符串*s 中的字符串*str*/开始车离开p->data[i]==str[0]i++k=0;j=0;p->data[i+j]==str[j]k++;j++;k=len2count++; i=i+k-1;结束YNYNNY实现思想:①.从字符串s 中寻找str 第一次出现的位置 *p=strstr(s,str);②.len=strlen(s);i=len-strlen(p)即前i 项恰好不含要删除的字符串,将前i 项复制到tmp 中③.j=i+strlen(str) 即要删除的字符串在i+1和j 之间,将j 之后的字符串复制到tmp 中④.将tmp 赋给串s ,返回s四、调试分析和问题思考:1. 测试数据及结果str pi jsfor(m=0;m<i;m++) tmp[count++]=s[m];for(n=j;n<len;n++) tmp[count++]=s[n];tmp2、问题思考:输入文章时,计算机怎样识别文章是否结束?输出文章时,怎样处理表示结束的字符?解决方案:输入文章时,以Ctrl+E(^E)为结尾,当tmp[0]==5时,发现输入^E,则退出输入。
《数据结构》课程设计报告范本(doc 8页)《数据结构》课程设计报告一、课程设计的内容、要求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){}bool NextElem(LIST list,int cur_e,int &next_e)//后继{if(cur_e < 0 || cur_e > list.size) return false;else{next_e = cur_e + 1;return true;}}void Insert(LIST *list,ElemType value){if(list->size>=list->max_size){int i;ElemType *temp = (int*)malloc(sizeof(ElemType)*list->size*2);cout<<endl<<"线性表原容量改变:原大小为"<<list->max_size;for(i=0;i<list->size;i++){temp[i] = list->data[i];}free(list->data);list->data = temp;list->max_size*=2;cout<<"改变后大小"<<list->max_size<<endl;}list->data[list->size] = value;list->size++;}void Insert_Back(LIST *list,int idx,ElemType value){if(list->size>=list->max_size){int i;ElemType *temp = (int*)malloc(sizeof(ElemType)*list->size*2);cout<<endl<<"线性表原容量改变:原大小为"<<list->max_size;for(i=0;i<list->size;i++){temp[i] = list->data[i];}free(list->data);list->data = temp;list->max_size*=2;cout<<"改变后大小"<<list->max_size<<endl;}if(idx>list->size){list->data[list->size] = value;}else{int i;for(i=list->size;i>idx;i--){list->data[i] = list->data[i-1];}list->data[idx] = value;}list->size++;}void ListDelete(LIST *list,int i,ElemType *e)//删除一个元素{int j;*e=list->data[i];for(j=i+1;j<=list->size-1;j++)list->data[j-1]=list->data[j];list->size--;}void Print_list(LIST *list){int i;if(list->size == 0){cout<<"当前线性表内没有元素。
《数据结构》课程设计报告一、课程目标《数据结构》课程旨在帮助学生掌握计算机科学中数据结构的基本概念、原理及实现方法,培养其运用数据结构解决实际问题的能力。
本课程目标如下:1. 知识目标:(1)理解数据结构的基本概念,包括线性表、栈、队列、串、数组、树、图等;(2)掌握各类数据结构的存储表示和实现方法;(3)了解常见算法的时间复杂度和空间复杂度分析;(4)掌握排序和查找算法的基本原理和实现。
2. 技能目标:(1)能够运用所学数据结构解决实际问题,如实现字符串匹配、图的遍历等;(2)具备分析算法性能的能力,能够根据实际问题选择合适的算法和数据结构;(3)具备一定的编程能力,能够用编程语言实现各类数据结构和算法。
3. 情感态度价值观目标:(1)培养学生对计算机科学的兴趣,激发其探索精神;(2)培养学生团队合作意识,提高沟通与协作能力;(3)培养学生面对问题勇于挑战、善于分析、解决问题的能力;(4)引导学生认识到数据结构在计算机科学中的重要地位,激发其学习后续课程的兴趣。
本课程针对高年级学生,课程性质为专业核心课。
结合学生特点,课程目标注重理论与实践相结合,强调培养学生的实际操作能力和解决问题的能力。
在教学过程中,教师需关注学生的个体差异,因材施教,确保课程目标的达成。
通过本课程的学习,学生将具备扎实的数据结构基础,为后续相关课程学习和职业发展奠定基础。
二、教学内容根据课程目标,教学内容主要包括以下几部分:1. 数据结构基本概念:线性表、栈、队列、串、数组、树、图等;教学大纲:第1章 数据结构概述,第2章 线性表,第3章 栈和队列,第4章 串。
2. 数据结构的存储表示和实现方法:教学大纲:第5章 数组和广义表,第6章 树和二叉树,第7章 图。
3. 常见算法的时间复杂度和空间复杂度分析:教学大纲:第8章 算法分析基础。
4. 排序和查找算法:教学大纲:第9章 排序,第10章 查找。
教学内容安排和进度如下:1. 第1-4章,共计12课时,了解基本概念,学会使用线性表、栈、队列等解决简单问题;2. 第5-7章,共计18课时,学习数据结构的存储表示和实现方法,掌握树、图等复杂结构;3. 第8章,共计6课时,学习算法分析基础,能对常见算法进行时间复杂度和空间复杂度分析;4. 第9-10章,共计12课时,学习排序和查找算法,掌握各类算法的实现和应用。
数据结构课程设计报告1、引言数据结构是计算机科学中的重要基础课程,它研究如何组织和管理数据以及数据之间的关系。
掌握良好的数据结构对于程序设计和算法的实现至关重要。
本报告将介绍在数据结构课程中完成的设计项目,主要包括设计目标、设计思路、实现细节以及结果分析等内容。
2、设计目标本设计项目的目标是实现一个简单的学生成绩管理系统,该系统能够实现对学生的基本信息以及各门课程成绩的管理和查询。
设计的关键要求如下:1.能够添加学生信息并关联其各门课程成绩;2.能够根据学号查询学生信息以及其各门课程成绩;3.能够计算学生的总成绩和平均成绩;4.能够实现对学生信息和成绩的修改和删除操作。
3、设计思路为了实现上述设计目标,我们采用了链表数据结构来保存学生信息和成绩。
链表的节点用来存储学生的基本信息,如学号、姓名、性别等,同时还包含一个指向课程成绩链表的指针。
课程成绩链表的节点用来存储每门课程的成绩。
在添加学生信息时,我们按照学号的顺序将学生节点插入到链表中。
通过遍历链表,我们可以根据学号查找到对应的学生节点,并进一步查找到该学生的课程成绩链表。
对于查询操作,我们可以通过遍历链表找到匹配的学生节点,然后输出其基本信息和课程成绩。
计算总成绩和平均成绩可以通过遍历课程成绩链表并累加每门课程的成绩来实现。
修改和删除操作可以通过遍历链表找到匹配的学生节点,并进行相应的修改或删除操作。
4、实现细节该学生成绩管理系统的具体实现细节如下:•使用C++编程语言实现;•采用链表数据结构,分别设计了学生信息链表和课程成绩链表;•学生信息链表的节点包括学号、姓名、性别等信息,以及指向课程成绩链表的指针;•课程成绩链表的节点包括课程名称和成绩信息;•提供了添加学生信息、添加课程成绩、查询学生信息、查询课程成绩、计算总成绩和平均成绩等功能;•通过遍历链表实现对学生信息和成绩的修改和删除操作。
5、结果分析经过测试和验证,该学生成绩管理系统能够满足设计目标,并能够正常运行。
《数据结构》课程设计报告专业:计算机科学与技术班级:计算机科学与技术一班姓名:XXX XXXX学号:XXXXXXXXXXXX 指导教师:XXXXX二零一零年十二月二十七日目录摘要 (3)第一章课程设计目的 (4)第二章设计过程 (4)2.1 数据结构背景 (4)2.2 程序设计 (7)2.2.1 猴子选大王 (7)2.2.2 josoph环 (9)2.2.3 拓扑排序 (12)2.2.4 纸牌游戏 (14)2.2.5 哈弗曼树 (16)第三章总结 (18)参考文献 (20)摘要一个数据结构是由数据元素依据某种逻辑联系组织起来的。
对数据元素间逻辑关系的描述称为数据的逻辑结构;数据必须在计算机内存储,数据的存储结构是数据结构的实现形式,是其在计算机内的表示;此外讨论一个数据结构必须同时讨论在该类数据上执行的运算才有意义。
在许多类型的程序的设计中,数据结构的选择是一个基本的设计考虑因素。
许多大型系统的构造经验表明,系统实现的困难程度和系统构造的质量都严重的依赖于是否选择了最优的数据结构。
许多时候,确定了数据结构后,算法就容易得到了。
有些时候事情也会反过来,我们根据特定算法来选择数据结构与之适应。
不论哪种情况,选择合适的数据结构都是非常重要的。
选择了数据结构,算法也随之确定,是数据而不是算法是系统构造的关键因素。
这种洞见导致了许多种软件设计方法和程序设计语言的出现,面向对象的程序设计语言就是其中之一。
数据结构包括数组、链表、栈、二又树、哈希表等等。
它是对在计算机内存(有时是磁盘)中的数据的一种安排。
算法:用于对数据结构中的数据进行各种处理。
掌握了数据结构和算法后,能解决的问题:现实世界数据存储、程序员的工具、建模:有些数据结构能直接对真实世界的情况建造模型,其中最重要的数据结构是图。
关键词:数据结构、数据元素、链表、算法第一章课程设计目的《数据结构》是一门实践性较强的软件基础课程,为了学好这门课程,必须在掌握理论知识的同时,加强上机实践。
数据结构专业课程设计方案报告模板参考嘿,大家好!今天我来给大家分享一份关于数据结构专业课程的方案设计报告。
作为一名有着十年经验的大师,我可是见证了各种方案的诞生和演变。
那么,咱们废话不多说,直接进入主题吧!一、课程设计背景数据结构是计算机科学与技术领域的基础课程,对于培养同学们的逻辑思维能力、编程能力和算法设计能力具有重要意义。
随着信息技术的不断发展,数据结构的应用越来越广泛,已经成为各类软件开发、等领域的基础。
因此,本课程设计旨在帮助同学们掌握数据结构的基本原理和算法,提高同学们的实际编程能力。
二、课程设计目标1.理解数据结构的基本概念,熟悉各类数据结构的特点和应用场景。
2.学会使用常见的数据结构进行问题求解,具备分析问题和设计算法的能力。
3.掌握数据结构的基本算法,能够实现并优化相关算法。
三、课程设计内容1.线性表定义和特点常见操作(插入、删除、查找、排序等)应用场景(顺序存储、链式存储等)2.栈和队列定义和特点常见操作(入栈、出栈、入队、出队等)应用场景(递归、表达式求值、广度优先搜索等)3.树与二叉树定义和特点常见操作(创建、遍历、查找、插入、删除等)应用场景(查找排序、哈希表、优先队列等)4.图定义和特点常见操作(创建、遍历、查找、最短路径等)应用场景(社交网络、地图导航、最小树等)5.算法设计与分析常见算法(排序、查找、图算法等)时间复杂度分析空间复杂度分析四、课程设计方法1.理论教学:通过课堂讲解,使同学们了解数据结构的基本概念、原理和方法。
2.实践教学:通过上机实验,让同学们动手实现相关算法,提高编程能力。
3.课后作业:布置一些具有代表性的题目,让同学们独立思考,巩固所学知识。
五、课程设计评价1.课堂表现:考察同学们的出勤、发言、作业完成情况等。
2.上机实验:考察同学们的编程能力、算法实现情况等。
3.课后作业:考察同学们对知识点的掌握程度。
六、课程设计进度安排1.第一周:线性表2.第二周:栈和队列3.第三周:树与二叉树4.第四周:图5.第五周:算法设计与分析注意事项:1.理解深度与广度平衡每个数据结构都有其深奥的理论和复杂的实现细节,但初学者容易陷入要么只懂皮毛要么过度深入研究两极分化的困境。
数据结构课程设计报告数据结构是计算机科学中必不可少的基础课程之一。
在这门课程中,我们需要学习并掌握各种不同的数据结构及其应用。
而课程设计报告则是对我们所学知识的一个检验和运用。
设计题目在课程设计中,我们被分配了一个题目,需要我们使用已经学过的数据结构来实现。
我们的题目是:实现一个简单的通讯录,可以添加、删除、查找和编辑联系人的信息。
需求分析在开始设计之前,我们需要先对需求进行分析。
对于一个通讯录来说,我们需要包含以下基本信息:姓名、电话、地址和性别。
因此我们可以设计一个结构体来存储每个联系人的信息。
typedef struct contact {char name[20];char phone[12];char address[100];char sex[3];} Contact;其次,我们需要一个动态数组来存储联系人信息。
这个动态数组需要支持添加、删除和编辑操作。
在实际设计中,我们可以使用链表来实现这个动态数组。
typedef struct list {Contact data;struct list *next;} List;设计过程在数据结构的学习中,我们已经学习了很多种不同的数据结构。
因此,在这个课程设计中,我们可以运用我们所学的不同数据结构来实现这个通讯录。
在通讯录通常都需要查找联系人信息。
我们需要设计一个函数来实现查找操作。
在链表中查找数据需要遍历整个链表。
因此,我们可以使用二分查找来加快查找速度。
void SearchContact(List *head, char *find_name) {List *p = head->next;while(p != NULL && strcmp(find_name, p->) != 0) { p = p->next;}if(p != NULL) {printf("%-8s%-13s%-25s%-6s\n", p->, p->data.phone, p->data.address, p->data.sex);} else {printf("查无此人!\n");}}除了查找功能,我们还需要实现添加、删除和编辑联系人信息。
数据结构课程设计报告引言:数据结构是计算机科学中一门重要的基础课程,它研究了如何组织和存储数据,以及如何高效地操作和访问数据。
本文将介绍我在数据结构课程设计中的实践和收获。
一、项目背景与需求分析我们的课程设计项目是设计一个图书管理系统,该系统能够实现图书的录入、查询、借阅和归还等功能。
通过这个项目,我们既能够巩固数据结构的知识,又能够提高我们的编程能力。
在进行需求分析时,我们首先明确了系统的功能需求和非功能需求。
功能需求包括图书的录入、查询、借阅和归还等基本操作,非功能需求则包括系统的性能、可靠性和用户友好性等。
二、系统设计与实现1. 数据结构的选择在设计图书管理系统时,我们需要选择合适的数据结构来存储图书的信息。
考虑到图书的数量较大且需要频繁地进行查询和操作,我们选择了哈希表作为存储图书信息的数据结构。
哈希表具有快速的插入和查询操作,能够提高系统的性能。
2. 数据的存储与管理为了实现图书的录入、查询、借阅和归还等功能,我们设计了相应的数据结构和算法。
首先,我们使用哈希表来存储图书的信息,每本图书都有一个惟一的图书编号。
当用户查询图书时,系统会根据图书编号快速地找到对应的图书信息。
当用户借阅或者归还图书时,系统会相应地更新图书的状态。
3. 系统的性能优化为了提高系统的性能,我们采取了一些优化措施。
首先,我们使用了合适的哈希函数来减少哈希冲突的发生。
其次,我们对系统进行了分块处理,将图书按照一定的规则分成多个块,每一个块都有一个独立的哈希表来存储图书的信息。
这样可以减少每次查询时需要扫描的图书数量,提高查询的效率。
三、系统测试与评估在完成系统设计和实现后,我们进行了一系列的测试和评估。
首先,我们进行了功能测试,验证系统是否能够正常地完成图书的录入、查询、借阅和归还等操作。
其次,我们进行了性能测试,测试系统在不同规模的数据集下的响应时间和吞吐量。
最后,我们进行了用户体验测试,邀请一些用户使用系统,并采集他们的反馈意见。
《数据结构》课程设计报告报告(论文)题目: 1.迷宫问题2.哈夫曼编码作者所在系部:计算机科学与工程系作者所在专业:网络工程作者所在班级: B08522作者姓名:马洪彪作者学号: 20084052227指导教师姓名:贾振华完成时间: 2009年12月31日北华航天工业学院教务处制课程设计任务书摘要本次课设目的在于检验学生在《数据结构》课程一学期中的学习成果,从而加深学生对所学知识的进一步理解与巩固。
本次课程设计过程中我主要根据课本中的实现思想及算法编写程序,体现以课本知识的应用为主,在学习了线性表、栈、队列、二叉树、树和图等结构的基础上,以能够更加熟练的应用所学知识,并能结合一些著名算法来实现对一些实际问题的应用,例如,哈夫曼树等,从而更为深刻理解数据结构的内涵,熟悉它们各自的应用场合及方法。
有些在平时课程中并没有掌握的内容在这次课程设计中都是先通过看课本学懂了,然后再在课程设计中加深印象,实现算法的应用和扩展。
这次课程设计的设计内容主要是通过实际的例子和程序来实现课本中所学习的算法的应用。
我主要做了迷宫问题、哈夫曼编码/译码实现两个题目。
本文利用C++语言编写程序,分别实现了对自定义的迷宫有无路径的判定和发送端对待传送数据的编码和接收端对传送来的数据的译码。
其中,迷宫问题以栈的应用为基础,随机生成迷宫,然后寻找所以路径并输出,对没有路径的迷宫,继续随机生成,直到生成存在路径的迷宫。
哈夫曼编译系统分为五个功能模块:原始数据载入,打印编码规则、编码、译码。
以二叉树的应用为基础,包括统计信息,并通过构建哈夫曼树、对信息进行哈夫曼编码,将编码信息等存入文档。
两个系统均已经过全面的测试,能够很好的运行,达到了预期的效果。
关键词:数据结构栈和队列二叉树哈夫曼编码迷宫目录《数据结构》课程设计报告书 (1)第1章绪论 (1)1.1 课程设计选题的目的 (1)1.2 课程设计选题的背景和意义 (1)1.2.1课程设计选题的背景 (1)1.2.2课程设计选题的意义 (1)1.3 课题研究的主要内容 (2)第2章需求分析 (3)2.1 输入/输出形式和输出值的范围 (3)2.2 程序功能 (3)2.3 测试数据 (3)2.3.1正确的输入及输出结果 (3)2.3.2 错误的输入及输出结果 (5)第3章概要设计 (6)3.1 设计思想 (6)3.2 函数间的关系 (6)第4章详细设计 (7)4.1 迷宫的主要结构 (7)4.2 哈夫曼的主要结构 (8)第5章调试分析 (11)5.1 问题描述 (11)5.2解决方案 (11)5.3 对设计实现的回顾讨论和分析 (11)5.4 对算法的分析和改进设想 (11)5.5 经验和体会 (11)第6章测试并列出测试结果 (12)6.1 迷宫问题测试结果 (12)6.2 哈夫曼系统测试结果 (12)第7章总结 (16)7.1 设计体会 (16)7.1.1 系统的优点 (16)7.2 结束语 (16)致谢 (17)参考文献 (18)附录 (19)《数据结构》课程设计报告书第1章绪论随着信息产业的飞速发展,信息化管理及查询已经引入并应用到各行业管理领域,各种形式的百货商场、大型仓储超市、便利店、连锁超市和专卖店等形式的零售业鳞次栉比,不断改变、影响着人们的价值观念和生活方式。
课程设计说明书文章编辑课程设计报告一、需求分析我们编此程序 为了便于统计文章中的字数,标点数,以及数字的个数,因此它的功能要求也就应该包含这些。
主要的是如下几点:1)分别统计出其中英文字母数和空格数以及整篇文章的总字数。
2)统计某一字符串在文章中出现的次数,并输出该次数。
3)删除某一子串,并将后面的字符前移。
在这里,我们要求储存结构为线性表结构,可以输入大小写的英文字母,任何数字和标点符号。
输出的时候要分行输出用户输入的各行字符,分四行输出“全部字符数”“数字的个数”“空格个数”“文章总字树”以及输出删除某一字符串后的文章。
二、概要设计1、存储结构此模块使用静态的字符数组作为存储结构,定义如下:char wz[N][80]; /* 存储文章的字符数组 ,为全局变量*/2、算法设计说明此模块主要有三个算法:(1)、统计字符个数算法流程图(2)、查找某一字符串出现的次数算法流程图 i=0 n=0i<N i>=Nj=0len=strlen(wz[i])j<len j>=len if(wz[i][j]>=n1&&wz[i][j]<=n2)n++j++i++return n算法结束(3)、删除某一字符串算法流程图i=0 n=0i<N i>=Nc=strstr(wz[i],s)c!=0 c=0 leni=strlen(wz[i]);lenc=strlen(c);p=leni-lencreturn n算法结束for(k=1;k<=lens;k++){for(j=p;j<=leni;j++)wz[i][j]=wz[i][j+1];leni=strlen(wz[i])wz[i][j-1]='\0';leni=strlen(wz[i]);}c=strstr(wz[i],s);i=0 n=0i<N i>=Nc=strstr(wz[i],s)c!=0 c=0 c=strstr(c+lens,s)n++i++ return n算法结束i++三、详细设计:#include<stdio.h>#include<string.h>#define N 20 /* 文章的行数*/char wz[N][80]; /* 存储文章的字符数组,为全局变量*//*输入函数*/void readdat(){FILE *fp;int i,j,len;char *str;if(!(fp=fopen("E:/yy/wzin.dat","r+")))/*打开文件*/printf("The file can't found!\n");for(i=0;i<N;i++)fgets(wz[i],80,fp);/*读文件*/}/*输出函数*/void out(){int i=0;for(i=0;i<N;i++)printf("%s",wz[i]);}int countword(int n1,int n2)/*统计ASC 码在n1与n2之间的字符*/{int i,j,len;int n=0; /*统计字符数*/for(i=0;i<N;i++){len=strlen(wz[i]);for(j=0;j<=len;j++)if(wz[i][j]>=n1&&wz[i][j]<=n2)/*wz[i][j]的ASC 码在n1与n2之间,n++*/ n++;}return n;}int cz(char *s) /*查找某一字符串出现的次数*/{int n=0;int i;int lens;/*要查找字符串*S 的长度*/char *c;lens=strlen(s);for(i=0;i<N;i++){ c=strstr(wz[i],s);/*字符串*S在文章第i 行第一次出现的位置*/while(*c!=0){n++;c=strstr(c+lens,s);/*字符串*S在文章第i 行下一次出现的位置*/}}return n;}void del(char *s){int i,j,k,leni,lenc,lens;int p;char *c;lens=strlen(s);/*要删除字符串的长度*/for(i=0;i<N;i++){ c=strstr(wz[i],s);/*字符串s 在文章第i行首次出现的位置*/while(c!=0)/*c=0 则表明字符串s 在文章第i行没有出现*/{leni=strlen(wz[i]);/*文章第i 行的长度*/lenc=strlen(c);/*从字符串s 在文章第i行首次出现的位置处后的字符串的长度*/p=leni-lenc;/* 两个长度的差从此行的第p 个位置开始删除*/for(k=1;k<=lens;k++)/*删除lens次*/{for(j=p;j<=leni;j++)wz[i][j]=wz[i][j+1];/*字符前移*/leni=strlen(wz[i]);wz[i][j-1]='\0';leni=strlen(wz[i]);}c=strstr(wz[i],s);}}}main(){int word,space,num,zifu;/*字母数,空格数,数字数,字符数*/int n; /*某字符串数*/int leni;int i=0,j=0;char s1[80],*s;printf("Where do you want the file come from ?\n ");/*从文件读入数据,还是从键盘输入数据*/printf("From weijian please input 1 \nfrom keybrod please input 2 \n");/*从文件读入数据输入1,还是从键盘输入数据输入2*/scanf("%d",&n);getchar();switch(n){case 1:readdat();break;case 2:printf("please input the file untill @@\n");gets(s1);while(strcmp(s1,"@@")!=0&&i<N){strcpy(wz[i],s1);/*将s1中的内容复制到wz[i]中*/leni=strlen(s1);wz[i][leni]='\n';gets(s1);i++;}break;default:printf("Wrong input !\n");break;}printf("The file's content:\n ");out();word=countword('a','z')+countword('A','Z');/*统计字母*/printf("\nThe total word is :\t%d\n",word);space=countword(' ',' ');/*统计空格*/printf("The total space is :\t%d\n",space);num=countword('0','9');/*统计数字*/printf("The total shuzi is :\t%d\n",num);/*统计所有字符*/zifu=countword(32,44)+num+countword(59,94)+countword(97,126)+countword(174, 175);printf("The total zifu is :\t%d\n",zifu+space);/*字符串的查找*/printf("\nplease input a srting:\t");scanf("%s",s);n=cz(s);printf("\nThe string %s chuxian %d ci \n",s,n);getchar();/*字符串的删除*/printf("\nWhich string do you want to del:\n");printf("please input a string :\t"); scanf("%s",s);printf("\nBefore del string %s:\n",s); out();n=cz(s);if(n==0)printf("\nCan't find the string!\n"); else{del(s);printf("\nAfter del string %s :\n",s); out();}}四、调试分析:1、测试数据及结果2、时间复杂度分析统计字符个数算法时间复杂度为O(N*80)查找某一字符串出现的次数算法时间复杂度为O(N*80)删除某一字符串算法所耗费的时间最多,每次进行删除操作时都要读遍整篇文章,删除字符串s 时是将 s 中的字符一个个的删除,每删除一个字符都需要一次前移操作,所以平均时间复杂度为O(N*(N+1)/2)1、调试时的问题及思考调试时用键盘输入文章内容的语句为gets(s1),若要换成scanf(“%s”,s1);将会出现不能输入空格的问题。
数据结构课程设计报告设计报告一、项目简介:本项目是一个基于C++语言的数据结构课程设计,旨在通过实践巩固学习的数据结构知识,并提高编程能力和问题解决能力。
二、项目背景:数据结构是计算机科学中非常重要的一门课程,它研究的是数据的组织、存储和操作方法。
通过学习数据结构可以更好地理解和分析各种算法,并能够设计和实现高效的程序。
三、项目目标:本项目的主要目标是设计和实现一些常见的数据结构,包括链表、栈、队列、二叉树、图等。
通过实现这些数据结构,可以进一步加深对其特性和功能的理解,并能够灵活地应用于实际问题的解决。
四、项目内容:本项目主要包括以下几个部分:1. 链表:实现单链表、双链表和循环链表,并实现相关的操作,如插入、删除、查找等。
2. 栈:实现顺序栈和链式栈,并实现相关的操作,如入栈、出栈、判空、判满等。
3. 队列:实现顺序队列和链式队列,并实现相关的操作,如入队、出队、判空、判满等。
4. 二叉树:实现二叉树的创建、遍历(前序、中序、后序)、搜索等操作,并实现相关的应用,如表达式树、堆等。
5. 图:实现邻接矩阵和邻接表两种表示方法,并实现图的创建、深度优先搜索、广度优先搜索等操作,并实现相关的应用,如最小生成树、最短路径等。
6. 其他数据结构:根据实际需要,可以设计和实现其他一些数据结构,如哈希表、二叉搜索树等。
五、项目实施计划:1. 学习和理解数据结构的基本概念和特性。
2. 分析和设计各个数据结构的实现方法和相关操作。
3. 使用C++语言实现各个数据结构,并编写相应的测试程序进行验证。
4. 进行性能测试和功能测试,并进行相关的优化和改进。
5. 编写项目文档,包括设计报告、使用说明等。
六、项目成果:1. 完成了各个数据结构的设计和实现。
2. 实现了相应的测试程序进行验证和功能测试。
3. 编写了项目文档,包括设计报告、使用说明等。
七、项目总结:通过这个数据结构课程设计项目,我深入学习了各种常用数据结构的实现和应用,提高了自己的编程能力和问题解决能力。
数据结构课程设计报告学生姓名李娜学号*********班级地信10901长江大学2011.6目录1.需求分析 (3)1.1课程设计目的 (3)1.2课程设计内容 (3)1.3课程设计步骤 (4)1.4课程设计要求 (4)2.逻辑设计 (5)2.1运行环境 (5)2.2系统流程图 (5)3.详细设计 (11)4.调试过程 (22)4.1调试过程中出现的问题和处理方式 (22)4.2调试分析 (23)4.3调试结果 (23)4.总结 (26)5.附录(源代码) (27)1.需求分析:1.1课程设计目的《数据结构》主要介绍一些常用的数据结构,阐明各种数据结构内在的逻辑关系,讨论其在计算机中的存储表示,以及在其上进行各种运算时的实现算法,并对算法的效率进行简单的分析和讨论。
数据结构是介于数学、计算机软件和计算机硬件之间的一门计算机专业的核心课程,它是计算机程序设计、数据库、操作系统、编译原理及人工智能等的重要基础,广泛的应用于信息学、系统工程等各种领域。
数据结构课程设计是为数据结构课程独立开设的实践性教学环节。
数据结构课程设计对于巩固数据结构知识,加强学生的实际动手能力和提高学生综合素质是十分必要的。
课程设计的目的:1.要求学生达到熟练掌握C语言的基本知识和技能。
2.了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力。
3.提高程序设计和调试能力。
通过上级机实习,验证自己设计的算法的正确性。
学会有效利用基本调试方法,迅速找出程序代码中的错误并且修改。
4.培养算法分析能力。
分析所设计算法的时间复杂度和空间复杂度,进一步提高程序设计水平。
5.初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能。
1.2课程设计内容(1)线性链表基本操作的实现问题描述:线性链表的插入、删除、遍历等操作的实现。
基本要求:要求生成线性表时,可以键盘上读取元素输出形式:有中文提示,链表元素为整形。
界面要求:有合理的提示,每个功能可以设立菜单,根据提示,完成相关的功能要求。
课程设计说明书课程名称数据结构课程设计设计课题模拟旅馆管理系统课程设计任务书设计题目:模拟旅馆管理系统的一个功能——床位的分配与回收设计内容与要求:某旅馆有n个等级的房间,第I等级有ai 个房间,每个等级有bi个床位(1≤i≤n)。
试模拟旅馆管理系统中床位分配和回收的功能,设计能为单个旅客分配床位,在其离店便回收床位(供下次分配)的算法。
[基本要求](1)输入数据分配时,输入旅客姓名、年龄、性别、到达日期和所需房间等级。
回收时,输入房间等级、房间号和床位号。
(2)输出数据分配成功时打印旅客姓名、年龄、到达日期、房间等级、房间号码和床位号码。
分配不成功时,如所有等级均无床位,则打印“客满”信息;如旅客需要的等级均无空床位,则打印“是否愿意更换等级?”的询问信息。
若旅客愿意更换,则重新输入有关信息,再进行分配,否则分配工作结束。
2014 年 12 月16日课程设计评语成绩:指导教师:年月日【问题描述】某旅馆有n个等级的房间,第I等级有ai 个房间,每个等级有bi个床位(1≤i≤n)。
试模拟旅馆管理系统中床位分配和回收的功能,设计能为单个旅客分配床位,在其离店便回收床位(供下次分配)的算法。
【基本要求】(1)输入数据分配时,输入旅客姓名、年龄、性别、到达日期和所需房间等级。
回收时,输入房间等级、房间号和床位号。
(2)输出数据分配成功时打印旅客姓名、年龄、到达日期、房间等级、房间号码和床位号码。
分配不成功时,如所有等级均无床位,则打印“客满”信息;如旅客需要的等级均无空床位,则打印“是否愿意更换等级?”的询问信息。
若旅客愿意更换,则重新输入有关信息,再进行分配,否则分配工作结束。
【测试数据】旅客姓名:w性别:男年龄:20入住时间:2015 3 4所需等级:1旅客姓名:d性别:男年龄:22入住时间:2015 1 2所需等级:2【模块划分】本程序主要划分为四个模块【算法思想】采用链表方式,进行旅店的初始化操作。
给旅店的等级设置了头结点。
该程序有三条链表,等级构成一条链表,房间构成一条链表,旅客构成一条链表。
入住时,先输入旅客所需的等级,判断是否有该等级,依次判断有无房间和床位。
有该等级的房间时,采用尾插法判断是否有空床位,有就进行旅客的入住操作。
床位没有设头结点,所以第一个床位要进行判断。
退房时,需要输入等级号、房间号、床位号来进行查找,从而完成退房操作。
查询时,通过输入旅客的姓名进行查询,存在此人时,打印客人信息。
统计宾馆的人数时,先一个等级一个等级的统计,统计这个等级的每一个房间和每个房间当前的所有人数。
旅客住宿登记旅客退房【数据结构】typedef struct traver//旅客结构体{char name[20];//姓名int sex; //性别int age; //年龄int g;//旅客住宿的等级int bednum;//床号int year;int month;int day;struct traver*next;//下一个旅客}tra;typedef struct hotel//旅店结构体{int l_num;//旅店等级struct hotel*next;//下一个等级struct room*r_next;//指向房间}hotel;typedef struct room//房间结构体{int r_num;//房间号int max;//房间的最大床位数int renshu;//房间当前的人数struct room*next;//下一个房间struct traver*tra_next;//指向旅客}room;【测试情况】房间的初始化。
旅客入住登记测试旅客退房测试记录查询测试统计测试【心得】这周是我们自己选题做课程设计的的时间,我选的题目是做一个旅店管理系统,对床位进行分配和回收。
本程序采用了三个链表,刚拿到这个题目时,我觉得很这个应该和学生管理系统差不多,但是,在对床位的分配时,要采用链表。
刚开始我本来想把房间作为一个数组,将床位构成一个单链表。
当时,没有考虑到房间的等级,最后又想了一下,改变了我原来的想法。
将房间的等级、房间、旅客各构成一个链表,采用链表的好处是节约空间,有几个人就申请多大的空间,不会造成很大的浪费。
在编写代码的过程中,先对旅馆每个等级的每个房间进行初始化,旅客的住宿这个函数对于我是最难的,因为要先判断旅客所需等级的房间存不存在,存在时,要判断这个房间有没有空床位,没有空床位时,链表的指针指向下一个房间。
如果没有这个等级的房间时,征询旅客是否要更换房间等级。
在他同意更换的情况下,再重复上述过程进行登记。
给旅客进行床位分配时,是按照床位号的大小顺序依次分配的。
如果这个房间的所有床位都住满的话,再给同等级的另一间房间进行分配。
在写退房的函数时,要输入等级、房间号、床位号,找到相应的旅客打印旅客信息确认正确再进行退房操作。
统计住宿的人数时,统计同等级的每一个房间的所有旅客。
旅客的链表不空时,计数器就加加。
进行编程的时候,一定要先清楚自己的思路,比如我写的住宿函数,要入住就必须先判断有没有空房间和空床位,有的话才能进行分配。
该程序的链表比较多,自己写的时候,一个一个子函数写,写完调试好了再进行下一个函数的编写。
定义了三个结构体,一定要清楚每个结构体中所包含的量,切不可混淆。
编写时if和else语句比较多,要清楚哪个与哪个对应,每个循环结束的条件。
调试代码的时候有时就是一个很小的错导致整个程序不能运行,每当程序错误时我都非常焦躁,甚至想到了放弃,但我最终还是一步一步慢慢来,经过无数次的检查程序错误的原因后慢慢懂得了耐心是一个人成功的必然具备的条件!同时,通过此次课程设计使我了解到数据结构可以说是计算机里一门基础课程,它需要把理论变为上机调试,所以一定要把基础知识学扎实。
虽然我现在还不会成功的编写一个完整的程序,但是在看程序的过程中,不断的上网查资料以及翻阅相关书籍,通过不断的模索,测试,发现问题,解决问题和在老师的帮助下一步一步慢慢的正确运行程序。
在本课程设计中,我明白了理论与实际应用相结合的重要性,并提高了自己组织数据及编写大型程序的能力。
培养了基本的、良好的程序设计技能以及合作能力。
这次课程设计同样提高了我的综合运用所学知识的能力。
并对VC有了更深入的了解。
《数据结构》是一门实践性很强的课程,上机实习是对学生全面综合素质进行训练的一种最基本的方法,是与课堂听讲、自学和练习相辅相成的、必不可少的一个教学环节。
上机实习一方面能使书本上的知识变“活”,起到深化理解和灵活掌握教学内容的目的;另一方面,上机实习是对学生软件设计的综合能力的训练,包括问题分析,总体结构设计,程序设计基本技能和技巧的训练。
此外,还有更重要的一点是:机器是比任何教师更严厉的检查者。
因此,在“数据结构”的学习过程中,必须严格按照老师的要求,主动地、积极地、认真地做好每一个实验,以不断提高自己的编程能力与专业素质。
【源程序】#include <stdio.h>#include <string.h>#include <malloc.h>#include <stdlib.h>typedef struct traver//旅客结构体{char name[20];//姓名int sex; //性别int age; //年龄int g;//旅客住宿的等级int bednum;//床号int year;int month;int day;struct traver*next;//下一个旅客}tra;typedef struct hotel//旅店结构体{int l_num;//旅店等级struct hotel*next;//下一个等级struct room*r_next;//指向房间}hotel;typedef struct room//房间结构体{int r_num;//房间号int max;//房间的最大床位数int renshu;//房间当前的人数struct room*next;//下一个房间struct traver*tra_next;//指向旅客void menu_select()//菜单函数{printf("************旅客管理查询系统************\n"); //菜单选择printf("1.进行订房登记服务\n");printf("2.进行退房结账服务\n");printf("3.查询旅客信息\n");printf("4.统计旅客信息\n");printf("****************************************\n");}void Init(hotel*L)//旅店等级设置头结点{int i,j,k,n;//k床位数,j房间等级,n房间个数hotel*p,*q;room*p1,*p2,*p3;printf("请输入房间等级:\n");scanf("%d",&j);q=L;for(i=1;i<=j;i++) //初始化房间的等级{p=(hotel*)malloc(sizeof(hotel));q->next=p;p->l_num=i;//房间等级赋值printf("请输入房间等级为%d的房间个数:\n",p->l_num);scanf("%d",&n);//输入该等级的房间数if(n==0)//不存在该等级的房间数时continue;else{//初始化床位p2=(room*)malloc(sizeof(room));//为该等级的房间申请空间p2->r_num=1;printf("请输入房间等级为%d的房间号为1的床位数:\n",p->l_num,k); scanf("%d",&(p2->max));//房号为l的床位数p2->renshu=0;//房间当前人数为0p->r_next=p2;//指向该等级的下一个房间p3=p2;for(k=2;k<=n;k++)//房间号为2的房间信息初始化{p1=(room*)malloc(sizeof(room));p3->next=p1;p1->r_num=k;printf("请输入房间等级为%d的房间号为%d的床位数:\n",p->l_num,k); scanf("%d",&(p1->max));p1->renshu=0;p3=p1;}p3->next=NULL;}//房间链表尾指针为空q=q->next;}//指向下一个等级q->next=NULL;//等级链表尾指针为空int full(hotel*L)//判断客满{hotel*l;l=L->next;room *t;while(l!=NULL){t=l->r_next;//指向房间while(t!=NULL){if(t->renshu!=t->max)return 0;else t=t->next;}//指向下一个房间l=l->next;}if(!l)return 1;}void print(tra*s,room*p){printf("输出旅客信息:\n");printf("姓名%s,性别%d,年龄%d,房间等级%d,房间号码%d,床号%d,入住时间%d,%d,%d\n",s->name,s->sex,s->age,s->g,p->r_num,s->bednum,s->year,s->month,s->day);}void zhusu(hotel*L){tra *q1,*q2,*q3;char c;hotel*l;l=L->next;room *t;int i,g;if(full(L)){printf("客满,不能入住!\n");}else{printf("请输入房间等级\n");//输入旅客所需要的等级scanf("%d",&g);while(g!=NULL)//等级不空时{if(l->l_num!=g)l=l->next;else{t=l->r_next;//有该等级时while(t!=NULL)//房间不空{if(t->renshu==t->max)//*是否有空床位{t=t->next;//指向下一个房间if(t==NULL){getchar();printf("等级为的所有房间均无空位\n是否愿意更换等级[y/n]",g);scanf("%c",&c);//是否更换等级zhusu(L);else return;}}else//进行旅客登记{if(t->renshu==0)//床位没有设置头结点,所以要进行判断{q1=(tra*)malloc(sizeof(tra));printf("请输客人姓名\n");scanf("%s",q1->name);printf("请输入性别:1为男,0为女\n");scanf("%d",&(q1->sex));printf("请输客人年龄\n");scanf("%d",&(q1->age));printf("请输入旅客入住时间(如1990 12 13):");scanf("%d %d %d",&q1->year,&q1->month,&q1->day);q1->g=g;//修改指针t->tra_next=q1;//t->renshu++;//房间人数加1q1->bednum=1;q1->next=NULL;//尾指针为空print(q1,t);break;}else{q2=t->tra_next;q3=q2;i=1;for(;q3!=NULL;q3=q3->next){if(i==q3->bednum){++i;q3=q2;}}for(;q2->next!=NULL;q2=q2->next);q1=(tra*)malloc(sizeof(tra));printf("请输入旅客姓名:\n");q1=(tra*)malloc(sizeof(tra));printf("请输客人姓名\n");scanf("%s",q1->name);printf("请输入性别:1为男,0为女\n");scanf("%d",&(q1->sex));printf("请输客人年龄\n");scanf("%d",&(q1->age));printf("请输入旅客入住时间:");scanf("%d %d %d",&q1->year,&q1->month,&q1->day);q1->g=g;q1->next=NULL;t->renshu++;q1->bednum=i;print(q1,t);break;}}}system("cls");break;}}}}tra*tuifang(hotel*L){int g,hotel_num,bednum;hotel*l;l=L->next;room *t;tra*p,*q;char c;printf("请输入该退房人房间的等级号码:\n");scanf("%d",&g); //输入退房人的房间等级getchar();while(l!=NULL){ if(l->l_num!=g)l=l->next;else //找到该等级{ t=l->r_next;printf("请输入该退房人房间的房间号码:\n");scanf("%d",&hotel_num); //输入退房人的房间号码 getchar();while(t!=NULL){ if(t->r_num!=hotel_num)t=t->next;else //找到该房间{p=t->tra_next;q=t->tra_next;printf("请输入该退房人的床位号码:\n");scanf("%d",&bednum); //输入退房人的床位号码getchar();while(q!=NULL){ if(q->bednum!=bednum)q=q->next;else //查找该床位{if(bednum==p->bednum) //因为床位没有设置头结点,所以对于第一个结点要特别判断{ //直接打印旅客信息printf("等级、房间、床位旅客的信息为:\n");printf("姓名\t性别\t年龄\t入住时间\n");printf("%s\t%d\t%d\t%d-%d-%d\n",q->name,q->sex,q->age,q->year,q->month,q->day);scanf("%c",&c);if(c=='y') //做出是否退房的选择{ t->tra_next=q->next;t->renshu--;printf("退房成功!\n");return(q); }elsereturn NULL; }else //如果床位不为1{while(p->next!=q) //指向下一床位p=p->next; //打印旅客信息printf("等级、房间、床位旅客的信息为:\n");printf("该名顾客的信息:\n");printf("姓名\t性别\t年龄\t入住时间\n");printf("%s\t%d\t%d\t%d-%d-%d\n",q->name,q->sex,q->age,q->year,q->month,q->day); printf("是否与要退房人信息相符?[y/n]\n");scanf("%c",&c);if(c=='y') //做出是否退房的选择{p->next=q->next;t->renshu--;printf("退房成功!\n");return(q);}elsereturn NULL; } } }if(q==NULL) //如果该房间内床位为空{ printf("未找到该床位号!\n"); } } }if(t==NULL) //如果该等级的房间为空{ printf("未找到该房间号!\n"); } } }if(l==NULL) //如果等级链表为空{ printf("未找到该房间等级!\n"); } }void chaxun(hotel *L) //查询旅客信息函数{ char c[15];hotel *l;room *t;tra *s;int flag=0;//设置标志量printf("请输入要查询的旅客姓名:\n");scanf("%s",c);getchar();l=L->next;while(l!=NULL) //等级不为空时,指向房间{ t=l->r_next;while(t!=NULL)//房间不为空时,指向床位t=t->next;else{ s=t->tra_next;while(s!=NULL){if(!strcmp(s->name,c)) //如果找到该旅客{print(s,t); //打印信息s=s->next; //指向下一人,继续查找flag++; //标志量加1}elses=s->next;}t=t->next; //指向下一个房间} }l=l->next; //指向下一个等级}if(!flag) //标志量为零,则未查找到{printf("未找到该旅客!\n"); } }void Tongji(hotel *L) //统计旅店当前住宿人数函数{ char c[15];hotel *l;room*t;tra *s;int i=0,j=0;int flag;l=L->next;while(l!=NULL){ flag=0;i++;t=l->r_next;while(t!=NULL)//房间不空{ if(t->renshu==0)t=t->next;else{ s=t->tra_next;while(s!=NULL) //旅客不空{ flag++;j=j+flag;s=s->next;}t=t->next;}}l=l->next; }if(!j)printf("此时无人住宿。