数据结构课程设计全集样本.docx
- 文档编号:5183337
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:157
- 大小:135.86KB
数据结构课程设计全集样本.docx
《数据结构课程设计全集样本.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计全集样本.docx(157页珍藏版)》请在冰豆网上搜索。
数据结构课程设计全集样本
数据构造
实践教程
前言
数据构造是计算机专业必修。
主干课程之一, 它旨在使读者学会分析研究数据对象特性, 学会数据组织办法, 以便选取适当数据逻辑构造和存储构造, 以及相应运算(操作), 把现实世界中问题转化为计算机内部表达和解决, 这是一种良好程序设计技能训练过程。
在整个教学或学习过程中, 解题能力和技巧训练是一种重要环节。
为了协助教师讲授“数据构造”, 满足指引和评价“课程设计”需要, 为了协助和指引读者更好地学习数据构造这门课程, 咱们特编写了这本《数据构造实践教程》辅助教材,旨在弥补课堂教学和实验中局限性,协助学生充分理解和巩固所学基本概念、原理和办法,达到融会贯通、举一反三目。
实践证明, 理解课程内容与较好地解决实际问题之间存在着明显差距, 而算法设计完毕质量与基本程序设计素质培养是密切有关。
要想理解和巩固所学基本概念。
原理和办法, 牢固地掌握所学基本知识。
基本技能, 达到融会贯通。
举一反三目, 就必要多做。
多练。
多见(见多识广)。
正是为了达到上述目, 书中用某些实际应用, 对某些重要数据构造和算法进行解读。
通过循序渐进地训练, 就可以使读者掌握更多程序设计技巧和办法,提高分析。
解决问题能力。
本书依照学生基本知识和兴趣兴趣将内容分为基本篇和提高篇两个某些。
第一某些基本篇精选出恰当、与实际生活结合密切课程设计实例加以分析实现。
第二某些提高篇旨在使读者通过运用数据构造知识及复杂算法去解决现实世界中某些实际问题。
本书根据数据构造课程教学大纲规定,同步又独立于详细教科书,既注重实践应用,又注重理论分析,本书重要特点有:
●本书精选出来实例项目典型、实用、具备一定趣味性,其内容丰富、涉及面广、难易恰当,能给读者以启发,达到让读者掌握有关知识和开阔视野目
●为了提高学生分析问题、解决问题能力,本书对实例项目进行分析,其设计思路清晰流畅,值得参照。
●本书不但仅是对照数据构造课程教学大纲举些例子阐明数据构造能解决什么问题,而是通过度析详细实例项目,得到对数据组织关系需求,从而选取某个数据构造适应某些特定问题和算法,并阐明使用这种数据构造优缺陷。
●所有实例项目都给出了参照算法和源程序代码并在TurboC和VisualC++6.0环境下运营通过。
由于作者水平有限、时间仓促,本书难免存在某些缺陷和错误,恳请广大读者及同行们批评指正。
第一某些基本篇
第一章线性表
1.1学生成绩管理
1.1.1项目简介
1.1.2设计思路
1.1.3数据构造
1.1.4程序清单
1.1.5运营成果
1.2考试报名管理
1.2.1项目简介
1.2.2设计思路
1.2.3数据构造
1.2.4程序清单
1.2.5运营成果
1.3约瑟夫生者死者游戏
1.3.1项目简介
1.3.2设计思路
1.3.3数据构造
1.3.4程序清单
1.3.5运营成果
1.4约瑟夫双向生死游戏
1.4.1项目简介
1.4.2设计思路
1.4.3数据构造
1.4.4程序清单
1.4.5运营成果
第二章栈和队列
2.1迷宫旅行游戏
2.1.1项目简介
2.1.2知识要点
2.1.3设计思路
2.1.4程序清单
2.1.5运营成果
2.2八皇后问题
2.1.1项目简介
2.1.2知识要点
2.1.3设计思路
2.1.4程序清单
2.1.5运营成果
2.3停车场停车管理
2.1.1项目简介
2.1.2知识要点
2.1.3设计思路
2.1.4程序清单
2.1.5运营成果
第三章串、数组和广义表
3.1单词检索记录程序
3.1.1项目简介
3.1.2设计思路
3.1.3数据构造
3.1.4程序清单
3.1.5运营成果
3.2Internet网络通路管理
3.2.1项目简介
3.2.2设计思路
3.2.3数据构造
3.2.4程序清单
3.2.5运营成果
第四章树和二叉树
4.1家谱管理
4.1.1项目简介
4.1.2设计思路
4.1.3数据构造
4.1.4程序清单
4.1.5运营成果
4.2表达式求值问题
4.2.1项目简介
4.2.2设计思路
4.2.3数据构造
4.2.4程序清单
4.2.5运营成果
4.4图像压缩编码优化
4.4.1项目简介
4.4.2设计思路
4.4.3数据构造
4.4.4程序清单
4.4.5运营成果
第五章图
5.1公交路线管理
5.1.1项目简介
5.1.2设计思路
5.1.3数据构造
5.1.4程序清单
5.1.5运营成果
5.2导航最短途径查询
5.2.1项目简介
5.2.2设计思路
5.2.3数据构造
5.2.4程序清单
5.2.5运营成果
5.4电网建设造价计算
5.4.1项目简介
5.4.2设计思路
5.4.3数据构造
5.4.4程序清单
5.4.5运营成果
5.4软件工程进度规划
5.4.1项目简介
5.4.2设计思路
5.4.3数据构造
5.4.4程序清单
5.4.5运营成果
第六章查找
6.1电话号码查询系统
6.1.1项目简介
6.1.2知识要点
6.1.3设计思路
6.1.4程序清单
6.1.5运营成果
6.2高校录取分数线查询系统
6.2.1项目简介
5.2.2知识要点
6.2.3设计思路
6.2.4程序清单
6.2.5运营成果
6.3储蓄账户查询系统
6.3.1项目简介
6.3.2知识要点
6.3.3设计思路
6.3.4程序清单
6.3.5运营成果
6.3期刊稿件查询系统
6.3.1项目简介
6.3.2知识要点
6.3.3设计思路
6.3.4程序清单
6.3.5运营成果
第七章排序
7.1设备清单排序
7.1.1项目简介
7.1.2知识要点
7.1.3设计思路
7.1.4程序清单
7.1.5运营成果
7.2地名排序
7.2.1项目简介
7.2.2知识要点
7.2.3设计思路
7.2.4程序清单
7.2.5运营成果
7.3工厂产量排序
7.3.1项目简介
7.3.2知识要点
7.3.3设计思路
7.3.4程序清单
7.3.5运营成果
7.4高校科研成果排序
7.4.1项目简介
7.4.2知识要点
7.4.3设计思路
7.4.4程序清单
7.4.5运营成果
7.5火车车次排序
7.5.1项目简介
7.5.2知识要点
7.5.3设计思路
7.5.4程序清单
7.5.5运营成果
7.6IP地址排序
7.6.1项目简介
7.6.2知识要点
7.6.3设计思路
7.6.4程序清单
7.6.5运营成果
第二某些综合篇
8.1益智游戏之七巧板
8.1.1项目需求
8.1.2知识要点
8.1.3设计流程
8.1.4程序清单
8.1.5运营测试
8.2航空客运定票系统
8.2.1项目需求
8.2.2知识要点
8.2.3设计流程
8.2.4程序清单
8.2.5运营测试
8.4景区旅游信息管理系统
8.4.1项目需求
8.2.2知识要点
8.4.2设计流程
8.4.4程序清单
8.4.5运营测试
第一某些基本篇
第一章线性表
线性表是数据构造中最简朴、最惯用一种线性构造,也是学习数据构造所有内容基本,其掌握好坏直接影响着后继知识学习。
本章通过四个模仿项目来学习线性表顺序和链式存储构造,一方面通过使用关于数组操作实现学生成绩管理,另一方面通过使用关于线性链表操作实现考试报名管理,然后通过使用循环链表操作实现约瑟夫生者死者游戏。
1.1学生成绩管理
1.1.1项目简介
学生成绩管理是学校教务部门寻常工作重要构成某些,其解决信息量很大。
本项目是对学生成绩管理简朴模仿,用菜单选取方式完毕下列功能:
输入学生数据;输出学生数据;学生数据查询;添加学生数据;修改学生数据;删除学生数据。
1.1.2设计思路
本项目实质是完毕对学生成绩信息建立、查找、插入、修改、删除等功能,可以一方面定义项目数据构造,然后将每个功能写成一种函数来完毕对数据操作,最后完毕主函数以验证各个函数功能并得出运营成果。
1.1.3数据构造
本项目数据是一组学生成绩信息,每条学生成绩信息由学号、姓名和成绩构成,这组学生成绩信息具备相似特性,属于同一数据对象,相邻数据元素之间存在序偶关系。
由此可以看出,这些数据具备线性表中数据元素性质,因此该系统数据采用线性表来存储。
顺序表是线性表顺序存储构造,是指用一组持续内存单元依次存储线性表数据元素。
在顺序存储构造下,逻辑关系相邻两个元素在物理位置上也相邻,这是顺序表特点。
本项目可以采用顺序表线性表顺序存储构造。
若一种数据元素仅占一种存储单元,则其存储方式参见图1-1。
从图1-1中可见,第i个数据元素地址为
Loc(ai)=loc(a1)+(i-1)
假设线性表中每个元素占用k个存储单元,那么在顺序表中,线性表第i个元素存储位置与第1个元素存储位置关系是
Loc(ai)=loc(a1)+(i-1)*k
这里Loc(ai)是第i个元素存储位置,loc(a1)是第1个元素存储位置,也称为线性表基址。
显然,顺序表便于进行随机访问,故线性表顺序存储构造是一种随机存储构造。
顺序表适当于做查找这样静态操作;顺序存储长处是存储密度大,存储空间运用率高。
缺陷是插入或删除元素时不以便。
由于C语言数组类型也有随机存储特点,一维数组机内表达就是顺序构造。
因而,可用C语言一维数组实现线性表顺序存储。
数组实现线性表顺序存储长处是可以随机存取表中任一元素O
(1),存储空间使用紧凑;缺陷是在插入,删除某一元素时,需要移动大量元素O(n),预先分派空间需按最大空间分派,运用不充分,表容量难以扩充。
用构造体类型定义每个学生数据,故该数组中每个数据构造可描述为:
typedefstructSTU
{charstuno[10];//学号
charname[10];//姓名
floatscore;//成绩
}ElemType;
1.1.4程序清单
#include
#include
#include
#include
#defineMaxListSize20
#defineEQUAL1
typedefstructSTU{
charstuno[10];
charname[10];
floatscore;
}ElemType;
classList
{private:
//线性表数组表达
ElemTypeelem[MaxListSize];
intlength;
intMaxSize;
public:
//输入学生数据
voidinit(List**L,intms);
//删除所有学生数据
voidDestroyList(List&L){free(&L);}
//将顺序表置为空表
voidClearList(){length=0;}
//判断顺序表与否为空表
boolListEmpty()
{returnlength==0;}
//判断顺序表与否为满
boolListFull()
{returnlength==MaxSize;}
//删除某个学生数据
boolListDelete(int,ElemType&e);
//遍历顺序表
voidListTraverse();
//返回顺序表长度
intListLength();
//学生数据查询
voidGetElem(int,ElemType*);
//修改学生数据
boolUpdateList(ElemType&e,ElemType);
//添加学生数据
boolListInsert(int,ElemType&);
//对学生数据按升序或降序输出
voidprintlist(int);
};
voidList:
:
init(List**L,intms)
{*L=(List*)malloc(sizeof(List));
(*L)->length=0;
(*L)->MaxSize=ms;
}
intList:
:
ListLength()
{returnlength;}
boolList:
:
ListDelete(intmark,ElemType&e)
{inti,j;
if(ListEmpty())returnfalse;
if(mark>0){//删除表头元素
e=elem[0];
for(i=1;i elem[i-1]=elem[i];} else//删除表尾元素 if(mark<0)e=elem[length-1]; else{//删除值为e元素 for(i=0;i if(strcmp(elem[i].name,e.name)==0)break; if(i>=length)returnfalse; elsee=elem[i]; for(j=i+1;j elem[j-1]=elem[j];} length--; returntrue; } voidList: : ListTraverse() {for(inti=0;i {cout< cout< cout< cout< } voidList: : GetElem(inti,ElemType*e) {*e=elem[i];} boolList: : EqualList(ElemType*e1,ElemType*e2) {if(strcmp(e1->name,e2->name)) returnfalse; if(strcmp(e1->stuno,e2->stuno)) returnfalse; if(e1->age! =e2->age) returnfalse; if(e1->score! =e2->score) returnfalse; returntrue; } boolList: : Less_EqualList(ElemType*e1,ElemType*e2) {if(strcmp(e1->name,e2->name)<=0)returntrue; elsereturnfalse; } boolList: : LocateElem(ElemTypee,inttype) {inti; switch(type) {caseEQUAL: for(i=0;i if(EqualList(&elem[i],&e)) returntrue; break; default: break;} returnfalse; } //修改学生数据 boolList: : UpdateList(ElemType&e,ElemTypee1) {for(inti=0;i if(strcmp(elem[i].name,e.name)==0){ elem[i]=e1;returntrue;} returnfalse; } boolList: : ListInsert(inti,ElemType&e) {ElemType*p,*q; if(i<1||i>length+1)returnfalse; q=&elem[i-1]; for(p=&elem[length-1];p>=q;--p) *(p+1)=*p; *q=e; ++length; returntrue; } //对学生成绩按升序或降序输出 voidList: : printlist(intmark) {int*b=newint[length]; inti,k; cout<<"姓名学号成绩\n"; if(mark! =0){ for(i=0;i for(i=0;i for(intj=i+1;j if(mark==1&&elem[b[j]].score if(mark==-1&&elem[b[k]].score if(k! =i){intx=b[i];b[i]=b[k];b[k]=x;}} for(inti=0;i {cout< cout< cout< cout< else{ for(i=0;i {cout< cout< cout< cout< } voidmain() {cout<<"linelist1m.cpp运营成果: \n"; ElemTypee,e1,e2,e3,e4,e5,e6; List*La,*Lb,*Lc; intk; cout<<"一方面调用插入函数.\n"; La->init(&La,4); strcpy(e1.name,"stu1"); strcpy(e1.stuno,"100001"); e1.age=22; e1.score=88; La->ListInsert(1,e1); strcpy(e2.name,"stu2"); strcpy(e2.stuno,"100002"); e2.age=21; e2.score=79; La->ListInsert(2,e2); strcpy(e3.name,"stu3"); strcpy(e3.stuno,"100003"); e3.age=19; e3.score=87; La->ListInsert(3,e3); La->printlist(0); cout<<"表La长: "< cin.get(); Lb->init(&Lb,4); strcpy(e4.name,"zmofun"); strcpy(e4.stuno,"100001"); e4.age=20; e4.score=94; Lb->ListInsert(1,e4); strcpy(e5.name,"bobjin"); strcpy(e5.stuno,"100002"); e5.age=23; e5.score=69; Lb->ListInsert(2,e5); strcpy(e6.name,"stu1"); strcpy(e6.stuno,"100001"); e6.age=22; e6.score=88; Lb->ListInsert(3,e6); Lb->printlist(0); cout<<"表Lb长: "< cin.get(); k=Lc->ListDelete(-1,e6); if(k==0)cout<<"删除失败! \n"; elsecout<<"删除成功! \n"; cout<<"输出表Lc: \n"; Lc->printlist(0); cin.get(); cout<<"按成绩升序输出表Lc\n"; Lc->printlist (1);cin.get(); cout<<"按成绩降序输出表Lc\n"; Lc->printlist(-1);cin.get(); } 1.1.5运营成果 一方面建立学生信息管理,输出成果为: 姓名学号成绩 Stu110000180 Stu210000291 Stu310000356 另一方面查询学号为100002学生成绩,输出成果为: 91 再次调用插入函数,插入Stu4成功! 输入成果为: 姓名学号成绩 Stu110000180 Stu210000291 Stu310000356 Stu410000475 最后删除Stu2成果! 输出成果为: 姓名学号成绩 Stu110000180 Stu310000356 Stu410000475 查询不及格学生,输出成果为: Stu310000356 1.2考试报名管理 1.2.1项目简介 考试报名工作给各高校报名工作带来了新挑战,给教务管理部门增长了很大工作量,报名数据手工录入既费时又会不可避免地浮现错误,同步也给不少学生以可乘之机。 本项目是对考试报名管理简朴模仿,用菜单选取方式完毕下列功能: 输入考生信息;输出考生信息;查询考生信息;添加考生信息;修改考生信息;删除考生信息。 1.2.2设计思路 本项目实质是完毕对考生信息建立、查找、插入、修改、删除等功能,可以一方面定义项目数据构造,然后将每个功能写成一种函数来完毕对数据操作,最后完毕主函数以验证各个函数功能并得出运营成果。 1.2.3数据构造 本项目数据是一组考生信息,每条考生信息由准考证号、姓名、性别、年龄、报考类别等信息构成,这组考生信息具备相似特性,属于同一数据对象,相邻数据元素之间存在序偶关系。 由此可以看出,这些数据也具备线性表中数据元素性质,因此该系统数据可以采用线性表来存储。 从上一节例子中可见,线性表顺序存储构造特点是逻辑关系相邻两个元素在物理位置上也相邻,因而可以随机存储表中任一元素,它存储位置可用一种简朴、直观公式来表达。 然而,从另一种方面来看,这个特点也铸成了这种存储构造弱点: 在做插入或删除操作时,需要移动大量元素。 为克服这一缺陷,咱们引入另一种存储形式――链式存储。 链式存储是线性表另一种表达办法,由于它不
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 全集 样本
![提示](https://static.bdocx.com/images/bang_tan.gif)