logo资料库

数据结构课程设计指导书.doc

第1页 / 共20页
第2页 / 共20页
第3页 / 共20页
第4页 / 共20页
第5页 / 共20页
第6页 / 共20页
第7页 / 共20页
第8页 / 共20页
资料共20页,剩余部分请下载后查看
《数据结构 课程设计》指导书 一、课程名称及编号 数据结构课程设计 028060 二、学时与学分 学时:1 周 学分:1.0 三、教学对象 层次:本科 专业:计算机科学与技术、软件工程专业 四、先修课程 C 语言、C++语言、数据结构 五、教学目的与任务 《数据结构课程设计》是理解和掌握数据结构的重要环节,主要任务是实现各种数据组织中的 数据逻辑结构,存储结构以及有关操作的算法。目的是使学生学会分析研究计算机加工的数据结构 的特性,以便为应用涉及的数据选择适当的逻辑结构、存储结构及相应的算法。另一方面,通过团 队合作、文档编制、主页设计等环节对学生进行全方位的训练,最终达到培养学生的数据抽象能力 和软件设计的能力。通过全部过程培养和锻炼学生的钻研能力、动手能力、分析问题和解决问题的 实际能力。 六、主要内容 《数据结构课程设计》的内容可根据专业要求和具体情况有授课老师进行选择和推荐。为了鼓 励学生的创造精神和开放性设计,应容许学生进行自拟选题,但应按照先申报再实现的流程。部分 选题如下,任课老师还应本着创新、提高、结合实际和科研等因素不断推出新的选题。开发平台推 荐如下:BORLAND C、C++、C++ BUILDER。 题目推荐: 1. 带头结点的双向链表的常见操作。要求从文件读入数据,结果显示的同时也要放入文件。 2. 利用栈计算表达式。 3. 利用队列进行任务排队的效果演示软件。 4. 文本文件统计软件。 5. 三元组代表的稀疏矩阵进行运算。 6. 某种数据结构常用功能图形演示软件 7. 中国三十个大城市之间的最短路径求解。 8. 中国三十个大城市之间的通信网最小生成树求解。 9. 索引结构的软件实现。 10. 平衡二叉树的常见操作。 11. 哈弗曼二叉树的实际应用。 12. 通过使用字符串的 KMP 算法编写出一个英语单词联想输入系统。单词量要求为初三前要求 的近三千个词汇。 13. 各种数据结构在 windows 下编程实现图形界面的设计。
14. 多项式求导 15. 马踏棋盘 16. 停车场模拟软件 17. 稀疏矩阵的加法 18. 家族关系查询系统 19. 各种利用数据结构实现的游戏软件 七、基本要求 由于数据结构属于基础类核心课程,故每个题目要求单人独立完成。最终的系统要求可以正常 运行,要求制作的各类文档齐全,能回答系统开发中的关键问题。系统界面简洁,使用方便,功能 齐全,数据结构的设计合理规范,存储结构的设计高效正确。在完成课题验收后,每位学生应在规 定的时间内上交《数据结构课程设计》说明书一份、源代码和相关数据文件。设计说明书要求图文 并茂,结构合理,对系统的数据结构设计和功能设计进行全面地描述,有收获和经验教训等。(约 3000 字) 设计报告格式 一、 设计题目 二、 设计目的 三、 总体设计 四、 详细设计 五、 设计结果与分析 六、 总结(收获和不足) 八、考核方式 按平时开发过程监控、现场问答、源码阅读、报告评审等环节进行验收,根据验收情况和课程 设计说明书的质量综合给出成绩。成绩分为优、良、中、及格、不及格五级评分制,基本评分标准 涉及的方面如下: 1. 课程设计任务完成情况、工作量大小、系统的难度和原创性。 2. 系统的整体设计、数据结构和存储结构设计是否合理高效。 3. 系统界面是否简洁大方,方便用户使用。 4. 资料制作是否完整系统美观。 5. 进度控制是否符合要求。 九、时间安排 本课程设计安排为一周时间进行,可以在期末,也可以在期初。 十、部分参考源码 //功能:多链表基本功能操作演示 #include //c++输入和输出等 如 cout #include //c 输入和输出等 如 getch #include //窗口类操作,系统调用如清屏等
#include //文件读写操作 #include //控制输出流格式 const MAXNUMOFBASE=10; //基础数据总量 const MAXSIZE=10; //设置链表总量 enum returninfo{success,fail,overflow,underflow,range_error};//定义错误类型清单 class interfacebase; // interfacebase 类的申明 ///////////////////////////////////////////////////////////////////////////////// ///////////////////// /*开始图形界面*/ const char * begin_file[]={ " ",//1 ────╮",//2 │",//3 ────┤",//4 │",//5 ────┤",//6 │",//7 │",//8 │",//9 │",//10 │",//11 │",//12 │",//13 中。 │",//14 "╭─────┬┬┐┌┬┐┌┬┐┌┬┐┌┬┐┌┬┐┌┬┐┌┬┬ "│ ├数┤├据┤├结┤├构┤├课┤├程┤├设┤├计┤ "├─────┴┴┘└┴┘└┴┘└┴┘└┴┘└┴┘└┴┘└┴┴ "│ ★☆★ 多链表基本功能操作 ★☆★ "├───────────────────────────── " │ ☆ 功 能 介 绍 : "│ 1.实现多组链表数据的显示、修改、插删、增值、反转和排序。 "│ 2.对非空文件中多组嵌套括号和逗号的数据进行读入操作。 " │ 3. 对 系 统 中 的 多 组 数 据 以 括 号 嵌 套 的 方 式 写 入 文 件 。 " │ 4. 系 统 中 可 容 纳 的 链 表 的 总 是 由 作 者 确 定 。 " │ 5. 及 时 将 系 统 中 的 残 余 结 点 空 间 释 放 。 " │ 6. 数 据 的 输 入 有 两 种 方 式 : 文 件 读 取 和 从 键 盘 输 入 。 "│ 7.实验退出时,系统中的所有非空链表的数据全部保存在文件
来。 │",//15 "│ 8.实验演示过程中,链表中的数据以结点链接的形式显示出 │",//16 │",//17 │",//18 │",//19 │",//20 │",//21 息。 │",//22 │",//23 ────┤",//24 │",//25 ------ │",//26 ╬╬ │",//27 ────╯",//28 " " │ │ " │ ☆ 注 意 事 项 : "│ 1.文件中无数据时不能进行数据读入操作,否则会死机。 " │ 2. 系 统 内 部 的 链 表 序 号 是 从 1 开 始 到 最 大 限 的 数 字 。 "│ 3.显示所有链表时,L<2>:表示第二号位置的链表数据。 "│ 4.针对具体链表进行操作完成后会立即显示该链表的相关信 " │ "├───────────────────────────── " │ ╱ ◥ █ █ ◣ ¤ ╭ ⌒ ╮ ╭ ⌒ ╮ 制 作 : ****** "│ ︱田︱田田| ╰----------------- 时间:*********年**月 "│ ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬ "╰───────────────────────────── }; /*开始界面函数*/ void begin_face() { for(int j=0;j<28;j++) { cout<
} cout<<" 提示:此时系统最多可以容纳"<
returninfo invertlist(void); returninfo upinturn(void); //链表所有数据反转 //链表所有数据按升序排序 }; linklist::linklist() //构造函数 { } headp=new node; headp->next=NULL; count=0; //申请新结点,作为头结点 //头结点的地址域预设为空地址 //计数器清零,表明开始时没有实际数据 linklist::~linklist() //析构函数 { } clearlist(); delete headp; count=0; //删除所有数据,释放所有结点 //把头结点也释放掉 //计数器清零,表明开始时没有实际数据 returninfo linklist::create(int number) { } node *searchp=headp,*newnodep; int i,idata[MAXNUMOFBASE]; cout<<"请依次从键盘输入"<>idata[i]; for (i=0;idata=idata[i]; newnodep->next=NULL; searchp->next=newnodep; searchp=searchp->next; count++; searchp->next=NULL; traverse(); return success; void linklist::clearlist(void) //清空链表
{ } 空 node *searchp=headp->next,*followp=headp; //初始化两个指针 while(searchp!=NULL) { } followp=searchp; searchp=searchp->next; delete followp; headp->next=NULL; //保留了最后一个结点,就是头结点,并且链域置为 count=0; //计数器也清零 bool linklist::empty(void)const //是否空链 { } if(headp->next==NULL) return true; else return false; int linklist::size(void)const //求链表的长度 { } return count; void linklist::traverse(void) //遍历某个链表中的所有元素 { node *searchp; if(empty()) //启用搜索指针 { } cout<<"链表目前为空,没有数据可以显示!请按任意键继续..."<next; cout<<"链表中的全部数据为: Headp-> "; //提示显示数据开始 while(searchp!=NULL) //循环显示所有数据 { cout<<"[ "<data; if (searchp->next==NULL)
cout<<" |^]"; else cout<<" |-]->"; searchp=searchp->next; } cout<next; //启用搜索指针 cout<<"Headp-> "; //提示显示数据开始 while(searchp!=NULL) //循环显示所有数据 { } cout<<"[ "<data; if (searchp->next==NULL) cout<<" |^]"; else cout<<" |-]->"; searchp=searchp->next; cout<=count+1) //处理意外 return range_error; node *searchp=headp->next; //定义搜索指针,初始化 for(int i=1; inext; //顺序访问方式,用循环,算法复杂度是 O(n) item=searchp->data; //返回读取的数据 return success; //本次操作成功 returninfo linklist::replace(int position,const int &item) //修改一个结点 {
分享到:
收藏