数据结构课程设计提交

2024-07-17

数据结构课程设计提交(共9篇)

篇1:数据结构课程设计提交

2018《景观系统设计》课程

最终作业提交清单:

1、课程设计报告(严格按学院要求的格式:提纲、封面、版式)

(文本打印A4稿+光盘一份)

课程过程记录: ①概念设计计划书

(附录部分:A3硫酸纸手绘构思草图、概念配置图等发展草图10-20张)

②概念模型(不限)

③1:700的平面图及推敲过程图

3、作业光盘(每组一张):

包括6个文件夹:

①展览图版文件夹(PSD、JPG各一份)

②调研&概念设计计划书文件夹(PPT一份)③景观扩初设计文本文件夹(PSD、JPG各一份)(同设计报告册A3格式)

④电子模型文件夹(应用SketchUp/Lumion/Grasshopper制作的电脑 模型文件)

⑤平面图、效果图文件夹(平面图CAD文件、彩色平面图JPG+PSD、效果图JPG+PSD文件)

⑥工作模型&工作照片文件夹(模型照片、小组讨论、工作过程、模 型制作照片、展览现场、10-15张)

(PSD文件150dpi以上,JPG压缩比10以上)

4、缩比模型(按1:700制作,底板宽度统一为 mm)(材料:桦木板、PVC、亚克力、模型板、奥松板、镜面板、模型卡、雪芙板、ABS)(加分项):可选择1-2个节点制作节点模型

5、展览图版

版式按照网格式编排

(图版模数: 700X1200/张

3张)内容如下:

1)、泡泡图

(1-3张)

2)、构思草图(1-3张)

3)、形式符号(1-3张)

4)、图示图解(1-3张)

5)、平面图(需有1张总平面图作为一张图版)

6)、剖立面图(1-3张/版面上可放3-4个剖面)

7)、分析图(3-5张/版面上可放多张分析图)

8)、效果图(多张/效果图按网格式编排)

2、

篇2:数据结构课程设计提交

1. 开题报告(每个课程小组一份,电子版和纸质(A4纸)两种);

2. 结题报告(每人一份,电子版和纸质(A4纸)两种);

3. 源程序以所有相关的文件(如系统中用到的图片、视频等)和

已经生成的可执行程序;

注:(1)每个班由学习委员收齐本班的上述所有资料之后,提交给老师,请每位同学自觉尽快的在课程设计实验完毕之后提交上述资料。

(2)班级负责人收取电子版资料时按照以下目录结构存放:

班级/课程设计题目(小组成员学号)

如:09020301/网络考试系统(032376, 032383)

跨班的小组成员请注明所在班级,如

篇3:数据结构课程设计提交

数据结构课程是计信学院的专业基础课, 数据结构的上机实践和课程设计是一个重要的教学环节, 学生的实验、课程设计等都是以电子文档的形式提交, 由学生发Email或通过FTP提交给教师, 虽然这种方法比传统的纸质作业方便了很多, 但是教师要不断的打开Email的或从FTP服务器上把学生的作业下载到本地机器上修改、评分, 再通过发送Email或FTP的方式将批改的作业情况发送给学生, 这种形式操作起来非常麻烦。针对这种情况, 本文研究并实现了基于.NET的B/S模式作业提交系统。

2 解决问题方案

本系统在Visual Studio.NET的集成开发环境下采用Internet信息服务 (IIS) 管理器作为web服务器;采用ASP.NET技术实现前台界面、ADO.NET实现数据访问技术, C#语言编写后台功能代码, 采用SQLServer2005进行后台数据库设计与开发;同时采用了B/S模式的三层架构设计 (即用户层、业务层和数据层) 便于扩充应用和设计维护。

3 系统功能设计

本系统包括管理员模块、教师模块、学生模块三个模块。管理员模块则是对学生、老师的用户管理, 课程管理以及权限管理;教师模块主要完成作业管理、修改个人信息;学生模块主要完成作业管理和修改个人信息。下图是详细的作业提交系统功能模块图。

3.1 作业提交系统功能模块图

3.1 教师模块

3.1.1 发布作业

该模块主要完成教师对设计好的作业进行上传。教师选择不同的班级, 根据相应的教学进度将已经设计好的作业上传到服务器上进行作业发布, 同时设定作业提交期限, 超过期限的作业不能提交。学生接到作业通知, 上网下载作业。

3.1.2 批改作业

学生提交作业后, 教师就进入批改作业页面查看从数据库中提取的不同班级的学生的作业, 然后开始评分。当进入某个班级作业列表中, 老师能够直接在线打开学生的作业, 进行批改, 如果要对作业进行修改, 则需先下载后修改。

3.1.3 作业统计

根据作业提交人数记录表, 教师可以查询到每次作业学生提交的人数, 了解学生作业完成情况, 同时催促没有交作业的人在期限内交作业。同时在此页面显示教师批改情况, 页面以表格的形式可显示所有学生的成绩, 根据班级显示每个学生的汇总成绩, 并将学生成绩导出为excel表, 方便教师统计平时成绩。

3.1.4 添加作业

教师可以预先制作每章的作业, 到讲到该章的时候, 直接进行作业发布。

3.1.5 删除作业

作业过期后老师可以将早期所发布的作业删除, 以便于下次布置新的作业。

3.2. 学生模块

3.2.1 上传作业

这是作业提交系统的主要功能模块, 主要完成学生在规定时间内的电子作业的上件功能。当学生超过了提交作业的最后截止时间就不能打开作业。提交作业后, 学生的作业不能修改, 如果要修改作业则需要在本地机上进行修改, 然后再将原来提交的作业删除, 才可以再次提交, 以防教师收到某个学生的多个作业, 增加教师的工作量。学生上传作业的时候学生通过下拉菜单选择上传作业的教师, 然后单击“浏览”按钮, 选择本地硬盘上的作业文件, 文件名由“学生学号后两位+学生姓名+作业编号”组成, 再单击“上传”按钮, 便可以将作业进行上传到服务器上, 如果上传成功, 则弹出提示对话框显示学生作业上传成功, 如果上传失败, 则提示学生, 然后上传失败, 请再次上传。在系统中使用文件上传控件File Up Load实现学生的作业提交功能。

3.2.2 查看作业

学生必须成功登录到网站的前台主页, 查看到近期教师作业发布情况, 否则系统提示你没有权限查看作业的相关情况, 同时为了避免时间过长作业有可能被删除, 因此学生需要及时浏览网站查看教师作业发布情况以便下载老师最新布置的作业。

3.2.3 查看成绩

根据作业成绩记录, 学生可以查看以前提交成功的数据结构作业和教师的评阅的成绩。同时可以查看该作业的参考答案, 以便对作业进行修改。

3.2.4 删除作业

删除学生以往提交成功并被成功批阅的作业记录, 同时可以删除过多的同一类文件记录或提交错误的文件, 以免重复提交作业。

3.3 管理员模块

此模块主要实现对教师、学生、班级的添加、删除、修改等功能。其中学生可以通过注册页面填写个人信息将学生添加到数据库中, 也可以通过管理员批量添加学生, 而教师和班级则通过管理员批量添加, 同时教师可以从数据库中选择自己所教课程的班级并添加到自己列表下面。

3.3.1. 学生注册模块

管理员通过授权, 学生通过注册后必须登录才能使用作业提交系统, 系统则通过登录者的身份给予不同的权限和功能,

该功能主要完成学生注册信息, 学生可以进行个人信息的注册, 其中年级和班级不用学生自己输入, 而是采用下拉列表框控件Drop Down List进行设计, 输入学号的时候, 要和数据库中的该年级该班学生的所有学号进行比较, 确认没有同学号的学生, 则进行注册, 否则提示已经注册过, 返回注册页面, 要求重新填写和提交, 其中密码以星号的形式显示, 要求输入密码时候, 需要密码隐藏模式, 要对密码进行再次验证。E-mail要以正确形式填写, 否则系统将提示错误。注册页上的每一项必须填写, 信息不能为空, 否则系统将提示错误。

3.3.2 登录模块

该模块完成学生, 教师, 管理员的登录, 根据下拉框先选择身份类别, 系统通过登录者的身份分配不同的权限和功能, 然后输入相应的用户名和密码, 与数据库中相应的数据表进行比对, 经过验证成功则转入相应的学生、教师和管理员的前台主页面, 同时使用session变量存放需要的信息;否则提示提示用户名或密码不正确, 等待用户重新输入。

4 结束语

本文分析和实现了作业提交子系统的基本模块和功能, 并且此子系统已经应用于数据结构教学网站中并投入使用, 从功能和性能对平台进行了测试, 系统稳定, 执行速度快, 此系统方便, 只要有Internet, 学生能随时随地提交作业和教师能随时随地批改作业, 减轻教师负担, 提高教师工作效率, 增强教师和学生之间的互动, 因此普遍受到师生的好评。

摘要:将ASP.NET与数据库技术结合, 开发了基于B/S模式的数据结构网站中作业提交子系统, 主要完成了教师作业发布、作业批改和学生上传作业、查看成绩等功能, 从而减轻教师批改作业的工作量, 方便学生作业提交, 增强师生互动性, 提高教学质量。

关键词:ASP.NET,B/S模式,作业发布,作业提交

参考文献

[1]柴艳宾.基于B/S的机房作业提交系统研究现[J].计算机时代, 2013, (5) :28-30.

[2]朱贵良, 宋庆涛基于Web的网上作业处理系统的设计与实现[J].计算机工程, 2002, 28 (6) :251-253.

[3]邵雪.计算机网络课程网站的设计与实现[D].中国硕士学位论文, 2012:21-22.

[4]Daniel Cazzulino (.王晓娜译) .C#Web应用程序入门经典[M].北京:清华大学出版社, 2003:16-24.

篇4:数据结构课程设计提交

关键词:编译原理;网络;作业提交

中图分类号:TP311.52 文献标识码:A 文章编号:1674-7712 (2012) 12-0085-01

一、系统的主要功能分析

《编译原理》课程作业网上提交系统主要为《编译原理》课程提供网上的作业管理功能,主要分为管理员、教师和学生三个部分。

(一)管理员部分的主要功能

1.管理员登录功能:根据管理员权限进入管理员相应的页面。2.公告管理功能:管理员可以对公告进行查看、增加、删除、修改等功能。3.修改密码功能:管理员可以修改密码。4.作业管理功能:实现作业信息的删除、修改、查询的功能。5.教师管理:实现教师信息的增加、删除、修改、查询的功能

(二)教师部分的主要功能

1.教师登录功能:根据教师权限进入教师相应的页面的功能。2.修改个人资料功能:可以修改个人的信息。3.学生管理功能:能够实现学生信息的查看、添加、修改、删除、搜索的功能。4.在线布置作业功能:发布作业信息。5.在线批改作业的功能:在线给出相应的作业的点评和分数

(三)学生部分的主要功能

1.学生登录功能:根据学生权限进入学生相应的页面的功能。2.查看公告的功能:可以查看公告信息。3.修改个人资料的功能:修改个人信息。4.作业信息列表:学生查看、下载老师发布的作业题目。5.上传作业:上传做好的作业。1.4管理员信息表和作业信息表

二、教师模块的设计与实现

(一)教师修改个人信息模块的设计与实现

1.教师修改个人信息的功能描述:功能描述:本模块主要实现的功能是教师能够对自己的信息进行修改。2.教师对自己的信息进行修改的输入、输出:输入:更改的教师的基本信息。输出:个人信息修改成功或者失败的页面。

(二)教师布置作业模块的设计与实现

1.教师布置作业模块的功能设计:功能设计:用户登录确定为教师后,teacherlist.do对数据库进行查询,将查询值绑定给request转发到显示界面上。2.教师布置作业模块的输入输出设计:输入:作业标题、出题教师、作业上传截止日期、作业内容等。输出:作业发布成功或者失败的页面。3.教师批改作业模块的功能描述:功能设计:教师点击批改链接,查询数据库,显示该题答案和题号,做出批改,保存到数据库的correst表中。4.教师批改作业模块的输入输出设计:输入:教师批改作业后所给出的评语和分数。输出:成功批改的页面

三、学生模块的设计与实现

(一)学生查看公告和个人信息模块的设计与实现

功能设计:在用户登录后确认为学生后,跳转到answer.do,查询数据库work表,把查询结果显示到页面上。

(二)学生上传作业模块的设计与实现

1.学生上传作业模块的功能描述:功能设计:学生点击做题链接,进行做题,并把做题结果和题号存入到answer表中,通过addwork添加到数据库。

2.学生上传模块的输入输出设计:输入:上传作业。输出:完成作业

四、结语

《编译原理》课程作业网上提交系统是学校信息化教学环境的基础设施之一,是全面实现素质教育的重要手段,是教育技术装备现代化的主要体现和教育现代化的重要标志之一。

参考文献:

[1]孙卫琴,李洪成.Tomcat与Java Web开发技术详解[M].北京:电子工业出版社,2003,6

[2]孙一林,彭波.Java数据库编程实例[M].北京:清华大学出版社,2002,8

[3]飞思科技产品研发中心.JSP应用开发详解[M].北京:电子工业出版社,2003,9

[4]赛奎春.JSP工程应用与项目实践[M].北京:机械工业出版社,2002,8

[5]Kven Genet.SQL Server database development Case Study Analysis.Tsinghua University Press,2006,12

[6]Steven Nath.SQL SERVER 2000 Development and Application,Mechanical Industry Press,July,2003

篇5:3.微课程竞赛申报提交指南

微课程竞赛申报提交指南

一、激活账号

参赛教师向省管理员提交报名表后,由省管理员负责添加用户账号及创建微课程。创建完成后由系统自动发送激活邮件至注册邮箱,教师登录邮箱按邮件的引导,激活账户。

二、登录系统

参赛教师打开微课程申报提交工具,进入登录页面,如图所示:

输入报名表上的邮箱及密码,并按照系统的提示输入验证码,点击【登录】后进入系统。

三、完善个人信息

首次登陆的用户首先要求完善个人基本信息,见下图。

—1—

点击【确定】保存个人基本信息后,进入头像信息页面,用户需要上传一张小于4MB的照片作为个人头像,并可拖动黄色的截取框选取所需的头像并保存,如下图。

在“我的首页”,用户可通过点进左侧“基本信息”下的【修改基本信息】,对个人基本信息进行维护,点击“头像信息”进行个人头像的维护。

四、修改个人密码

在“我的首页”,点击左侧的【修改密码】,用户可以进行密码修改。

五、退出

在“我的首页”,点击右上角的【退出】,用户可以退出自己的账户。—2—

退出后系统会自动返回全国高校数学微课程教学设计竞赛申报提交工具页面。

六、提交课程

在“我的首页”界面,已经有省管理员创建的课程,假设课程名称为“高等数学”,点击【高等数学】

进入上传课程界面

—3—

在“教学设计”中,点击【添加】,首次使用上传功能,系统会提示安装资源上传插件,点击【单击此处即可安装】按钮,并将此插件保存至本地后,运行下载的“siverlight.exe”

点击【立即安装】按钮,完成后,系统会提示“安装成功”,刷新页面,即可上传文件。

在上传资源页面,填写相关信息后点击【确定】。

—4—

点击【选择文件】按钮,如图所示,“注意事项”处会提示您要上传的资源格式,请按照要求上传

在本地选择相应文件上传后,系统会提示上传成功。“当前状态”处提示“文件上传完毕!”点击【关闭】按钮,完成资源上传,系统自动跳转至基本资源的页面。

—5—

刷新后,显示“上传成功”。后台会文件进行处理,视文件大小需等待几分钟。

后台处理后可直接点击“教学设计”浏览。

用同样方式可以上传微课程视频、多媒体教学课件和其他教学辅助材料。

篇6:新建校本课程类成果需提交的材料

需提交的资料

日期:2015-03-11 09:15:03 阅读次数:116次 新闻来源:商丘市第一中学

研究性学习成果类需提交的资料:

(1)申报教师填写《商丘市综合实践活动优秀成果申报表》;

(2)学校综合实践活动课程规划总体方案 ;

(3)一学年综合实践活动课程规划;

(4)一学年综合实践活动教案;(含申报成果的教案)

(5)学生确定的研究主题;(课题题目、背景、目的意义)

(6)制定的研究方案;(课题题目、研究的内容、步骤、方法、时间、条件、分工等);

(7)实施的研究过程;(查阅资料、调查走访、讨论分析等活动的图文、视频资料);(8)研究成果;(论文、图表、模型、多媒体演示、调查报告、实验报告等);(9)教师撰写的经验总结性材料;

(10)学校综合实践活动管理办公室对教师指导学生研究性学习的效果的评价意见,以及获奖情况评价认定。

社区服务与社会实践类成果需提交的材料:

(1)申报教师填写《商丘市综合实践活动优秀成果申报表》;

(2)学校综合实践活动课程规划总体方案 ;

(3)一学年综合实践活动课程规划;

(4)一学年综合实践活动教案;

(5)教师指导学生开展活动的方案;(6)组织学生实施活动过程的视频、照片、体验心得等档案 材料;(7)所实践、服务单位的证明材料;(8)学校教师的总结性材料;

(9)学校综合实践活动管理办公室对教师指导学生进行社区服务和社会实践的效果的评价意见,以及获奖情况评价认定。

技术教育类成果需提交的材料:

(1)申报教师填写《商丘市综合实践活动优秀成果申报表》;(2)学校综合实践活动课程规划总体方案;(3)一学年综合实践活动课程规划;(4)一学年综合实践活动教案;(5)教师指导技术教育活动方案;(6)学生作品的构思设计方案;(7)制作或创意作品(图片);

(8)活动过程的视频资料及教师评价意见;(9)申报人撰写的经验总结性材料;

(10)学校综合实践活动管理办公室对教师指导学生综合实践活动的效果评价意见,以及获奖情况评价认定。

校本课程类成果需提交的材料(教学成果不得单独申报,须与教材一同申报):

(1)申报人员填写《商丘市校本课程建设优秀成果申请表(教材成果类)(教学成果类)》;

(2)提交学校校本课程规划方案;(3)教师撰写的校本课程纲要并附学校课程审议委员会审议结果;

(4)文本教材;

(5)校本课程教学活动设计方案;(每周的教学活动次数、教学活动形式、教学活动目标)

(6)学校对课程学习的评价结果;

篇7:数据结构课程设计正文

比较与实现

摘 要:本次课程设计主要研究几种常用查找算法的比较与实现,查找的算法有很多种:静态查找表的顺序表、有序表、索引顺序表等查找结构;动态查找表的二叉排序树、哈希查找等查找结构。本次的课程设计主要研究两种常见的查找算法:顺序查找和折半查找,分析比较它们的时间复杂度,并且在此基础上用C语言对它们进行算法编程、调试和运行。

关键词:C语言;顺序查找;折半查找;时间复杂度。

1 引 言

“数据结构”在计算机科学中是一门综合性的专业基础课,“数据结构”的研究不仅涉及到计算机硬件的研究范围,而且和计算机软件的研究有着密切的关系无论是编译程序还是操作系统,都涉及到数据元素在存储器中的分配问题。在研究信息检索时也必须考虑如何组织数据,一遍查找和存取数据元素更为方便。因此,可以认为“数据结构”是介于数学、计算机硬件和计算机软件三者之间的一门核心课程。

课程设计是我们专业课程知识综合应用的实践训练,是实践性教学的一个重要环节。而数据结构的课程设计,更要求学生在数据结构的逻辑特性和物理表示、数据结构的选择和应用、算法的设计及其实现等方面,加深对课程基本内容的理解。同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。

在日常生活中,人们几乎每天都要进行“查找”工作。例如,在电话号码薄中查阅“某单位”或“某人”的电话号码;在字典中查阅“某个词”的读音和含义等等。而同样地,在各种系统软件和应用软件中,也存在“查找”:如编译程序中符号表、信息处理表中相关信息的查找。所以,“查找”就是在一个含有众多的数据元素(或记录)的查找表中找出某个“特定的”数据元素(或记录)。

【1】在计算机中进行查找的方法也会随数据结构不同而不同。在此,引入“查找表”的概念:同类数据元素构成的集合。所以,这次的课程设计就可以从静态查找表的几种典型的算法来实现对数据元素的查找的算法和操作的实现和比较。

1.1课程设计背景

《数据结构》课程设计作为独立的教学环节,是计算机相关专业集中实践环节系列之一,是学习完《数据结构》课程后进行的一次全面的综合练习。所以需要我们了解并掌握数据结构与算法的设计方法,并且具备初步的独立分析和设计能力,同时要掌握软件开发过程的问题分析、系统设计、程序编码测试等基本方法和技能,提高综合运用所学的理论知识和方法独立分析和解决问题的能力。所以这次课程设计的目的在于:加强学生对C语言的基本知识和技能;加深对数据结构基础理论和基本知识的理解,提高解决实际问题的实践能力;同时帮助调动学生的积极性和能动性,培养学生的自学、动手能力。

1.2课程设计目标

本次课程设计,我准备用不同的两种常见的查找方法:针对顺序查找表中查找方法,如顺序查找、折半查找等。并且通过用这些算法实现对某个“特定的”数据元素(关键字)的查找,分析这些操作的性能:它们各自的时间复杂度、空间复杂度和其它的一些性能,同时记录每种查找方法的优缺点,比较得出它们的查找效率和查找范围。

3 设计概要

2.1 问题描述

对于不同的查找算法,它们各自的时间复杂度和空间复杂度不同,查找的思想和算法也明显不同,所以要分析它们的特点和效率,我们要多方面比较:要比较时间复杂度,我们可以从它们的查找长度侧面比较出来;而它们算法的实现就要熟悉它们的查找思想,熟练应用C语言编写合适的程序。

2.2 设计思路

静态查找表有顺序表和链式表两种表示方法,在这次的课程设计里,我用顺序存储表来表示这两种查找算法的程序。我的设计思路及步骤如下:

(1)熟悉两种算法的编程思想,画出流程图。

(2)先编写两种算法的子程序,再遍写主程序调用它们。

(3)分步调试子程序和主程序,直到不再出现错误,然后运行程序,检查是否和 自己当初的设想一样,一直到结果能让自己满意。(4)比较得出两种查找算法的优缺。

2.3 相关的知识点

(1)C语言表示静态查找表的顺序存储结构 typedef struct { ElemType *elem;

//数据元素存储空间基址,建表时按实际长度分配,0号单元留空

int length;

//表的长度

} SSTable;

4(2)查找算法的衡量指标

查找可能产生“成功”与“不成功”两种结果,但在实际应用的大多数情况下,查找成功的可能性比不成功的可能性大得多,特别是在记录数中n很大时,查找不成功的概率可以忽略不计。当查找不成功的情况不能忽视时,查找算法的平均长度应该是查找成功时的平均查找长度与查找不成功时的平均查找长度之和,平均查找长度为: ASL= picii1n

其中,n为元素的个数; ci是查找第i 个记录需进行的比较次数;pi是查找第i个记录的概率,一般可认为查找每个记录的概率是相等的,即p1=p2=„=pn=1/n。【2】

5 算法分析及程序编写

3.1.顺序表的查找

(1)基本思想

从查找表的一端开始,逐个将记录的关键字值和给定值进行比较,如果某个记录的关键字值和给定值相等,则称查找成功;否则,说明查找表中不存在关键字值为给定值的记录,则称查找失败。(2)顺序查找算法流程图

算法流程图如图3-1所示:

图3-1:顺序查找算法流程图

6(3)顺序查找算法代码如下

int Search_Seq(SSTable *table, ElemType key){

/*在顺序表ST中顺序查找其关键字等于key的数据元素。若找到,则函数值为该元素在表中的位置,否则为零。*/

table->elem[0]=key;

//设置哨兵 int result=0;

// 找不到时,返回0 int i;for(i=table->length;i>=1;i--)

{

//从后往前找

if(table->elem[i]==key)

{

} result=i;

//找到关键字的时候,该元素的位置 break;

}

return result;

//找不到时返回 } <4>顺序查找算法性能分析

对于顺序查找,不论给定值key为何值,查找不成功时和给定值进行比较的关键字个数均为n+1.假设查找成功与不成功的可能性相同,对每个记录的查找概率也相等,则Pi=1/(2n),此时顺序查找的平均查找长度为[3]:

ASL= (ni1ni1)+(1/2)(n+1)

=(3/4)(n+1)

<5>结论

顺序查找的优点是算法简单,且对表的结构没有任何要求。它的缺点是查找效率低,因此,当表中元素个数比较多时,不宜采用顺序查找。

3.2.折半查找

(1)使用折半查找必须具备两个前提条件

a:要求查找表中的记录按关键字有序(假设:从小到大有序)b:只能适用于顺序存储结构

(2)基本思想

先取查找表的中间位置的关键字值与给定关键字值作比较,若它们的值相等,则查找成功;如果给定值比该记录的关键字值大,说明要查找的记录一定在查找表的后半部分,则在查找表的后半部分继续使用折半查找;若给定值比该记录的关键字值小,说明要查找的记录一定在查找表的前半部分,则在查找表的前半部分继续使用折半查找,直到查找成功,或者查找失败。

(3)查找流程图

流程图如图3-2所示:

图3-2:折半查找算法流程图

(4)折半查找算法的代码

int Search_Bin(SSTable *table, ElemType key){

/*在有序表ST中折半查找其关键字等于key的数据元素。若找到,则函数值为该元素在表中的位置,否则为0.*/

int low=1;

int high=table->length;

//置区间初值

int result=0;// 找不到时,返回0 while(low <= high)

{

} return result;int mid=(low+high)/2;

//中间的数据元素 if(table->elem[mid]==key){ result=mid;break;}

//找到待查元素 else if(keyelem[mid]){ high=mid-1;}

//继续在前半区间进行查找 else { low=mid+1;}

//继续在后半区间进行查找

}[5]

(5)折半查找算法性能分析

在折半查找的过程中,每经过一次比较,查找范围都要缩小一半,所以折半查找的最大查找长度为

MSL=[log2 n]+1 当n足够大时,可近似的表示为log2(n)。(6)结论

折半查找要求查找表按关键字有序,而排序是一种很费时的运算;另外,折半查找要求表是顺序存储的,为保持表的有序性,在进行插入和删除操作时,都必须移动大量记录。因此,折半查找的高查找效率是以牺牲排序为代价的,它特别适合于一经建立就很少移动、而又经常需要查找的线性表。

可见在查找速度上,折半查找比顺序查找速度要快的多,这是它的主要优点[4]。

10 测试分析

1.输入元素有误

(1):若输入的元素个数不合理,元素个数少于n,这种输入造成的的结果是系统一直等待元素的输入,即得不到结果。如图4-1所示:

图4-1:输入元素个数少时的运行情况

(2)若输入元素个数大于n时,系统将从第一个元素起,自动选取前n个元素作为有效元素,进行程序的后续运行。这种情况下的结果如图4-2所示:

图4-2:输入元素个数多时的运行情况

11

2.查找失败

这种情况是指在n个元素中没有与关键字相同的元素存在,所以程序运行的结果是查找失败。运行结果如图4-3所示:

图4-3:查找失败时的运行情况

3.查找成功

若查找成功,即元素输入无误,且有关键字存在的情况,这个时候的运行结果如图4-4所示[5]:

图4-4:查找成功时的运行情况

12 总结和体会

5.1 课程设计总结

“书到用时方恨少”。在这次课程设计,我感触最深的当属查阅大量的设计资料了,为了让自己的设计更加完善,查阅这方面的设计资料是十分必要的,看着那么大叠的书籍、资料摆在自己的面前,有些时候还要上网查阅相关知识点,并且还要整理出有用的知识点,这对于我来说,是在是个不小的挑战。所以,以后一定要多看自己专业方面的书籍,增长自己的知识。而且,写程序是一件十分需要耐心的活,一个不小心,后果就可能是几个小时的思考和调试,幸好这次的课题我并不陌生,所以,并没有自己想象中的艰难。但是,用的时间和精力却绝对也不少。

5.2 心得与体会

这次课程设计,使我对《数据结构》这门课程有了更深入的了解。《数据结构》是一门实践性较强的课程,为了学好这门课程,必须在掌握理论知识的同时,加强上机实践。一个人的力量是有限的,要想把课程设计做的更好,就要学会参考一定的资料,吸取别人的经验,让自己和别人的思想有机的结合起来,得出属于你自己的灵感。

在本课程设计中,我明白了理论与实际应用相结合的重要性,并提高了自己组织数据及编写大型程序的能力。培养了基本的、良好的程序设计技能以及合作能力。这次课程设计同样提高了我的综合运用所学知识的能力。程序的编写需要有耐心,有些事情看起来很复杂,但问题需要一点一点去解决,分析问题,把问题一个一个划分,划分成小块以后就逐个去解决。再总体解决大的问题。这样做起来不仅有条理也使问题得到了轻松的解决。

通过这两周的课程设计,我认识到数据结构是一门比较难的课程。需要多花时间上机练习。这次的程序训练培养了我实际分析问题、编程和动手能力,使我掌握了程序设计的基本技能,提高了我适应实际,实践编程的能力。

13

参考文献:

[1]严蔚敏,吴伟民.《数据结构:C语言版》 清华大学出版社,2012.5 [2]Mark Allen Weiss.数据结构与算法分析——C语言描述(英文版第二版).北京:人民邮电出版社,2005 [3]李峰,谢中科.C语言程序设计.上海:复旦大学出版社,2011 [4]Baloukas, C., Risco-Martin, J.L., Atienza, D., et al.Optimization methodology of dynamic data structures based on genetic algorithms for multimedia embedded systems[J].Journal of Systems and Software, 2009, 82(4): 590-602.[5]李春葆,尹为民.数据结构教程上机指导(第三版).北京:清华大学出版社,2008

14

附录:程序源代码:

#include #include #include

using namespace std;typedef int ElemType;

//用C语言定义顺序存储结构

typedef struct {

ElemType *elem;

//数据元素存储空间基址,建表时按实际长度分配,0号单元留空

int length;

//表的长度 } SSTable;

void Create(SSTable *table, int length);

// 构建顺序表

void Destroy(SSTable *table);int Search_Seq(SSTable *table, ElemType key);

void Traverse(SSTable *table, void(*visit)(ElemType elem));

void Create(SSTable **table, int length){

// 构建顺序表

SSTable *t =(SSTable*)malloc(sizeof(SSTable));

15 t->elem=(ElemType*)malloc(sizeof(ElemType)*(length+1));t->length=length;*table=t;} void FillTable(SSTable *table){

// 无序表的输入

ElemType *t=table->elem;for(int i=0;ilength;i++){

t++;

scanf(“%d”, t);

getchar();} } void Destroy(SSTable *table){

//销毁表

free(table->elem);free(table);} void PrintTable(SSTable *table){

// 打印查找表中的元素

int i;ElemType *t=table->elem;

16 for(i=0;ilength;i++){ t++;printf(“%d ”, *t);

} } //顺序(哨兵)查找算法

int Search_Seq(SSTable *table, ElemType key){

/*在顺序表ST中顺序查找其关键字等于key的数据元素。若找到,则函数值为该元素在表中的位置,否则为零。*/

table->elem[0]=key;

//设置哨兵 int result=0;

// 找不到时,返回0 int i;for(i=table->length;i>=1;i--)

{

//从后往前找

if(table->elem[i]==key)

} {

} result=i;

//找到关键字的时候,该元素的位置 break;

return result;

//找不到时返回 }

17

void Sort(SSTable *table){

// 排序算法

int i, j;ElemType temp;

for(i=table->length;i>=1;i--)

// 从前往后找 {

for(j=1;j

}

int Search_Bin(SSTable *table, ElemType key){ /*在有序表ST中折半查找其关键字等于key的数据元素。若找到,则函数值为该元

} {

} if(table->elem[j]>table->elem[j+1]){

//从小到大排列

} temp=table->elem[j];table->elem[j]=table->elem[j+1];//元素后移 table->elem[j+1]=temp;素在表中的位置,否则为0.*/

int low=1;

18

} int high=table->length;

//置区间初值

int result=0;// 找不到时,返回0 while(low <= high){

} return result;int mid=(low+high)/2;

//中间的数据元素 if(table->elem[mid]==key){ result=mid;break;}

//找到待查元素 else if(keyelem[mid]){ high=mid-1;}

//继续在前半区间进行查找 else { low=mid+1;}

//继续在后半区间进行查找

// 主函数

19 int main(int argc, char* argv[]){

SSTable *table;

int r;

//元素的位置 int n;ElemType key;printf(“输入 n:”);scanf(“%d”,&n);

Create(&table, n);//建立表

cout<<“请输入”<

printf(“您输入的 %d 个值是:n”,n);

PrintTable(table);//打印无序表 cout<

printf(“顺序法查找运行结果如下:n ”);Search_Seq(table,key);//顺序(哨兵)查找算法 r=Search_Seq(table,key);

if(r>0)

printf(“ 关键字 %d 在表中的位置是: %dn”,key, r);

else

printf(“查找失败,表中无此数据。n”);

20 Sort(table);//对无序表进行排序

printf(“数据排序后的顺序如下:n ”);PrintTable(table);//打印有序表 printf(“n”);

printf(“折半查找法运行结果如下:n ”);

r=Search_Bin(table,key);//折半查找算法 if(r>0)printf(“ 关键字 %d 在表中的位置是: %dn”,key, r);

else

{

篇8:结构化方法分析作业提交系统

1、结构化分析概述

用结构化分析表述系统的功能采取的是自顶向下、逐步求精、逐层分解的策略, 具体来说, 它是将整个软件系统的功能进行分解, 分成若干个子功能, 然后对这些子功能进行分析, 如果子功能仍然比较复杂, 可以接着分解子功能, 一直到开发软件的人们能清楚理解为止。结构化分析方法一般使用一些容易阅读和明白的图形符号等工具来描述系统需求, 建立系统模型。当前, 我们主要使用数据流图和数据字典来对系统进行结构化分析。

2、结构化分析作业提交系统

本文以开发衡水学院《软件工程》这门课程的作业提交系统为例, 通过数据流图和数据字典来对系统功能进行描述。作业提交系统的功能主要包括:

(1) 接受学生提交的作业, 并弹出一个提示对话框显示学生的作业是否提交成功。如果显示的信息是学生提交作业失败, 则允许学生重新提交, 直到返回的提示信息是学生已经成功提交了作业。

(2) 根据作业成绩记录, 学生可以查看本课程以往历次提交的作业成绩。

(3) 根据作业参考答案记录, 学生可以查看本课程以往历次作业的参考答案。

(4) 接受教师提交的布置作业的附件或录入的公告信息。

(5) 根据作业提交人数记录表, 教师可以查询到每次作业学生提交的人数以此来了解学生完成作业的情况。

(6) 对学生成功提交的作业, 教师进行批阅后给出作业成绩。然后把作业参考答案公布出来, 以供学生参考并及时改正作业中的错误。

图1为采用结构化分析方法画出的作业提交系统的顶层数据流图。

图2为作业提交系统的0层图, 它说明系统可以进一步分成7个子系统。

画出系统数据流图后, 可以用数据字典对数据流图中的各个数据流、数据存储、数据项以及加工进行详细描述和具体定义。举例来说:

(1) 数据流条目例子:数据流的名称:作业。简述:学生登录作业提交系统时上传的作业文件。数据流的来源:08计本学生。数据流的去向:加工1"提交作业"。数据流的组成:学生学号+学生姓名+作业内容。数据流通量:61份/每次。

(2) 数据存储条目例子:数据存储名称:作业成绩记录。简述:作业提交成功的学生每次的作业成绩。流入的数据流:来源是加工2"批阅作业"。流出的数据流:去向是加工5"作业成绩统计"。组织方式:索引文件, 以学生的学号为关键字建立索引。查询要求:要求能马上查询。

(3) 数据项条目例子:数据项名称:学生学号。简述:登录作业提交系统的学生学号。类型:字符串。长度:12。取值范围及其含义:第1~4位表示年级代号, 5位表示学制, 6~7位表示院系代码, 8~9位表示专业代码。10位表示班, 11~12位表示顺序号。

(4) 加工条目例子:加工名:提交作业。编号:1。简述:确定学生作业提交是否成功。激发条件:学生上传作业文件, 按提交按钮。输入:学生提交的作业。输出:提交成功的作业和作业提交提示信息。加工逻辑:用判定树描述。如图3所示。

3、结束语

结构化分析作业提交系统功能是整个作业提交系统开发中至关重要的一步。本文利用建模工具visio画出了系统部分数据流图, 利用数据字典对数据流图中的某些数据流、数据存储、数据项和加工进行了具体描述, 为作业提交系统的最终实现提供了有力依据。

摘要:本文利用结构化分析方法对作业提交系统的功能进行了详细的介绍。为后续开发作业提交系统提供了保证。

关键词:作业提交系统,数据流图,数据字典

参考文献

[1]王慧芳, 毕建权.软件工程[M].浙江:浙江大学出版社, 2006.

[2]寇小文.远程作业提交系统的设计与实现[J].怀化学院学报, 2009, 28 (4) :156-57.

篇9:数据结构课程设计题目

1.排序算法比较

利用随机函数产生30000个随机整数,利用插入排序、起泡排序、选择排序、快速排序、堆排序、归并排序等排序方法进行排序,并且(1)统计每一种排序上机所花费的时间。

(2)统计在完全正序,完全逆序情况下记录的比较次数和移动次数。(3)比较的指标为关键字的比较次数和记录的移动次数(一次记录交换计为3次移动)。

(4)对结果作简单分析,包括对各组数据得出结果波动大小的解释。2.图的深度遍历

对任意给定的图(顶点数和边数自定),建立它的邻接表并输出,然后利用堆栈的五种基本运算(清空堆栈、压栈、弹出、取栈顶元素、判栈空)实现图的深度优先搜索遍历。画出搜索顺序示意图。3.图的广度遍历

对任意给定的图(顶点数和边数自定),建立它的邻接表并输出,然后利用队列的五种基本运算(置空队列、进队、出队、取队头元素、判队空)实现图的广度优先搜索遍历。画出搜索顺序示意图。4.二叉树的遍历

对任意给定的二叉树(顶点数自定)建立它的二叉链表存贮结构,并利用栈的五种基本运算(置空栈、进栈、出栈、取栈顶元素、判栈空)实现二叉树的先序、中序、后序三种遍历,输出三种遍历的结果。画出搜索顺序示意图。5.链表操作

利用链表的插入运算建立线性链表,然后利用链表的查找、删除、计数、输出等运算反复实现链表的这些操作(插入、删除、查找、计数、输出单独写成函数的形式),并能在屏幕上输出操作前后的结果。画出搜索顺序示意图。6.一元稀疏多项式简单计数器(1)输入并建立多项式

(2)输出多项式,输出形式为整数序列:n,c1,e1,c2,e2……cn,en,其中n是多项式的项数,ci,ei分别为第i项的系数和指数。序列按指数降序排列。(3)多项式a和b相加,建立多项式a+b,输出相加的多项式。(4)多项式a和b相减,建立多项式a-b,输出相减的多项式。用带头结点的单链表存储多项式。测试数据:

(1)(2x+5x8-3.1x11)+(7-5x8+11x9)(2)(6x-3-x+4.4x2-1.2x9)-(-6x-3+5.4x2+7.8x15)(3)(x+x2+x3)+0(4)(x+x3)-(-x-x-3)7.实现两个链表的合并 基本功能要求:(1)建立两个链表A和B,链表元素个数分别为m和n个。

(2)假设元素分别为(x1,x2,…xm),和(y1,y2, …yn)。把它们合并成一个线性表C,使得:

当m>=n时,C=x1,y1,x2,y2,…xn,yn,…,xm 当n>m时,C=y1,x1,y2,x2,…ym,xm,…,yn 输出线性表C:

(1)用直接插入排序法对C进行升序排序,生成链表D,并输出链表D。测试数据:

(1)A表(30,41,15,12,56,80)

B表(23,56,78,23,12,33,79,90,55)

(2)A表(30,41,15,12,56,80,23,12,34)B表(23,56,78,23,12)8.哈夫曼编码的实现与应用

(1)从文件中读入任意一篇英文短文(至少含3000个字符,文件为ASCII编码的文本文件)

(2)统计不同字符在文章中出现的频率(空格、换行、标点等也按字符处理)(3)根据字符频率构造哈夫曼树,并给出每个字符的哈夫曼编码。

(4)用哈夫曼编码来存储文件,并和输入文本文件大小进行比较,计算文件压缩率

(5)根据相应哈夫曼编码,对编码后的文件进行解码,恢复成ASCII编码的英文短文后输出。

分析及设计步骤(供参考)

1.分析问题,给出数学模型,设计相应的数据结构。

1)分析问题特点,用数学表达式或其它形式描述其数学模型。2)选择能够体现问题本身特点的一种或几种逻辑结构。

3)依据逻辑结构和问题特点,设计并选择相应的存储结构(顺序存储结构和链式存储结构对应的算法实现有区别)。

2.算法设计

1)确定所需模块:对于复杂的程序设计,要充分利用模块化程序设计方法和面向对象思想,自顶向下,逐步细化。

2)各子模块功能描述:给出主要模块的算法描述,用流程图或伪代码表示。3)模块之间的调用关系:给出算法各模块之间的关系图示。3.上机实现程序

为提高工作效率,充分利用上机调试时间,在上机之前应列出程序清单。

4.用有代表性的各种测试数据去验证算法及程序的正确性

5.算法分析及优化

经过上机调试,源程序运行正确,并且实现算法要求的功能,解决课程设计题目中给出的问题后,分析算法的时间复杂度和空间复杂度,如有可能对程序进行优化改进。

课程设计报告范例(参考)

约瑟夫环问题。

问题描述:设编号为1,2,…,n(n>0)个人按顺时针方向围坐一圈,每人持有一个正整数密码。开始时任意给出一个报数上限值m,从第一个人开始顺时针方向自1起顺序报数,报到m时停止报数,抱m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人起重新自1起顺序报数;如此下去,直到所有人全部出列为止。要求设计一个程序模拟此过程,并给出出列人的编号序列。基本要求:

(1)初始报数上限值m和测试数据在程序中确定;(2)用带头结点的单循环链表作数据元素的存储结构;(3)把带头结点的单循环链表作为抽象数据类型设计。测试数据:

n = 7,七个人的密码依次为3,1,7,2,4,8,4 初始报数上限值m = 20 算法思想:

JesephRing()函数是实现问题要求的主要函数,其算法思想是:从1至m对带头结点的单循环链表循环计数,到m时,输出该结点的编号值,将该结点的密码作为新的m值,再从该结点的下一个结点起重新自1起循环计数;如此下去,直到单循环链表空时循环过程结束。模块划分:

(1)带头结点的单循环链表抽象数据类型SCLinList,其中包括基本操作的函数有:初始化操作函数、插入一个结点操作函数、删除一个结点操作函数、取一个结点数据操作函数和判表是否非空操作函数。该抽象数据类型文件名为SCLinList.h。

(2)void SCLLDeleteAfter(SCLNode *p),其功能是删除带头结点的单循环链表中指针p所指结点的下一个结点。这是对带头结点的单循环链表抽象数据类型SCLinList,补充本问题需要的一个操作函数。(3)void JesephRing(SCLNode *head, int m),其功能是对带头结点的单循环链表head,以m为初始报数上限值实现问题要求。

(4)void main(void),主函数,功能是给出测试数据值,建立测试数据值的带头结点单循环链表,调用JesephRing()函数实现问题要求。数据结构:

(1)数据类型DataType定义如下: typedef struct { int number;int cipher;} DataType;

(2)带头结点单循环链表抽象数据类型SCLinList。

(3)带头结点单循环链表抽象数据类型的结点结构定义如下:

typedef struct node { DataType data;struct node *next;} SCLNode;源程序:

源程序存放在两个文件中,文件SCLinList.h是带头结点单循环链表抽象数据类型,文件Exam3-9.c是主程序。

文件SCLinList.h: typedef struct node { DataType data;struct node *next;} SCLNode;/*结点结构定义*/ void SCLLInitiate(SCLNode **head)/*初始化*/ { if((*head =(SCLNode *)malloc(sizeof(SCLNode)))== NULL)exit(1);(*head)->next = *head;} int SCLLInsert(SCLNode *head, int i, DataType x)/*插入一个结点*/ { SCLNode *p, *q;int j;p = head->next;j = 1;while(p!= head && j < i1 && i!= 1){ printf(“插入位置参数错!”);return 0;} if((q =(SCLNode *)malloc(sizeof(SCLNode)))== NULL)exit(1);q->data = x;q->next = p->next;p->next = q;return 1;} int SCLLDelete(SCLNode *head, int i, DataType *x)/*删除一个结点*/ { SCLNode *p, *q;int j;p = head;j = 0;while(p->next!= head && j < i1){ printf(“删除位置参数错!”);return 0;} q = p->next;p->next = p->next->next;*x = q->data;free(q);return 1;} int SCLLGet(SCLNode *head, int i, DataType *x)/*取一个结点数据元素值*/ { SCLNode *p;int j;p = head;j = 0;while(p->next!= head && j < i){ p = p->next;j++;} if(j!= i){ printf(“取元素位置参数错!”);return 0;} *x = p->data;return 1;} int SCLLNotEmpty(SCLNode *head)/*链表非空否*/ { if(head->next == head)return 0;else return 1;} 文件Exam3-9.c: #include #include typedef struct { int number;int cipher;} DataType;/*定义具体的数据类型DataType*/ #include “SCLinList.h” /*包含SCLinList抽象数据类型*/ void SCLLDeleteAfter(SCLNode *p)/*删除p指针所指结点的下一个结点*/ { SCLNode *q = p->next;p->next = p->next->next;free(q);} void JesephRing(SCLNode *head, int m)/*对带头结点单循环链表head,初始值为m的约瑟夫环问题函数*/ { SCLNode *pre, *curr;int i;pre = head;curr = head->next;while(SCLLNotEmpty(head)== 1){ for(i = 1;i < m;i++){ pre = curr;curr = curr->next;if(curr == head){ pre = curr;curr = curr->next;} }

printf(“ %d ”, curr->data.number);m = curr->data.cipher;curr = curr->next;if(curr == head)curr = curr->next;SCLLDeleteAfter(pre);} } void main(void){ DataType test[7]={{1,3},{2,1},{3,7},{4,2},{5,4},{6,8},{7,4}};int n = 7, m = 20, i;SCLNode *head;SCLLInitiate(&head);/*初始化*/ for(i = 1;i <= n;i++)/*循环插入建立单循环链表链表*/ SCLLInsert(head, i, test[i-1]);JesephRing(head, m);/*约瑟夫环问题函数*/ } 测试情况: 程序输出为: 6 1 4 7 2 3 5

各种排序比较结果(参考)

直接插入的比较图表***030002500直接插入的移动图表比较次数2000系列1******4738291100次数移动次数2000系列1******4738291100次数 冒泡的比较次数***00冒泡的移动图表***00比较次数移动次数*********1100执行次数系列*********91100次数系列1

SHELL的比较次数12001000800***01200SHELL的移动图表比较次数移动次数******1100执行次数系列******564738291100次数系列1

快速排序的比较次数800700600快速排序的移动图表540520500比较次数移动次数******4738291100执行次数系列******8291100次数简单选择的移动图表350300250系列1

上一篇:企业用车制度 文档下一篇:高一倾诉作文800字