文章编辑数据结构课程设计报告书
数据结构课程设计报告范文
![数据结构课程设计报告范文](https://img.taocdn.com/s3/m/3f95bc2f9b6648d7c1c74694.png)
数据结构课程设计报告课程设计报告课程设计题目:链表的创立、插入、删除、修改学生姓名专业计算机科学与技术班级学号指导教师艾9月 30日一、实验题目:实现链表的创立、插入、删除和修改任务:实现链表的创立、插入、删除、修改和输出要求:建立一个简单的人机对话,创立、插入、删除、修改和输出功能能够根据需要选择使用。
二、实验时间、地点:-12-26~ -12-30、信工楼302三、实验目的本次课程设计的主要目的是综合运用所学的数据结构知识解决一个比较实际问题,侧重对链表、数组、字符串、图、树等相关内容的综合应用,使同学们能进一步熟悉掌握数据结构的基础知识,进一步提升自己的解决问题和编程调试能力,为后续专业课程的学习打下良好的基础。
四、实验要求1. 了解数据结构及其分类、数据结构与算法的密切关系;2. 熟悉各种基本数据结构及其操作,学会根据实际问题来选择数据结构;3. 掌握设计算法的步骤和分析方法;4. 掌握数据结构在排序和查找等常见算法中的应用。
5. 独立完成;6.每个人需按照选题规则确定好自己的题目(注意不是多人完成一题,每人独立完成一题),不得以任何理由选择其它的题目,当然在完成自己的题目之后根据个人兴趣能够继续选做其它的题目;7.课程设计完成后严格按照报告格式撰写课程设计报告,并于结束后的第三天上交到学习委员统一交给老师;8.课程设计的成绩由两部分组成:程序检查成绩(40%,每个功能占程序分的20%)+报告检查成绩(40%)+平时考核(20%)五、实现思路链表是一种动态数据结构,她的特点是用一组任意的存储单元(能够是连续的,也能够是不连续的)存放数据元素。
链表中每一个元素成为“结点”,每一个结点都是由数据域和指针域组成的,每个结点中的指针域指向下一个结点。
Head是“头指针”,表示链表的开始,用来指向第一个结点,而最后一个指针的指针域为NULL(空地址),表示链表的结束。
能够看出链表结构必须利用指针才能实现,即一个结点中必须包含一个指针变量,用来存放下一个结点的地址。
文章编辑数据结构课程设计报告书
![文章编辑数据结构课程设计报告书](https://img.taocdn.com/s3/m/b48cd076f705cc17552709e3.png)
理工大学《数据结构》课程设计报告学院专业班级学号学生指导教师课程成绩完成日期课程设计成绩评定学院专业班级学号学生指导教师完成日期指导教师对学生在课程设计中的评价课程设计任务书计算机与通信工程学院软件工程专业文章编辑学生:旖指导老师:倩诒摘要本课程设计主要解决了基本的文章编辑问题。
对于一页按要求输入到程序执行窗口的文章,静态存储结构使用线性表中,分别完成统计文章总字符数、文章中空格个数、文章中英文字母数、统计文章中英文字母数的操作和文章中某一字符串的出现的次数,并输出该次数;除以上的统计操作,还实现删除文章中指定字符串,并且将删除字符串后面的字符前移,再保存为编辑后的文章。
关键字静态存储;线性表;编辑;字符串目录1.引言 (1)1.1课程设计意义 (1)1.2课程设计目的 (1)1.3课题要求 (1)2.设计思路与方案 (2)2.1函数流程 (2)2.2功能函数 (4)3.详细实现 (5)3.1数据结构设计 (5)3.2功能函数设计 (5)3.3函数分析 (6)4.运行环境与结果 (12)4.1运行环境 (12)4.2运行结果 (12)5.结束语 (16)6.参考文献 (17)7.附录 (18)代码清单 (18)1引言1.1课程设计意义在实践教学中,课程设计是一个重要环节,它以某一课程为基础,可以涉及和课程相关的各个方面,是一门独立于课程之外的特殊课程。
课程设计是让同学们对所学的课程更全面的学习和应用,理解和掌握课程的相关知识。
数据结构[1]是一门重要的专业基础课,是计算机理论和应用的核心基础课程。
数据结构课程设计,要求学生在数据结构的逻辑特性和物理表示、数据结构的选择和应用、算法的设计[2]及其实现等方面,加深对课程基本容的理解[3]。
同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。
1.2课程设计目的1.提高对数据逻辑结构[4]的特点以及存储表示方式的认识,培养在具体应用中选择合适的数据结构和存储结构的能力。
数据结构课程设计,报告正文
![数据结构课程设计,报告正文](https://img.taocdn.com/s3/m/1724fe60f5335a8102d22017.png)
哈夫曼编码与译码学生姓名:指导老师:摘要本课程设计主要解决的是利用哈夫曼树生成的哈夫曼编码进行字符串的加密和解密,并将加密的编码写入文件。
在此课程设计中,系统开发平台为Windows XP,程序设计语言采用面向过程的高级语言C和面向对象的高级语言C++,程序运行平台为Visual C++ 6.0。
在程序设计中,采用了结构化与面向过程两种解决问题的方法。
程序通过调试运行,初步实现了设计目标,并且经过适当完善后,将可以应用在商业中解决实际问题。
关键词哈夫曼树,编码,译码,文件操作,C,C++;1 引言1.1 课题背景随着信息时代的到来,各种信息日益丰富,信息迅速膨胀,对信息管理的工作量也日益增大。
在信息化未到来之前,信息的存储编码也变得尤为重要,公司之间的信息需要编码,用户个人数据需要编码,都需要占用很大的空间,所以一个好的、高效的编码译码算法是十分重要的。
好的加密算法不仅可以降低管理方的工作量和存储量,还可以对用户的信息进行高效的管理,同时使在用中可以避免不必要的麻烦。
数据结构是指相互之间存在一定关系的数据元素的集合。
按照视点的不同,数据结构分为逻辑结构和存储结构。
数据的逻辑结构(logical structure)是指数据元素之间逻辑关系的整体。
所谓逻辑关系是指数据元素之间的关联方式或邻接关系。
根据数据元素之间逻辑关系的不同,数据结构分为四类:集合、线性结构、树结构、图结构。
数据的逻辑结构属于用户视图,是面向问题的,反映了数据内部的构成方式。
为了区别于数据的存储结构,常常将数据的逻辑结构称为数据结构。
数据的存储结构(storage structure)又称为物理结构,是数据及其逻辑结构在计算机中的表示,换言之,存储结构除了数据元素之外,必须隐式或显示地存储数据元素之间的逻辑关系。
通常有两种存储结构:顺序存储结构和链接存储结构。
树是一种在实际应用中被广泛使用的数据结构。
它是由同一类型的记录构成的集合。
数据结构课程设计报告模板
![数据结构课程设计报告模板](https://img.taocdn.com/s3/m/5211c37a76eeaeaad0f33090.png)
数据结构课程设计报告模板篇一:数据结构课程设计报告模板课程设计说明书课程名称:数据结构与算法专业:计算机科学与技术班级: 103013姓名:徐粤玲学号:03成绩:完成日期:XX年1 月 12日任务书摘要本文的研究工作在于利用计算机模拟人脑进行下黑白棋,计算机下棋是人工智能领域中的一个研究热点,多年以来,随着计算机技术和人工智能技术的不断发展,计算机下棋的水平得到了长足的进步该程序的最终胜负是由棋盘上岗双方的棋子的个数来判断的,多的一方为胜,少的一方为负。
所以该程序主要运用的战术有削弱对手行动战术、四角优先战术、在游戏开局和中局时,程序采用削弱对手行动力战术,即尽量减少对手能够落子的位置;在游戏终局时则采用最大贪吃战术,即尽可能多的吃掉对手的棋子;而四角优先战术则是贯穿游戏的始终,棋盘的四角围稳定角,不会被对手吃掉,所以这里是兵家的必争之地,在阻止对手进角的同时,自己却又要努力的进角。
关键词:黑白棋编程设计s目录1.引言 ................................................ ................................................... .. (4)2.课题分析 ................................................ ................................................... (7)3.具体设计过程 ................................................ ....................................................8设计思路 ................................................ ...................................................8程序设计流程图 ................................................ (8)函数实现说明 ................................................ .. (12)4.程序运行结果 ................................................ ..................................................145.软件使用说明 ................................................ ..................................................186.结论 ................................................ ................................................... (21)参考文献 ................................................ ................................................... . (23)附录:源代码 ................................................................................................... .. 241.引言数据结构在计算机科学界至今没有标准的定义。
数据结构课程设计报告书
![数据结构课程设计报告书](https://img.taocdn.com/s3/m/2912dc71f46527d3250ce006.png)
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篇)
![数据结构课程设计(5篇)](https://img.taocdn.com/s3/m/09d5f8bc85868762caaedd3383c4bb4cf7ecb7b0.png)
数据结构课程设计(5篇)第一篇:数据结构课程设计课程设计说明书设计名称:数据结构课程设计题目:设计五:二叉树的相关操作学生姓名:专业:计算机科学与技术班级:学号:指导教师:日期: 2012 年 3 月 5 日课程设计任务书计算机科学与技术专业年级班一、设计题目设计五二叉树的相关操作二、主要内容建立二叉树,并对树进行相关操作。
三、具体要求1)利用完全二叉树的性质建立一棵二叉树。
(层数不小于4层)2)统计树叶子结点的个数。
3)求二叉树的深度。
4)能够输出用前序,中序,后序对二叉树进行遍历的遍历序列。
四、进度安排依照教学计划,课程设计时间为:2周。
本设计要求按照软件工程的基本过程完成设计。
建议将时间分为三个阶段:第一阶段,根据题目要求,确定系统的总体设计方案:即系统包括哪些功能模块,每个模块的实现算法,并画出相应的流程图.同时编写相应的设计文档;第二阶段,根据流程图编写程序代码并调试,再将调试通过的各个子模块进行集成调试;第三阶段,归纳文档资料,按要求填写在《课程设计说明书》上,并参加答辩。
三个阶段时间分配的大概比例是:35: 45: 20。
五、完成后应上交的材料本课程设计要求按照学校有关规范的要求完成,在课程设计完成后需要提交的成果和有关文档资料包括课程设计的说明书,课程设计有关源程序及可运行程序(含运行环境)。
其中课程设计说明书的格式按学校规范(见附件),其内容不能过于简单,必须包括的内容有:1、课程设计的基本思想,系统的总功能和各子模块的功能说明;2、课程设计有关算法的描述,并画出有关算法流程图;3、源程序中核心代码的说明。
4、本课程设计的个人总结,主要包括以下内容:(1)课程设计中遇到的主要问题和解决方法;(2)你的创新和得意之处;(3)设计中存在的不足及改进的设想;(4)本次课程设计的感想和心得体会。
5、源代码要求在关键的位置有注释,增加程序的可读性。
程序结构和变量等命名必须符合有关软件开发的技术规范(参见有关文献)。
Vwwuor数据结构课程设计—文章编辑设计报告
![Vwwuor数据结构课程设计—文章编辑设计报告](https://img.taocdn.com/s3/m/47e0c1748e9951e79b892790.png)
生命是永恒不断的创造,因为在它内部蕴含着过剩的精力,它不断流溢,越出时间和空间的界限,它不停地追求,以形形色色的自我表现的形式表现出来。
--泰戈尔文章编辑——冯岳良20080573 一、需求分析功能:输入一页文字,程序可以统计出文字、数字、空格的个数。
静态存储一页文章,每行最多不超过80个字符,共N行;要求:(1)分别统计出其中英文字母数和空格数及整篇文章总字数;(2)统计某一字符串在文章中出现的次数,并输出该次数;(3)删除某一子串,并将后面的字符前移。
存储结构使用线性表,分别用几个子函数实现相应的功能;输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号。
输出形式:(1)分行输出用户输入的各行字符;(2)分4行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数"(3)输出删除某一字符串后的文章;二、概要设计1、定义结构体 struct line,文本行采用顺序存储,行与行之间采用链式存储开始主函数输入文字统计个数查找某一子串输出文字统计字母、数字、空删除这一子串格、某一字符串的个数以及文章总字数输出删除后的文章具体操作2、主要函数: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*/开始count=0;h=0;len1=0; len2=strlen(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三、详细设计:#include<iostream.h> #include <string.h>#include <stdio.h> /*文本每行以字符串形式存储,行与行之间以链表存储*/ typedef struct line {char *data; struct line *next;}LINE; /*创建一链表,同时向里面输入文本数据*/ void Create(LINE * &head) {printf ("请输入一页文章,以Ctrl+E(^E)为结尾(每行最多输入80字符!):\n");LINE *p=new LINE; /*首先为链表 建立一个附加表头结点*/ head=p; /*将p 付给 表头指针*/ char tmp[100]; while(1) {gets(tmp); /*输入字符串!*/ if(strlen(tmp)>80) {printf("每行最多输入80字符");str pi jsfor(m=0;m<i;m++) tmp[count++]=s[m];for(n=j;n<len;n++) tmp[count++]=s[n];tmp}if(tmp[0]==5)break; /*如果发现输入 ^E,则退出输入*/ p=p->next=new LINE;p->data=new char[strlen(tmp)+1]; /*为结点分配空间 */ strcpy(p->data,tmp);if(tmp[strlen(tmp)-1]==5) /*除去最后一个控制符 ^E */{p->data[strlen(tmp)-1]='\0';break;}}p->next=NULL; /*最后的一个指针为空 */head=head->next;}/*统计字母数*/int CountLetter(LINE * &head){LINE *p=head;int count=0;do{int Len=strlen(p->data); /*计算当前 data 里的数据元素的个数*/for(int i=0;i<Len;i++)if((p->data[i]>='a'&&p->data[i]<='z')||(p->data[i]>='A'&&p->data[i]<='Z')) /*计算字母数*/count++;}while((p=p->next)!=NULL); /*遍历链表*/return count; /*返回文章的字母总数*/}/*统计数字数*/int CountNumber(LINE * &head){LINE *p=head;int count=0;do{int Len=strlen(p->data); /*计算当前 data 里的数据元素的个数*/for(int i=0;i<Len;i++)if(p->data[i]>=48 && p->data[i]<=57)count++;/*计算数字数,ASCII码*/}while((p=p->next)!=NULL); /*遍历链表*/}/*统计空格数*/int CountSpace(LINE * &head){LINE *p=head;int count=0;do{int Len=strlen(p->data); /*计算当前 data 里的数据元素的个数*/ for(int i=0;i<Len;i++)if(p->data[i]==32)count++; /*计算空格数,空格ASCII码为32*/ }while((p=p->next)!=NULL); /*遍历链表*/return count;}/*统计文章的总字数*/int CountAll(LINE * &head){LINE *p=head; /*保存链表的首地址*/int count=0;do /*计算总字符数*/{count+=strlen(p->data);}while((p=p->next)!=NULL); /*遍历链表*/return count;}/*统计str在文章中出现的次数*/int FindString(LINE * &head,char *str){LINE *p=head;int count=0;int h=0;int len1=0; /*保存当前行的总字符数*/ int len2=strlen(str); /*待统计字符串的长度*/ int i,j,k;do{len1=strlen(p->data); /*当前行的字符数*/for(i=0;i<len1;i++) /*字符匹配*/{if(p->data[i]==str[0]){k=0;for(j=0;j<len2;j++)if(p->data[i+j]==str[j]) k++;if(k==len2) {count++;i=i+k-1;}}}}while((p=p->next)!=NULL); /*遍历链表*/return count;}/*删除指定的字符串*/void delstringword(char *s,char *str)/* *s为输入的字符串,*str为将要删除的字符*/{char *p=strstr(s,str); /*从字符串s中寻找str第一次出现的位置*/char tmp[80];int len=strlen(s);int i=len-strlen(p);int j=i+strlen(str);int count=0;for(int m=0;m<i;m++)tmp[count++]=s[m];for(int n=j;n<len;n++)tmp[count++]=s[n];tmp[count]='\0';strcpy(s,tmp); /*返回新的字符串*/}void DelString(LINE * &head,char *str){LINE *p=head;do{if(strstr(p->data,str)!=NULL)delstringword(p->data,str);}while((p=p->next)!=NULL); /*遍历链表*/}/*向屏幕输出文章*/void OutPut(LINE * &head){LINE *p=head;do{printf("%s\n",p->data);}while((p=p->next)!=NULL); /*遍历链表*/}void main(){LINE *head;Create(head);printf("输入的文章为:\n");OutPut(head);printf("\n");printf("全部字母数:%d \n",CountLetter(head));printf("数字个数:%d \n",CountNumber(head));printf("空格个数: %d \n",CountSpace(head));printf("文章总字数: %d \n",CountAll(head));char str1[20],str2[20];printf("\n");printf("请输入要统计的字符串:");scanf("%s",str1);printf("%s出现的次数为:%d \n",str1,FindString(head,str1)); printf("\n");printf("请输入要删除的某一字符串:");scanf("%s",str2);DelString(head,str2);printf("删除%s后的文章为:\n",str2);OutPut(head);}四、调试分析:1.测试数据及结果2、问题思考:输入文章时,计算机怎样识别文章是否结束?输出文章时,怎样处理表示结束的字符?解决方案:输入文章时,以Ctrl+E(^E)为结尾,当tmp[0]==5时,发现输入^E,则退出输入。
数据结构课程设计报告
![数据结构课程设计报告](https://img.taocdn.com/s3/m/60134711ec630b1c59eef8c75fbfc77da3699764.png)
数据结构课程设计报告标题:数据结构课程设计报告摘要:本报告旨在详细描述数据结构课程设计的过程和结果。
通过对数据结构的学习和实践,我们掌握了基本的数据结构知识,并运用所学知识完成了一个实际的项目。
本报告将介绍项目的背景、需求分析、设计思路、实现过程和测试结果,并对项目的优缺点进行评估和总结。
1. 引言在现代计算机科学领域,数据结构是一门基础而重要的课程。
它研究数据的组织、存储和管理方式,对于提高程序效率和解决实际问题具有重要意义。
本课程设计旨在通过实践,加深对数据结构的理解并掌握其应用。
2. 背景在本次课程设计中,我们选择了一个实际的问题作为研究对象,即一个学生信息管理系统。
该系统需要能够对学生的基本信息进行存储、查询和修改,并提供相应的功能操作。
3. 需求分析在需求分析阶段,我们对学生信息管理系统的功能和性能需求进行了详细的调研和分析。
通过与用户的交流和讨论,我们确定了以下需求:- 学生信息的录入和存储:包括学生姓名、学号、性别、年龄等基本信息;- 学生信息的查询和展示:支持按照学号、姓名等条件进行查询,并能够将查询结果以表格形式展示;- 学生信息的修改和删除:允许用户对已录入的学生信息进行修改和删除操作;- 数据的持久化存储:保证学生信息的长期保存,并能够在系统重启后恢复数据。
4. 设计思路基于需求分析的结果,我们设计了以下数据结构和算法:- 学生信息的存储:采用链表数据结构,每个节点表示一个学生的信息,包括学号、姓名、性别、年龄等字段;- 查询功能的实现:通过遍历链表,按照用户指定的条件进行匹配,返回满足条件的学生信息;- 修改和删除功能的实现:通过遍历链表,找到目标学生节点,进行相应的修改或删除操作;- 数据持久化存储:将学生信息保存在文件中,实现数据的长期保存和恢复。
5. 实现过程在实现阶段,我们使用C++编程语言,利用所学的数据结构知识逐步完成了学生信息管理系统的开发。
具体步骤如下:- 定义学生信息的数据结构:创建一个包含学号、姓名、性别、年龄等字段的结构体;- 实现学生信息的录入和存储功能:通过链表数据结构,将学生信息存储在内存中;- 实现学生信息的查询和展示功能:按照用户指定的条件遍历链表,返回满足条件的学生信息;- 实现学生信息的修改和删除功能:通过遍历链表,找到目标学生节点,进行相应的修改或删除操作;- 实现数据的持久化存储功能:将学生信息保存在文件中,实现数据的长期保存和恢复;- 进行系统测试和调试:通过输入不同的测试数据,验证系统的功能和性能。
《数据结构》课程设计报告范本(doc 8页)
![《数据结构》课程设计报告范本(doc 8页)](https://img.taocdn.com/s3/m/4625ac49bd64783e09122be2.png)
《数据结构》课程设计报告范本(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<<"当前线性表内没有元素。
《数据结构》课程设计报告
![《数据结构》课程设计报告](https://img.taocdn.com/s3/m/c7e6c25d91c69ec3d5bbfd0a79563c1ec5dad7e2.png)
《数据结构》课程设计报告一、课程目标《数据结构》课程旨在帮助学生掌握计算机科学中数据结构的基本概念、原理及实现方法,培养其运用数据结构解决实际问题的能力。
本课程目标如下: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课时,学习排序和查找算法,掌握各类算法的实现和应用。
数据结构课程设计报告 (4)
![数据结构课程设计报告 (4)](https://img.taocdn.com/s3/m/d3d3a5467dd184254b35eefdc8d376eeafaa175c.png)
数据结构课程设计报告1、引言数据结构是计算机科学中的重要基础课程,它研究如何组织和管理数据以及数据之间的关系。
掌握良好的数据结构对于程序设计和算法的实现至关重要。
本报告将介绍在数据结构课程中完成的设计项目,主要包括设计目标、设计思路、实现细节以及结果分析等内容。
2、设计目标本设计项目的目标是实现一个简单的学生成绩管理系统,该系统能够实现对学生的基本信息以及各门课程成绩的管理和查询。
设计的关键要求如下:1.能够添加学生信息并关联其各门课程成绩;2.能够根据学号查询学生信息以及其各门课程成绩;3.能够计算学生的总成绩和平均成绩;4.能够实现对学生信息和成绩的修改和删除操作。
3、设计思路为了实现上述设计目标,我们采用了链表数据结构来保存学生信息和成绩。
链表的节点用来存储学生的基本信息,如学号、姓名、性别等,同时还包含一个指向课程成绩链表的指针。
课程成绩链表的节点用来存储每门课程的成绩。
在添加学生信息时,我们按照学号的顺序将学生节点插入到链表中。
通过遍历链表,我们可以根据学号查找到对应的学生节点,并进一步查找到该学生的课程成绩链表。
对于查询操作,我们可以通过遍历链表找到匹配的学生节点,然后输出其基本信息和课程成绩。
计算总成绩和平均成绩可以通过遍历课程成绩链表并累加每门课程的成绩来实现。
修改和删除操作可以通过遍历链表找到匹配的学生节点,并进行相应的修改或删除操作。
4、实现细节该学生成绩管理系统的具体实现细节如下:•使用C++编程语言实现;•采用链表数据结构,分别设计了学生信息链表和课程成绩链表;•学生信息链表的节点包括学号、姓名、性别等信息,以及指向课程成绩链表的指针;•课程成绩链表的节点包括课程名称和成绩信息;•提供了添加学生信息、添加课程成绩、查询学生信息、查询课程成绩、计算总成绩和平均成绩等功能;•通过遍历链表实现对学生信息和成绩的修改和删除操作。
5、结果分析经过测试和验证,该学生成绩管理系统能够满足设计目标,并能够正常运行。
《数据结构》课程设计报告。目录及正文
![《数据结构》课程设计报告。目录及正文](https://img.taocdn.com/s3/m/362814cd8bd63186bcebbcf0.png)
目录1 前言 (1)2 需求分析 (1)2.1课程设计目的 (1)2.2课程设计任务 (1)2.3设计环境 (1)3 概要设计 (2)3.1数据结构设计 (2)3.2模块设计 (2)4 详细设计 (4)4.1子函数Great流程图 (4)4.2子函数print流程图 (5)4.3子函数op2流程图 (5)4.4主函数流程图 (7)5 测试分析 (8)6 课程设计总结 (13)参考文献 (14)致谢 (14)附录 (15)1前言纸牌是现代很多人休闲娱乐的一种选择,但要怎样才能赢,这就要好好算算概率了。
玩纸牌的湖南人居多,玩牌也是一种智慧,香港、澳门就有很多玩纸牌高手,他们是拥有过人的记忆和高超的打牌技艺,才赢得自己的地位和荣誉,可想而知,就算是娱乐也是一种智慧,一种艺术。
今天我就以纸牌来做个课程设计,让我们一起在虚拟的世界里来探讨纸牌的奥秘。
2需求分析2.1 题目描述一个21点的扑克牌游戏。
本程序取点于手机游戏,游戏规则与手机游戏相同。
玩家一共可以要5张牌,但如果牌的点数超过21,则暴了,自动出局;在不超过21点的情况下,玩家与庄家比牌的点数大小,大者为赢。
2.2 要求及设计目标(1)将所有的函数与相应的数据封装到类中,并改写主程序,使程序简化。
(2)程序中一共有13张扑克牌可以随机抽取,大于10的点数为10,A根据情况点数不同,当前点数小于11时为11点,大于10时则为1点。
(3)要求庄家永远不会暴庄,即庄家可以查看下一张牌,若大于21点,则拒绝,当然,在游戏规则上不能泄露这点秘密。
(4)高级玩家可以查看下一张牌,即按H键,然后按要求输入密码,密码正确可以看牌,并决定是否要牌。
(5)将界面的提示说明全部设计为中文界面,界面的解释详细友好,可以吸引更多的玩家。
2.3设计环境(1)WINDOWS 2000/2003/XP/7/Vista系统(2)Visual C++或TC集成开发环境3概要设计3.1数据结构设计程序主函数,调用各种子函数,实现程序的运行void main(){SeqList L;create(&L);op2(&L,52);printf("输出牌的编号\n");print(L);本程序设计了一个Game_21类,包含16个类成员函数。
《数据结构》课程设计报告书参考模板
![《数据结构》课程设计报告书参考模板](https://img.taocdn.com/s3/m/fdf1eb26a1c7aa00b42acb7d.png)
《数据结构》课程设计报告报告(论文)题目: 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章绪论随着信息产业的飞速发展,信息化管理及查询已经引入并应用到各行业管理领域,各种形式的百货商场、大型仓储超市、便利店、连锁超市和专卖店等形式的零售业鳞次栉比,不断改变、影响着人们的价值观念和生活方式。
数据结构课程设计报告模板范文
![数据结构课程设计报告模板范文](https://img.taocdn.com/s3/m/2523bd9cc1c708a1284a4494.png)
数据结构课程设计报告模板[贪吃蛇程序设计]一、 设计课题贪吃蛇程序设计二、 设计内容1. 工作说明(1)实现贪吃蛇小游戏的运行,各功能模块分别为食物类型的定义,蛇类型的定义,界面光标位置的显示,蛇的初始化,计分方向 码的转换输出(2否(3) 所用到的数据结构的知识及相关数据结构的描述形式数据类型的表示及实现,算法和算法分析,线性表的链式表示和实现,数组的顺序表示,动态存储管理等。
(4) 函数介绍a 界面光标位置函数:控制界面光标位置,为显示边界、食物等界面显示内容提供依据。
b.方向控制函数:经过键盘输入指定字母实现对蛇移动方向的控制。
c.初始化蛇函数:经过链表方式显示蛇的形象,并控制蛇的初始长度、初始移动方向及初始分数。
d.e.计分显示函数:经过引用界面光标位置函数,实现在指定界面位置输出分数。
f.控制蛇的死亡函数:讨论当蛇碰到左右上下边界以及咬到自身等几种情况时,经过引用库函数清除当前屏幕,再经过界面光标位置函数在指定位置输出"Game Over!"、"Press ESC to exit,any other key to retry!",接着经过选择是否继续游戏,如果是,经过引用库函数中的跳跃函数,回到指定位置循环程序;如果否,则结束游戏。
g.食物输出函数:经过引用库函数中的随机数函数随机输出食物,并当蛇吃到食物时,控制蛇长度增长,同时使用递归函数循环输出食物。
h.游戏实现过程函数:调用以上函数,实现蛇的移动、增长、死亡的具体游戏实现过程。
(5) 函数的调用关系(1)调用了gotoxy()函数的有:boundary()函数,getscoresys ()函数,isdead()函数,play()函数。
(2)play()函数调用的函数有:gotoxy()函数,boundary()函数,getscoresys()函数,isdead()函数。
(3)主函数main()调用了play()函数。
数据结构课程设计报告
![数据结构课程设计报告](https://img.taocdn.com/s3/m/ac986680d4d8d15abe234e9f.png)
课程设计说明书文章编辑课程设计报告一、需求分析我们编此程序 为了便于统计文章中的字数,标点数,以及数字的个数,因此它的功能要求也就应该包含这些。
主要的是如下几点: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);将会出现不能输入空格的问题。
数据结构课程设计报告-文本编辑器参考模板
![数据结构课程设计报告-文本编辑器参考模板](https://img.taocdn.com/s3/m/078848f210a6f524cdbf8549.png)
《数据结构》课程设计报告题目:基于顺序结构的文本编辑器的设计专业:计算机科学与技术班级:姓名:学号:指导教师:成绩:2014-2015学年第一学期目录1课程设计内容 (1)1.1 设计内容 (1)1.2 设计任务 (1)1.3 具体要求 (1)2 概要设计 (1)2.1 系统的功能简介 (1)2.2 各个模块之间的主要关系 (2)3 设计过程及代码分析 (2)4 设计结果与分析 (15)5 源程序 (16)6 总结 (24)7 致谢 (24)8 参考文献 (25)1 课程设计内容1.1 设计内容《文本编辑器》主要根据课程设计要求进行设计的,本次课程设计的内容及要求是设计一个文本编辑器,能实现文本内容输入、显示、统计、处理、保存和退出文本编辑器等基本功能,主界面具有图形菜单界面、输入文本、打开文件、显示当前文本内容、进入文本内容统计菜单、进入文本内容处理菜单、保存、退出文本编辑器。
其中文本内容统计菜单包含大小写字母、数字、标点符号、空格、所有字符的统计;文本内容处理菜单包含查找、删除文章中的字符或者字符串,向文章中插入字符或者字符串,从文章中复制字符或者字符串,修改行内容,替换字符或者字符串。
1.2 设计任务主要利用C语言的文件操作能力设计一个简单的文本编辑器,对于文本编辑器来说,数据结构相对简单,使用一个有较大长度的顺序表即可,在程序中可采用一维数组来实现。
使用数组表示的顺序表来存储文本具有简洁、访问方便、输出方便等特点。
1.3 具体要求明确课程设计的目的,能根据课程设计的要求,查阅相关文献,为完成设计准备必要的知识;提高学生用数据结构进行程序设计的能力,重点提高用C语言进行文件操作和绘图应用的编程技术水平;初步了解软件开发的一般方法和步骤;提高撰写技术文档的能力。
2 概要设计2.1 系统的功能简介该系统的主要功能是实现文本内容输入、显示、统计、处理、保存。
首先,输入文本内容并保存;选择打开文件,打开刚才保存的文件;选择显示当前文章内容,可以预览文件内容;进入文章内容统计菜单,可以对文章中大写字母、小写字母、数字、标点符号、空格、所有字数的统计;进入文章内容处理菜单,查找、删除文章中的字符或者字符串,向文章中插入字符或者字符串,从文章中复制字符或者字符串,修改行内容,替换字符或者字符串。
数据结构课程设计报告(模版)范文
![数据结构课程设计报告(模版)范文](https://img.taocdn.com/s3/m/0d48c90d647d27284b7351e2.png)
攀枝花学院学生课程设计(论文)题目:*************学生姓名:********学号:**所在院(系):数学与计算机学院专业:计算机科学与技术专业班级:2011级计算机科学与技术1班指导教师:蒋斌职称:讲师2013年12月19 日攀枝花学院本科学生课程设计任务书注:任务书由指导教数据结构课程设计评定表I摘要本次课程设计是利用数据结构的知识编写一个能够实现学生配对的问题的软件,以达到在每一首歌曲中能够有学生配对来进行舞蹈表演。
为了实现这一个功能我们用利用已学的知识进行编写程序。
通过学习数据结构课程和c语言的知识,主要利用数据结构的队列和C语言知识来实现软件的功能。
主要是把男女生分别放在两个队列中,要涉及到队列的判断和循环等算法。
判断队列的满和空的知识来完成。
关键字:学生搭配问题,数据结构,队列,C语言,软件,功能I I目录摘要 (II)1.方案设计 (1)1.1问题描述 (1)1.2需求分析 (1)1.3运行环境 (1)1.4概要设计 (2)2.算法设计 (3)2.1算法设计思想 (3)2.2算法设计的对应方式 (3)2.3算法设计流程图 (4)3.详细设计 (5)3.1设计思想 (5)3.2设计关键算法 (5)4.调试分析 (7)4.1、测试及结果 (7)5.总结 (9)参考文献 (10)程序清单 (11)数据结构课程设计方案设计1.方案设计1.1问题描述一班有m个女生,有n个男生(m不等于n),现要开一个舞会. 男女生分别编号坐在舞池的两边的椅子上.每曲开始时,依次从男生和女生中各出一人配对跳舞, 本曲没成功配对者坐着等待下一曲找舞伴.请设计一系统模拟动态地显示出上述过程,要求如下:1) 输出每曲配对情况2) 计算出任何一个男生(编号为X)和任意女生(编号为Y),在第K曲配对跳舞的情况.至少求出K的两个值。
1.2需求分析核心问题:循环队列的应用数据模型(逻辑结构):循环队列(两个),将男生、女生两组人分别存放,以后实现循环配对输出。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
理工大学《数据结构》课程设计报告学院专业班级学号学生指导教师课程成绩完成日期课程设计成绩评定学院专业班级学号学生指导教师完成日期指导教师对学生在课程设计中的评价课程设计任务书计算机与通信工程学院软件工程专业文章编辑学生:旖指导老师:倩诒摘要本课程设计主要解决了基本的文章编辑问题。
对于一页按要求输入到程序执行窗口的文章,静态存储结构使用线性表中,分别完成统计文章总字符数、文章中空格个数、文章中英文字母数、统计文章中英文字母数的操作和文章中某一字符串的出现的次数,并输出该次数;除以上的统计操作,还实现删除文章中指定字符串,并且将删除字符串后面的字符前移,再保存为编辑后的文章。
关键字静态存储;线性表;编辑;字符串目录1.引言 (1)1.1课程设计意义 (1)1.2课程设计目的 (1)1.3课题要求 (1)2.设计思路与方案 (2)2.1函数流程 (2)2.2功能函数 (4)3.详细实现 (5)3.1数据结构设计 (5)3.2功能函数设计 (5)3.3函数分析 (6)4.运行环境与结果 (12)4.1运行环境 (12)4.2运行结果 (12)5.结束语 (16)6.参考文献 (17)7.附录 (18)代码清单 (18)1引言1.1课程设计意义在实践教学中,课程设计是一个重要环节,它以某一课程为基础,可以涉及和课程相关的各个方面,是一门独立于课程之外的特殊课程。
课程设计是让同学们对所学的课程更全面的学习和应用,理解和掌握课程的相关知识。
数据结构[1]是一门重要的专业基础课,是计算机理论和应用的核心基础课程。
数据结构课程设计,要求学生在数据结构的逻辑特性和物理表示、数据结构的选择和应用、算法的设计[2]及其实现等方面,加深对课程基本容的理解[3]。
同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。
1.2课程设计目的1.提高对数据逻辑结构[4]的特点以及存储表示方式的认识,培养在具体应用中选择合适的数据结构和存储结构的能力。
2.熟悉软件开发的基本过程,初步掌握软件开发过程的问题分析、系统设计、程序编码[5]、测试等阶段基本任务和技能方法。
3.培养自己的算法设计和算法分析能力,提高综合运用所学的理论知识和方法独立分析和解决问题的能力。
4.训练用系统的观点和软件开发一般规进行软件开发,培养软件工作者所应具备的工作方法、作风和相互合作的精神。
5.综合运用链表[6]的查找、插入和删除,理论结合实际,将其运用到文章编辑这一实验中。
使这些知识得到进一步巩固、加深和拓展。
利用模块的思想,模块之间用指针连接,减少了不必要的麻烦。
巩固加深指针的用途,理解模块的优点。
加深对链表的理解,全面认识链表操作的字符串的模式匹配操作。
1.3课题要求课题名称:文章编辑具体要求:(1)静态存储一页文章,每行最多不超过80个字符,共N行;(2)分别统计出其中英文字母数和空格数及整篇文章总字数;(3)统计某一字符串在文章中出现的次数,并输出该次数;(4)删除某一子串,并将后面的字符前移;(5)存储结构使用线性表[3],分别用几个子函数实现相应的功能。
2 设计思路与方案2.1函数流程根据课题文章编辑的详细要求,可将程序的运行分为三个模块,即文章输入和文章输出模块、指令输入和指令判断模块、执行指令操作模块。
构造多个线性表,将输入的文章的每一行字符,都分别静态存储[4]在相应的线性表中。
每个线性表的存储容量不超过80个字符。
文章输入结束后,程序输出指令菜单,列出程序可以合法执行的操作指令,并选择输入合法的指令,以执行相应的指令操作。
依照课题要求,程序设计了6大功能,分别为统计文章中总字符数、统计文章中空格个数、统计文章中数字个数、统计文章中英文字母个数、删除文章中指定字符串、统计文章中指定字符串出现次数,并且为每一项功能提供相信的执行指令。
程序的执行流程如图2.1所示。
首先按要求输入文章,然后按照指令菜单选择要执行的指令,程序判断指令,并且执行相应的指令操作,输出指令执行结果后,重新返回指令菜单,再次等待指令输入。
指令书输入和指令执行为无限循环,在用户退出程序前,程序不会自动结束。
开机输入文章指令判断统计文章中英文字母数统计指定字符串出现次数删除文章中指定字符串统计文章中总字符数统计文章中数字个数统计文章中空格个数输入指令正确错误图2.1 函数执行流程图2.2功能函数为实现6个执行指令操作,分别设计相应的功能函数,并运用C语言数据结构构造相关代码。
功能函数名以功能说明如表2.2所示。
3 详细实现3.1数据结构设计(1)定义结构体:typedef struct line{char *data;struct line *next;}LINE;LINE为单链表存储结构。
3.2功能函数设计(1)统计文章总字数:void CountAll(LINE * &head)将p付给表头指针;初始化count为0;用do-while语句遍历链表,同时统计字符串中总字数;用printf语句输出文章中总字数,调用子函数menu()。
(2)统计文章中的空格数:void CountSpace(LINE * &head)将p付给表头指针;初始化count为0;用do-while语句遍历链表,同时统计字符串中空格数;用printf语句输出文章中空格数,调用子函数menu()。
(3)统计文章中数字个数:void CountNumber(LINE * &head)将p付给表头指针;初始化count为0;用do-while语句遍历链表,同时统计字符串中数字个数;用printf语句输出文章中数字个数,调用子函数menu()。
(4)统计文章中英文字母数:void CountLetter(LINE * &head)将p付给表头指针;初始化count为0;用do-while语句遍历链表,同时统计字符串中英文字母数用printf语句输出文章中英文字母数,调用子函数menu()。
(5)查找字符串的函数:void FindString(LINE * &head)将p付给表头指针;初始化count为0;初始化len1,用来保存当前行的总字符数;定义整型变量len2表示待统计字符串的长度;用printf语句提醒用户输入要统计的字符串;用do-while语句遍历链表,同时用for循环和if语句找出指定字符串在文章中出现的次数;用printf语句输出指定字符串在文章中出现的总次数,调用子函数menu()。
(6)删除字符串的函数:void DelString(LINE * &head)先创建一个delstringword,其中包含两个字符串char *s和char *str,用*s表示输入的字符串,*str表示要删除的字符。
这个函数的功能是找到字符串s在字符串中出现的位置并删除该字符串。
定义字符串的删除函数DelString(),用do-while语句遍历链表,语句中再套用if语句,并调用delstringword()进行删除。
3.3函数分析(1)void CountAll(LINE * &head)本函数的作用是统计整篇文章的所有字符数,包括空格。
返回统计结果之后会调用menu方法打印指令菜单。
void CountAll(LINE * &head){LINE *p=head;int count=0;do{count+=strlen(p->data);}while((p=p->next)!=NULL);printf("文章总字数: %d \n",count);printf("******************************\n");printf("\n");menu();}(2)void CountSpace(LINE * &head)本函数的作用是统计字符串链表中的空格个数,在统计完空格个数后,调用menu 方法打印指令菜单。
void CountSpace(LINE * &head){LINE *p=head;int count=0;do{int Len=strlen(p->data);for(int i=0;i<Len;i++)if(p->data[i]==32)count++;}while((p=p->next)!=NULL);printf("文章中空格个数: %d \n", count);printf("******************************\n");printf("\n");menu();}(3)void CountNumber(LINE * &head)本函数的作用是统计字符串链表中的数字个数,在统计完数字个数后,调用menu 方法打印指令菜单。
void CountNumber(LINE * &head){LINE *p=head;int count=0;do{int Len=strlen(p->data);for(int i=0;i<Len;i++)if(p->data[i]>=48 && p->data[i]<=57)count++;}while((p=p->next)!=NULL);printf("文章中数字个数: %d \n",count);printf("******************************\n");printf("\n");menu();}(4)void CountLetter(LINE * &head)本函数的作用是统计整个字符串链表中英文字母的个数。
遍历完成之后会调用menu方法打印指令菜单。
void CountLetter(LINE * &head){LINE *p=head;int count=0;do{int Len=strlen(p->data); //计算当前data里的数据元素个数for(int i=0;i<Len;i++)if((p->data[i]>='a'&&p->data[i]<='z')||(p->data[i]>='A'&&p->da ta[i]<='Z'))count++; //计算字母数}while((p=p->next)!=NULL); //遍历链表printf("文章中英文字母个数: %d \n", count); //返回文章里printf("******************************\n");printf("\n");menu();}(5)void FindString(LINE * &head)用户调用这个方法查找相应字符串的出现在文章中的次数。