数据结构课程设计报告

发布 2022-10-05 19:22:28 阅读 1919

上海应用技术学院课程设计报告。

课程名称数据结构课程设计。

设计题目文章编辑+ +纸牌游戏 +各种排序。

院系计算机科学与信息工程学院专业网络工程物联网班级 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 月。课程设计成绩评定表。一 数据结构课程设计目标。二 问题描述。三 需求分析。四 概要设计。五 详细设计。六 软件说明书 给出软件如何使用,使用...