上海应用技术学院课程设计报告。
课程名称数据结构课程设计。
设计题目文章编辑+ +纸牌游戏 +各种排序。
院系计算机科学与信息工程学院专业网络工程物联网班级 12104341
一。 目的与要求。
1. 巩固和加深对常见数据结构的理解和掌握。
2. 掌握基于数据结构进行算法设计的基本方法。
3. 掌握用高级语言实现算法的基本技能。
4. 掌握书写程序设计说明文档的能力。
5. 提高运用数据结构知识及高级语言解决非数值实际问题的能力。
二。 课程设计内容说明。
项目一文章编辑。
1) 对设计任务内容的概述
输入一页文字,程序可以统计出文字、数字、空格的个数。
静态存储一页文章,每行最多不超过80个字符,共n行;要求(1)分别统计出其中英文字母数和空格数及整篇文章总字数;(2)统计某一字符串在文章**现的次数,并输出该次数;(3)删除某一子串,并将后面的字符前移。
2) 需求分析或功能描述。
存储结构使用线性表,分别用几个子函数实现相应的功能;
输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号。
输出形式:(1)分行输出用户输入的各行字符;(2)分4行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数"(3)输出删除某一字符串后的文章;
3) 概要设计或程序流程图。
文章编辑主流程图。
4) 详细设计或源**说明。
[1]统计模块。
统计模块包括统计全部字母数,统计数字个数,统计空格个数,以及统计文章总字数,这四个部分的实现算法大体相同,四者的关系是:全部字母数+数字个数+空格个数=文章总字数,也就是说可以在统计出其中三者的前提下计算出第四个的数量。
另外一个重要的统计功能是统计某一字符串在整篇文章**现的次数,这个需要用到串的模式匹配算法来实现。
/文本空格统计。
int count_space(line* &head)
line *p=head;
int asc_space=32;
int count=0;
int i;
int len;
dowhile((p=p->next)!=null);
return count;
/统计数字个数
int count_num(line * head)
line *p=head;
int count=0;
int len;
int i;
dowhile((p=p->next)!=null);
return count;
/统计文章的总字数。
int count_all_word(line * head)
line *p=head;
int count=0;
dowhile((p=p->next)!=null);
return count;
/统计字母数。
int count_letter(line * head)
line *p=head;
int count=0;
int len;
int i;
dowhile((p=p->next)!=null);
return count;
[2]删除模块。
删除模块的算法思想类同统计字符串的算法思想,由于采用了链表的存储结构,使得删除算法的时间复杂度大大减少。当需要删除多个相同的字符串时,、可以循环使用删除单个字符串的部分,达到删除多个相同字符串的目的。
void del_string_word(char *s,char *sch)
char *p=strstr(s,sch);
char tmp[80];
int len=strlen(s);
int k,kk;
int i=len-strlen(p);
int j=i+strlen(sch);
int count=0;
for(k=0; k tmp[count++]s[k];
for(kk=j; kk tmp[count++]s[kk];
tmp[count]='0';
strcpy(s,tmp);
void del_string(line * head,char *sch)//删除指定的字符串。
line *p=head;
dowhile((p=p->next)!=null);
[3]查找模块。
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++;如果没查找到,重新进行第一步。
int find_word(line * head,char *str)
line *p=head;
int count=0;
int len1=0;
int len2=strlen(str);
int i,j,k;do
while((p=p->next)!=null);
return count;
5) 程序的输入与输出描述。
输入部分是由void create(line * head)函数实现。利用尾插法建立链表,操作比较方便。由于文章里可以输入各种常用字符,所以不能使用常规的字符来表示输入结束,通过查询ascii可知,ctrl+p 为特殊字符,可以用来表示字符串的结束。
程序的输出部分是由void outputtxt(line * head)函数实现。其实就是单链表的输出。
6) 调试分析或程序测试。
图2 文章编辑主界面图3 新建文本。
图4 文本统计图5 制定字符串统计。
图6 指定字符串删除。
7) 尚未解决的问题或改进方向。
由于对c语言文件操作不是很熟悉,容易出错。程序没有实现文件的保存于读写功能。改进方向,打开程序时,自动检测文件是否存在,若存在,则调用原来的文件进行操作,若不存在,则新建一个文件,并进行操作。
项目二纸牌游戏。
1) 对设计任务内容的概述。
任务:编号为1-52张牌,正面向上,从第2张开始,以2为基数,是2的。
倍数的牌翻一次,直到最后一张牌;然后,从第3张开始,以3为基数,是
3的倍数的牌翻一次,直到最后一张牌;然后…从第4张开始,以4为基数,是4的倍数的牌翻一次, 直到最后一张牌;..再依次5的倍数的牌翻一次,6的,7的直到以52为基数的翻过,输出:这时正面向上的牌有哪些?
2) 需求分析或功能描述。
首先要定义数据类型,定义一个结构体, 包含扑克牌的编号,标记和指。
向下一张扑克牌的指针。
然后,根据纸牌的数量k=52创建一个单链表,再调用overcard()函数,进行单次翻转,即对指定的基数进行倍数翻转。
调用more_over()函数进行多次翻转,输入a,b两个基数,从a基数开始。
进行单次翻转,然后a递增,最后到b。
最后根据count%2的值是否为0判断牌的正面朝上,还是反面朝上。count%2
为0,表明这张牌翻了偶数次,既是正面朝上。
3) 概要设计或程序流程图。
4) 详细设计或源**说明。
1] 结构体,用来存储每张牌的序号以及正面朝向等信息。
typedef struct node
int data; /牌的编号。
int count; /记录翻牌的次数。
struct node *next;
linklist;
2] 链表创建函数,创建单链表,并对牌的信息初始化,把每一个节点的count
置为0,表示正面向上。
linklist *creat(int k) /创建链表函数。
linklist *head,*p,*q;
int i=0;
head=(linklist *)malloc(sizeof(linklist));申请头结点空间。
p=head; /指针p指向头结点。
q=(linklist *)malloc(sizeof(linklist));申请结点空间。
while(i
p->next=null;
数据结构课程设计报告
东莞理工学院城市学院。题目 二叉排序树 专业 计算机科学与技术 本 年级 2010级计算机科学与技术专业 1 班。个人姓名 何振江。指导教师 张娟老师 时间 2010至2011第二学期第18周 地点 实验楼615机房 东莞理工学院城市学院计算机与信息科学系制。2011年 6月。实习报告的内容。一 问...
数据结构课程设计报告
设计一个校园导游程序,为来访的客人提供信息查询服务。1 设计学校的校园平面图。选取若干个有代表性的景点抽象成一个无向带权图 无向网 以图中顶点表示校内各景点,边上的权值表示两景点之间的距离。2 存放景点代号 名称 简介等信息供用户查询。3 为来访客人提供图中任意景点相关信息的查询。4 为来访客人提供...
数据结构课程设计报告
河北科技大学。课程设计报告。学生姓名学号。专业班级。课程名称数据结构。学年学期 2 012 2 013学年第 2 学期指导教师 黄春茹。2 0 13年 6 月。课程设计成绩评定表。一 数据结构课程设计目标。二 问题描述。三 需求分析。四 概要设计。五 详细设计。六 软件说明书 给出软件如何使用,使用...