数据结构课程设计报告

数据结构课程设计报告
数据结构课程设计报告

数据结构课程设计报告

姓名:郭秋雷

学号:200630351149

公交信息管理系统

前言:

做这个公交系统的想法也是由来已久的的。我自己本身是个路痴,出行又不喜欢看地图找公交。后来中国移动推出了一个12580出行公交行路质询服务,让我对它产生了浓厚的兴趣,自己也想做一个类似的软件系统。后来看到一道数学建模题中也是有类似问题,大意是北京奥运期间大量乘客来北京观光奥运,人生地不熟出行肯定会不大方便,所以公交线路查询是必不可少的。再加上到时候游客数量激增,依靠人工来管理公交调度肯定会出现不足,一个完善公交管理系统的是迫在眉睫的。

因为我对数学建模有兴趣,我自己也对这些问题思考了很久,查了些资料,发现现有的公交查询系统,就拿中国移动的12580查询来讲,我个人认为就是有很多缺点的,不适合投放到市场,甚至不适合在北京奥运期间采用。比如中国移动现有的公交查询,它往往只会告诉你一条方案,你甚至不知道它和别的其他方案有什么优缺点,因为有些乘客赶时间需要的是时间最快方案,有些乘客因为经济困难希望得到最省钱方案,有些乘客因为行动不方便或者喜欢舒适就希望得到换乘次数尽量少甚至直达的路线。而且因为有时候人流集中,比如奥运期间鸟巢或水立方里某场超热门的比赛,如果比赛结束后大家出来后都

选那么一两条路线,就会造成一两条线路拥挤,大家上不了车,这就

需要查询系统能够提供多几条时间较快的,较省钱的线路让大家选

择。这些人性化的需求在中国移动现有的12580公交查询里的得不到

的。所以我希望能够建一个能满足各种乘客需求的更加完善的公交查

询系统。

和公交查询匹配的是对于公交公司的公交车调度问题,奥运期间,

如何更加好的安排公交调度,让大家出行方便,也是公交公司的当务

之急,我的公交调度里,就可以根据每条公交路线采集到的数据来进

行合理的调度,使得奥运期间大家的出行更加方便。

(一)摘要:

设计解决公交线路选择问题的自主查询计算机系统系统,其核心是线路选择的模型与算法,特别是满足不同乘客的查询需求。传统的Dijkstra 算法无疑是解决一般最短路径问题的最优算法,但接下来

我们会看到传统的Dijkstra 算法在公交查询系统是不适合的。而我

依据对公交乘客出行心理调查的统计结果,指出换乘次数最少是乘客

出行时考虑的首要因素,所以这里提出一种基于换乘次数最少的公交最短路径算法,并根据公交系统的特点,以图的邻接表作为数据结构。

至于公交车的调度,需要同时考虑到公车公司和乘客的利益,必须

尽量在满足双方的利益上做出合理的调度。所以这是一个多目标最优

的问题,一是公车公司的成本低,即提高每辆车的满载率,或者说发

车的车次尽量少;二是等待时间过长的乘客所占的比例尽量少;三是

超载的情况尽量不发生,让乘客尽量感到舒适。因为一天里有些时间

段里乘客人流的情况的相近的,比如早上平峰期,高峰期,中午平峰

期,傍晚高峰期和晚上平峰期,我可以分别对这5个时间段分别求解。

这样我们就可以求解各个时段的满载率,等待超时乘客所占比例和超

载的乘客所占比例这三个目标函数。因为分别求解三个目标函数有困

难也没有必要,所以我按公交公司效益和乘客利益同样重要和公交公

司本着为乘客服务的理念愿意合理的牺牲一些效益这两个思想,对每

个因素取一个适当的权重因子,最后得出最优调度。

关键词:公交路线网络化,图的邻接表,公交查询,乘客的需求,换乘次数,广度搜索,公交调度,分时段调度,公交公司与乘客的利益关系

(二)问题描述:

乘客的查询系统:我国人民翘首企盼移动的第29届奥运会明年8月将在北京举行,届时有大量观众到现场观看奥运比赛,其中大部分人将会乘坐公交出行。这些年来,城市的公交系统有了很大发展,北京市的公交线路已达800条以上,

使得公众的出行更加通畅、便利,但同时也面临多条线路的选择问题。针对市场需求,需设计这样一个系统,其核心是线路选择的模型与算法,从实际情况出发考虑,考虑公汽线路,给出任意两公汽站点之间线路选择问题的一般数学模型与算法。满足查询者的各种不同需求。

公交的调度系统:公共交通是城市交通的重要组成部分,作好公交车的调度对于完善城市交通环境、改进市民出行状况、提高公交公司的经济和社会效益,都具有重要意义。为了建立一个有效的公交调度,我需要采集需要调度的线路的相关数据。根据采集到的数据,我的公交调度系统就可以为这条线路设计一个全天的公交调度方案。这里我的测试数据来自北京某条公交线路的客流调查和运营资料。并根据常规设客车在该线路上运行的平均速度为20公里/小时。运营调度要求,乘客候车时间一般不要超过10分钟,早高峰时一般不要超过5分钟,车辆满载率不应超过120%,一般也不要低于50%。根据这些资料和要求,为线路设计一个便于操作的全天(工作日)的公交车调度方案,包括两个起点站的发车时刻表;这个方案以怎样的程度照顾到了乘客和公交公司双方的利益;等等。

(三)系统模型的分析与建立

下面分公交查询和公交调度两个问题分别建立数学模型求解。

公交查询:

对与一般的交通道路图,最优路径往往就是最短的距离。而对于这样的问题,经典的Dijkstra 算法无疑是公认的最优的解决算法。但在研究公交网络模型和最优路径算法时,有必要先了解公交乘客出行时所考虑的因素,通过对公交乘客出行心理、行为的研究来确定模型的优化目标和约束条件。通常乘客选择出行路线时受到以下几个因素的作用:“换乘次数”、“出行距离”、“出行耗时”、“出行费用”。换乘次数是指乘客在完成一次出行过程中所换车的次数。实际上这几个出行因素是相互影响的,如换乘次数和出行费用就是相关联的,特

别是在一些实行一票制的城市中,这两个因素可以说是一致的。根据早期的测试的结果发现的确如此,所用的费用基本都是以换乘次数为界划分的。本文参照了在北京市做的一个公交乘客出行心理调查统计结果[1 ] ,它主要对三个因素做了调查:换乘次数、出行距离、出行耗时。从图1 中可以看到有41. 16 %的乘客在选择出行路径时首先考虑的是换乘最少,其次考虑时间最短,而将路程最短作为出行时考虑

的首要条件的乘客只占18. 60 %。

由此,我们可以确定公交网络中最短路径的意义与我们通常理解的最短路径的意义的区别。就比如,拿公交乘客和汽车司机来比较。公交乘客出行和汽车司机所考虑的因素是不同的,汽车司机关心的是如何选择最近距离,最大程度的省时省油;而公交乘客出行更多考虑的是出门的方便性和舒适性,所以道路网络中的最短路径和公交线路的最短路径的意义是不同的。道路网络中的最短路径只要找出两点之间路径距离为最短即可。但是在公交网络中,乘客不会为了寻找距离最短路径而随意换车。因为从一条线路换乘到另一条线路是费时又费力的,在很多情况下,换乘另一趟车需要到另一个站台,这就有一段的步行距离,而且在站台等车也是要消费时间的。

综合上面分析,所以对于公交乘客来说,最短路径的意义并不在于路程是否最短,而在于换乘的次数最少。所以经典的Dijkstra 算法并不适合用在公交线路的查询上。我们必须采用优化的算法。

根据经验表明,在北京这样的大都市的公交网络上,换3次车即乘

坐4条线路的公交车,方可到达目的地的情况都是很少发生的。所以本文认为两次以内的转车是比较合理的。

在换乘次数为2次及以下的情况中,会产生出行时间最小和费用最低等相应情形。有些乘客可能有急事所以较为倾向时间最小,有些乘客因为经济上的考虑会选择费用最低,有些乘客就会做出折中的选择。为满足各种乘客的需求,我提出了基于广度优先搜索,求解所有的换乘次数为2次及以下的路线。并根据乘客的需求判断出最优选择。针对考虑公交的换乘情况,主要算法描述如下。

(1) 输入乘车的起始站点A 及目的站点B ;

(2) 求经过站点A 的所有线路集S ( I) 和经过站点B 的所有线路集T( J ) ;

(3) 判断有S ( I) = T( J ) 吗?

如果有,则找到了从站点A 到站点B 的直达线路S ( I) 即T( J) ,输出结果,进行下一步。

(4) 求线路S ( I) 上的站点E( I ,U) 以及线路T( J) 上的站点

F( J ,V) ;

(5) 判断是否存在相同站点,即E( I ,U) = F( J ,V) 。如果满足

E( I ,U) = F( J ,V) ,则线路S ( I) , T( J) 即为一次转车的线路, E( I ,U) 即为转车站点;输出结果。再执行下面。

(6) 求经过E( I ,U) 的线路集R ( K) ,经过F( J ,V) 的线路集Y( O) ;

(7) 判断有R ( K) = Y( O) 吗?

如果有,则线路S ( I) , R ( K) , T( J ) 为两次换车的线路,换车站点为E( I ,U) 和F( J ,V) ,输出结果。继续执行下面。

(8) 求线路R ( K) 上的站点G( K ,W) 和线路Y( O) 上的站点L ( O , X) ;

(9) 判断是否存在相同站点,即G( K ,W) = L ( O , X) ,如果满足

G( K ,W) = L ( O , X) , 则线路S ( I) , R ( K) ,Y( O) , T( J ) 即为三次转车的线路, E( I ,U) , G( K ,W) , F( J ,V) 即为转车站点。

公交调度:

通过对分析我觉得公车的调度问题是一个双方利益兼顾的问题,乘客的利益是超时等待的比例尽量少和超载的情况尽量少发生,公交公司的利益则是满载率尽量高,以提高效益。接下来我将这三个目标量化,化为目标函数,以得到最优调度。

根据数据大家可以看出在一定的时段里乘客的人数有一定的相似性,这也比较容易理解,因为大家上班的时间大都集中在8:00-9:00,下班时间也集中在16:00-18:00左右。所以我以乘客的人数多少将公车的运行时间分为几个时段。一是早上平峰时段,二是早上高峰时段,三是中午平峰时段,四是傍晚的高峰时段,五是晚上的平峰时段。这样我可以分别对每一时段单独进行分析求解,使得问题简化。我只采用了上行的测试数据,下行同样可求。下面是线路上行时段划

分。

上行:

因为在我划分的一个时段里,情形都是相近的。每个乘客到达车站又是相互独立事件,所以我可以认为在我划分的每个时间段里到达车站的乘客人数是均匀的。由于乘客到达的均匀性,则一个时间段里发车也可以看成是均匀的。

接下来我们分别先求出时间段i里每趟车的每段路,车上总人数,再将其相加可得时间段i的总人数Pi。

然后将这个时间段所有等待时间超时的乘客相加,除以这个时间段的总人次Pi,这样就可化为等待超时的乘客所占比例的目标函数。对于超载,可以对每趟车的每段路分别计算,如果超过则将每个路段的超载的人数相加,再除以这个时段总人数Pi,这样就可化为超载人数所占比例的目标函数。

而总人数Pi除以时间段Ti的运力,就可以得到满载率的目标函数。

下面我们先来求解上行路线。

时间段i的平均发车时间间隔为:

bi=Ti/Bi;

第k辆车到达站点j时,站点j上的等待上车的人数

PW(i,k,j)=Pl(i,k-1,j)+bi*Kij

而设Pl(i,0,j)=0,当k=1时PW(i,1,j)=*Kij;

第k辆车到达站点j时,下车人数

D(i,k,j)=bi*

而D(i,k,0)=0,即起点站没人下车。

第k辆车到达站点j时,车上乘客下车后车上的最大容量为:

On(i,k,j)=Max{ 120-(PLB(i,k,j-1)-D(i,k,j)),0};

第k辆车离开站点j后车上的人数

PLB(i,k,j)=PLB(i,k,j-1)-D(i,k,j)+max{ O(i,k,j),PW(I,j,k) }

第k辆车离开站点j后车上的超载人数

C(i,k,j)=max{ PLB(i,k,j)-100,0}

第k辆车离开站点j后,站点上还剩下的等待人数

PL(i,k,j)=max{ PA(i,j,k)- On(i,k,j),0}

时间段i车上的总人数

Pi=

在计算超额等待的乘客人数时,我们有个前提,就是任何时期乘客最多被滞留一次,即乘客因为当时人数过多而挤不上公车的情况最多发生一次。因为乘客被多次滞留的情况应该是极少见的,所以即使发生所占的比例也极少,对问题的最后结果影响不大。而且如果某个站乘客被滞留的情况多次发生则肯定是公车的调度方案不合理,我们就是要避免这种情况发生。并且我们计算超时等待的乘客人数时保险地取其下界。

第k辆车到达站点j时超额等待的乘客人数为

平峰期:

If(T(i,k,j)-10>T(i,k-1,j))W(i,k,j)=max{ Kij*(T (i,k,j)-10- T(i,k-1,j)),

PL(i,k-1,j)}

高峰期:

If(T(i,k,j)-5>T(i,k-1,j))W(i,k,j)=max{ Kij*(T(i,k,j)-5- T(i,k-1,j)),

PL(i,k-1,j))}

这样我们可以得到三个目标函数如下:

min =(超时的乘客在时间段i所占的比例)min =(超载的乘客在时间段i所占的比例)max (满载率)

分别求三个目标函数,是困难的而且也是没有意义的,因为这样很难得到一个统一的答案。所以我将每个因素都乘以一个权重再相加,以得到一个最后的最佳调度。

我认为乘客的利益和公交公司的利益的等重的。超时和超载的乘客尽量少,这有利于乘客的利益,满载率尽量高,这有利于提高公交公司的效益。所以我取的权重为1/4,的权重也为1/4,而满载率的权重为1/2,这样乘客和公交公司都处于一个平等的地位。由此我可以得到最后的目标函数:

Max M=

(四)数据及类型描述:

下面是公交查询里用到的数据和函数

ElemType vtail,vhead;//要查询的起点和终点,作为全局变量

bool ev[600][100],fv[600][100];//e[i][j]为线路i会进入站点j,f[i][j]为线路i会从站点j出来

struct ARcType//弧结点:弧头在顶点数组中的序号,权值,指向下一条弧结点的指针

struct VErtexType//顶点结点:结点名字,指向第一条弧结点的指针

class Graph//公交线路图类

VErtexType graph[4100];//存储公交线路图的邻接表

VErtexType graph1[4100];//公交线路图的逆邻接表

int vertexnum,arcnum;//顶点数和弧定点数

int L[550];//记录线路i能经过几次换乘到达终点

ElemType e[600][100],f[600][100];//e[i][j]为线路i会进入站点j,f[i][j]为线路i会从站点j出来

int en[600],fn[600];//e[i]有多少个站点

bool ticket[550];//0为单一票制,1为分段计价

bool round[550];//是环形路为真,否则为假

void initiate();//初始化en,fn

void initiate2();

ElemType r[6000],y[6000];//从E( I ,U)站点发出的线路集R ( K) ,进入站点F( J ,V) 的线路集Y( O) ;

int getdata();//从文件中读入数据

int LocateVertex(ElemType str);//查找名为str的顶点在数组graph中的序号,返回。没有返回-1

int findpathout(ElemType s[100],ElemType a);//求出经过站点a的所有线路名字,复制到s[i]中

int findpathout(ElemType s[100],ElemType a,ElemType hi);

int findpathin(ElemType s[100],ElemType a);//求出经过站点a的所有线路名字,复制到s[i]中

int CreateDN();//创建有向有权图的邻接表

void Insertarc(int i,int j,ElemType linename,ElemType strh,ElemType strt);//在图中加入一条弧,由序号i的点指向序号j的点

void Insertarc(int i,int j,ElemType &linename,ElemType strh,ElemType strt,char ch);

void ShowUDN();//显示图的领接表的结构

int directpath(ElemType h[100],ElemType t[100],int counth,int countt);//看是否有直接路线

int ispath(ElemType vhead,ElemType vtail,ElemType hi);//判断vhead 和vtail是不是线路hi上的先后两点

int oncepath(ElemType h[100],ElemType t[100],int counth,int countt);//看是否有转一次车路线,即看线路i和j有没有公共的站点

void oncepathtime(ElemType h[100],ElemType t[100],int counth,int countt);//看是否有转一次车路线,输出最小时间

void oncepathsometime(ElemType h[100],ElemType t[100],int counth,int countt);//看是否有转一次车路线,输出最小时间

int twiceandthreepath(ElemType h[100],ElemType t[100],int counth0,int countt0,int counth1,int countt1);//看是否有转2次车路线,即看线路i和j有没有公共的站点

void twiceandthreepathtime(ElemType h[100],ElemType t[100],int counth0,int countt0,int counth1,int countt1);//看转两次车的最快时间

void twiceandthreepathsometime(ElemType h[100],ElemType t[100],int counth0,int countt0,int counth1,int countt1);//看转两次车的最快几次时间

int num1(int fasttime[5],int time,int count) //看time在fasttime数组中是第几快的,返回数组中的序号,如果不能入前3快,返回-1,如果count没有3个,则前count快。

void names(ElemType s,int n)//给公交站点命名

int checkarcname(ElemType str)//检查输入的弧名是否正确:"L+三位数字",正确就返回1,否则0

int changel(ElemType str)//将站点名转为相应的数字

int change(ElemType str)//将弧名转为相应的数字

void namel(ElemType linename,int busline)//根据线路的号码给线路命名void Showall()//显示所有线路的情况

GRaph net;//全局变量,存储站点信息

下面是公交调度的相关数据和函数描述:

int B[6];//Bi,时间段Ti内发出的车辆数

float b[6];//时间段i的平均发车时间间隔为

float PL[6][90][20];//PL(i,k,j)时间段i内第k辆车离开第j个站点时,站点j上的人数

float PW[6][90][20];//PW(i,k,j)时间段Ti内第k辆车到达站点j时,站点j的等待上车人数

float C[6][90][20];//时间段i第k辆车离开站点j时的超载人数

float K[6][20];//时间段i内单位时间平均到站j的人数

float L[6][20];//时间段i内单位时间平均在站j下车的人数

float T[6];//时间段i的长度

int start[6];//5个时段的开始时刻

float t[14];//起点到各个站点的时间

float D[6][90][20];//D(i,k,j),时间段Ti内第k辆车到达站点j时,下车的人数

float On[6][90][20];//On(i,k,j),时间段Ti内第k辆车到达站点j时,乘客下车后,车能容纳上车的最大人数

float PLB[6][90][20];//PLB(i,k,j)时间段i内第k辆车离开第j个站点时,车上的人数

float W[6][90][20];//时间段Ti内第k辆车到达站点j时,等待时间过长的乘客

float w[6],c[6],z[6];//记录各个目标函数的数值。

int b1;//全局变量,要调度的线路的站点数

void initiate1()//划分各个时段

int change(int n)//看开始时间n是第几时段

int larger(int a,int b)//比较,返回大数

int less(int a,int b)//比较,返回小数

void getdata()//从要调度的线路读出文件,并初始化相关数据

void findbestBi(int i,int b1)//求时段i最佳发车数数量B[i]

int cusmenu()//乘客菜单函数

int guanli()//管理员菜单

(五)测试方法描述

1:输入密码进入管理员菜单,进行相关操作,先是初始化公交查询系统。

2:然后测试函数:查看某站点的出入站的线路的情况

3:查看所有线路的情况。由于数据太多,近500多条线路,所以一开始会出现类似闪屏的情况。运行过程如下。

4:接着是根据文件的数据进行公交车的调度。可以将每个线路的具体情况放在不同的文件中,这样就可以对不同的线路进行调度和相关数据预测。由于时间关系这里我只存储了xianlu1这一个文件。测试结果如下。

数据结构课程设计参考题目

数据结构课程设计题目 数据结构课程设计题目(大题目).doc 一、公司销售管理系统 项目开发基本要求 1.客户信息管理:对客户的基本信息进行添加、修改和删除。 2.产品信息管理:对产品的基本信息进行添加、修改和删除。 3.供应商信息管理:对供应商的基本信息进行添加、修改和删除。 4.订单信息管理:对订单的基本信息进行添加、修改和删除。 二、高校科研管理系统 系统主要用于帮助高校或科研单位管理和维护各项科研相关资料 项目开发基本要求 1.系统用户管理模块:为系统新用户设置用户名及口令;操作员更改自己的系统口令。2.数据字典管理模块:管理项目性质包括:分为国家自然科学基金、863、部省科委及企业集团四种情况;范围包括:分为全国、国际、地方三种情况;检索源包括:分为EI、SCI、核心和一般四种情况。 3.项目参加人员管理模块包括:显示添加修改删除查询。 4.项目基本情况模块包括:显示添加修改删除查询。 5.项目获奖情况模块包括:显示添加修改删除查询。 6.期刊论文管理模块包括:显示添加修改删除查询。 7.著作管理模块包括:显示添加修改删除查询。 8.科研工作量统计模块:按照学校科研工作量计算办法,为每位科研人员进行科研工作量的计算和统计。 9.科研积分统计模块:按照学校科研积分计算办法,为每位科研人员进行科研计分的计算和统计。 三、网络五子棋对战 四、不同排序算法模拟 五、科学计算器 数据结构课程设计题目 1.运动会分数统计 任务:参加运动会有n个学校,学校编号为1……n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1……m,女子m+1……m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。(m<=20,n< =20) 功能要求: 1)可以输入各个项目的前三名或前五名的成绩; 2)能统计各学校总分,

数据结构课程设计报告模板

《数据结构I》三级项目报告 大连东软信息学院 电子工程系 ××××年××月

三级项目报告注意事项 1. 按照项目要求书写项目报告,条理清晰,数据准确; 2. 项目报告严禁抄袭,如发现抄袭的情况,则抄袭者与被抄袭者均 以0分计; 3. 课程结束后报告上交教师,并进行考核与存档。 三级项目报告格式规范 1. 正文:宋体,小四号,首行缩进2字符,1.5倍行距,段前段后 各0行; 2. 图表:居中,图名用五号字,中文用宋体,英文用“Times New Roman”,位于图表下方,须全文统一。

目录 一项目设计方案 (3) 二项目设计分析 (4) 三项目设计成果 (4) 四项目创新创业 (5) 五项目展望 (6) 附录一:项目成员 (6) 附录二:相关代码、电路图等 (6)

一项目设计方案 1、项目名称: 垃圾回收 2、项目要求及系统基本功能: 1)利用数据结构的知识独立完成一个应用系统设计 2)程序正常运行,能够实现基本的数据增加、删除、修改、查询等功能3)体现程序实现算法复杂度优化 4)体现程序的健壮性 二项目设计分析 1、系统预期实现基本功能: (结合本系统预期具体实现,描述出对应基本要求(增、删、改、查等)的具体功能) 1. 2. 3. 4. 5. 6. 7. 2、项目模块功能描述 (基本分为组织实施组织、程序功能模块编写、系统说明撰写等。其中程序功能子模块实现) 模块一: 主要任务:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 模块二: 主要任务:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 模块n: 主要任务:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

数据结构实验总结报告

数据结构实验总结报告 一、调试过程中遇到哪些问题? (1)在二叉树的调试中,从广义表生成二叉树的模块花了较多时间调试。 由于一开始设计的广义表的字符串表示没有思考清晰,处理只有一个孩子的节点时发生了混乱。调试之初不以为是设计的问题,从而在代码上花了不少时间调试。 目前的设计是: Tree = Identifier(Node,Node) Node = Identifier | () | Tree Identifier = ASCII Character 例子:a(b((),f),c(d,e)) 这样便消除了歧义,保证只有一个孩子的节点和叶节点的处理中不存在问题。 (2)Huffman树的调试花了较长时间。Huffman编码本身并不难处理,麻烦的是输入输出。①Huffman编码后的文件是按位存储的,因此需要位运算。 ②文件结尾要刷新缓冲区,这里容易引发边界错误。 在实际编程时,首先编写了屏幕输入输出(用0、1表示二进制位)的版本,然后再加入二进制文件的读写模块。主要调试时间在后者。 二、要让演示版压缩程序具有实用性,哪些地方有待改进? (1)压缩文件的最后一字节问题。 压缩文件的最后一字节不一定对齐到字节边界,因此可能有几个多余的0,而这些多余的0可能恰好构成一个Huffman编码。解码程序无法获知这个编码是否属于源文件的一部分。因此有的文件解压后末尾可能出现一个多余的字节。 解决方案: ①在压缩文件头部写入源文件的总长度(字节数)。需要四个字节来存储这个信息(假定文件长度不超过4GB)。 ②增加第257个字符(在一个字节的0~255之外)用于EOF。对于较长的文件,

会造成较大的损耗。 ③在压缩文件头写入源文件的总长度%256的值,需要一个字节。由于最后一个字节存在或不存在会影响文件总长%256的值,因此可以根据这个值判断整个压缩文件的最后一字节末尾的0是否在源文件中存在。 (2)压缩程序的效率问题。 在编写压缩解压程序时 ①编写了屏幕输入输出的版本 ②将输入输出语句用位运算封装成一次一个字节的文件输入输出版本 ③为提高输入输出效率,减少系统调用次数,增加了8KB的输入输出缓存窗口 这样一来,每写一位二进制位,就要在内部进行两次函数调用。如果将这些代码合并起来,再针对位运算进行一些优化,显然不利于代码的可读性,但对程序的执行速度将有一定提高。 (3)程序界面更加人性化。 Huffman Tree Demo (C) 2011-12-16 boj Usage: huffman [-c file] [-u file] output_file -c Compress file. e.g. huffman -c test.txt test.huff -u Uncompress file. e.g. huffman -u test.huff test.txt 目前的程序提示如上所示。如果要求实用性,可以考虑加入其他人性化的功能。 三、调研常用的压缩算法,对这些算法进行比较分析 (一)无损压缩算法 ①RLE RLE又叫Run Length Encoding,是一个针对无损压缩的非常简单的算法。它用重复字节和重复的次数来简单描述来代替重复的字节。尽管简单并且对于通常的压缩非常低效,但它有的时候却非常有用(例如,JPEG就使用它)。 变体1:重复次数+字符 文本字符串:A A A B B B C C C C D D D D,编码后得到:3 A 3 B 4 C 4 D。

数据结构课程设计报告模板

课程设计说明书 课程名称:数据结构 专业:班级: 姓名:学号: 指导教师:成绩: 完成日期:年月日

任务书 题目:黑白棋系统 设计内容及要求: 1.课程设计任务内容 通过玩家与电脑双方的交替下棋,在一个8行8列的方格中,进行棋子的相互交替翻转。反复循环下棋,最后让双方的棋子填满整个方格。再根据循环遍历方格程序,判断玩家与电脑双方的棋子数。进行大小判断,最红给出胜负的一方。并根据y/n选项,判断是否要进行下一局的游戏。 2.课程设计要求 实现黑白两色棋子的对峙 开发环境:vc++6.0 实现目标: (1)熟悉的运用c语言程序编写代码。 (2)能够理清整个程序的运行过程并绘画流程图 (3)了解如何定义局部变量和整体变量; (4)学会上机调试程序,发现问题,并解决 (5)学习使用C++程序来了解游戏原理。 (6)学习用文档书写程序说明

摘要 本文的研究工作在于利用计算机模拟人脑进行下黑白棋,计算机下棋是人工智能领域中的一个研究热点,多年以来,随着计算机技术和人工智能技术的不断发展,计算机下棋的水平得到了长足的进步 该程序的最终胜负是由棋盘上岗双方的棋子的个数来判断的,多的一方为胜,少的一方为负。所以该程序主要运用的战术有削弱对手行动战术、四角优先战术、在游戏开局和中局时,程序采用削弱对手行动力战术,即尽量减少对手能够落子的位置;在游戏终局时则采用最大贪吃战术,即尽可能多的吃掉对手的棋子;而四角优先战术则是贯穿游戏的始终,棋盘的四角围稳定角,不会被对手吃掉,所以这里是兵家的必争之地,在阻止对手进角的同时,自己却又要努力的进角。 关键词:黑白棋;编程;设计

数据结构课程设计报告

《数据结构与算法》课程设计报告 学号: 班级序号: 姓名: 指导教师: 成绩: 中国地质大学信息工程学院地理信息系统系 2011年12 月

1.需求规格说明 【问题描述】 利用哈夫曼编码进行对已有文件进行重新编码可以大大提高减小文件大小,减少存储空间。但是,这要求在首先对一个现有文件进行编码行成新的文件,也就是压缩。在文件使用时,再对压缩文件进行解压缩,也就是译码,复原原有文件。试为完成此功能,写一个压缩/解压缩软件。 【基本要求】 一个完整的系统应具有以下功能: (1)压缩准备。读取指定被压缩文件,对文件进行分析,建立哈夫曼树,并给出分析结果(包括数据集大小,每个数据的权值,压缩前后文件的大小),在屏幕上输出。 (2)压缩。利用已建好的哈夫曼树,对文件进行编码,并将哈夫曼编码及文件编码后的数据一起写入文件中,形成压缩文件(*.Haf)。 (3)解压缩。打开已有压缩文件(*.Haf),读取其中的哈夫曼编码,构建哈夫曼树,读取其中的数据,进行译码后,写入文件,完成解压缩。 (4)程序使用命令行方式运行 压缩命令:SZip A Test.Haf 1.doc 解压缩命令:SZip X Test.Haf 2.doc或SZip X Test.Haf 用户输入的命令不正确时,给出提示。 (5)使用面向对象的思想编程,压缩/解压缩、哈夫曼构建功能分别构建类实现。 2.总体分析与设计 (1)设计思想: 1、压缩准备:1> 读文件,逐个读取字符,统计频率 2> 建立哈夫曼树 3> 获得哈弗曼编码 2、压缩过程: 1> 建立一个新文件,将储存权值和字符的对象数组取存储在文件头

数据结构课程设计题目选择

数据结构课程设计题目 说明: (1)选用语言:C或Java语言; (2)需要注明3人(可少于3人)小组各自承担和完成的任务(据此给予成绩); (3)如下带“*”的题目,“*”越多,难度越大一些,分值权重更高---要得到更高分数,推荐选择。 要求: (1) 用中文给出设计说明书(含重要子函数的流程图); (2) 给出测试通过、能实现相应功能的源代码; (3) 测试报告。 0、小学数学四则混合运算试题出题、评价、题库自动生成与组卷系统(****)---已经有2组选择 任务: (1)将随机给出的四则混合运算表达式显示在计算机显示器上,要求应试者给出答案;并且使用堆栈对该表达式求值,同给出的答案进行比较,判断 正确和错误。给出鼓励信息和嘉奖信息; (2)保存多人在不同时间应试的题目与他(或她)给出的答案,评价所出题目的难易程度(通过多人回答正确与否的情况给出),形成题库; (3)按照用户给出的题目难易程度指标(例如让50人的得分满足怎样的正态分布,如90分以上10%,80分以上30%,70分以上30%,60分以上20%,60分 以下10%),从题库中抽取不同的题目,组成试卷。 要求:随机产生的题目中,参加运算的数据随机、运算符随机。题目涉及加减乘除,带括弧的混合运算;随时可以退出;保留历史分数,能回顾历史,给出与历史分数比较后的评价。 1、集合的并、交和差运算---已经有1组选择 任务:编制一个能演示执行集合的并、交和差运算的程序。 要求: (1) 集合的元素限定为小写字母字符[…a?..?z?] 。 (2) 演示程序以用户和计算机的对话方式执行。 实现提示:以链表表示集合。 选作内容: (1) 集合的元素判定和子集判定运算。 (2) 求集合的补集。 (3) 集合的混合运算表达式求值。 (4) 集合的元素类型推广到其他类型,甚至任意类型。 2、停车场管理------已经有2组选择 任务:设停车场是一个可以停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次有北向南排列(大门在最南端,最先到达的第一车停放在车场的最北端),若车场内已停满n辆车,那么后来的车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。 要求:以栈模拟停车场,以队列模拟车场外的便道。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码以及到达或离去的时刻。对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停车不收费)。栈以顺序存储结构实现,队列以链表结构实现。 3、哈夫曼码的编/译码系统(**)---已经有1组选择

数据结构课程设计(附代码)-数据结构设计说明

应用技术学院课程设计报告 课程名称《数据结构课程设计》 设计题目猴子选大王;建立二叉树;各种排序;有序表的合并;成绩管理系统;院系计算机科学与信息工程专业计算机科学与技术班级 学号指导教师日期 一.目的与要求 1. 巩固和加深对常见数据结构的理解和掌握 2. 掌握基于数据结构进行算法设计的基本方法 3. 掌握用高级语言实现算法的基本技能 4. 掌握书写程序设计说明文档的能力 5. 提高运用数据结构知识及高级语言解决非数值实际问题的能力 二.课程设计容说明 1. 项目一 (1) 对设计任务容的概述 学生成绩管理** 任务:要现对学生资料的录入、浏览、插入和删除等功能。 输入:设学生成绩以记录形式存储,每个学生记录包含的信息有:学号和各门课程的成绩,设学生成绩至少3门以上。存储结构:采用线性链式结构。 (2) 详细设计 LinkList *create():输入学生成绩记录函数; void print(LinkList *head):显示全部记录函数 LinkList *Delete(LinkList *head):删除记录函数 LinkList *Insert(LinkList *head):插入记录函数 void menu_select():菜单选择 void ScoreManage():函数界面 (3) 程序流程图

(4) 程序模块及其接口描述 该程序可以分为以下几个模块: 1、菜单选择:void menu_select(); 提供五种可以选择的操作,在main函数过switch语句调用菜单menu_select()函数,进入不同的功能函数中完成相关操作。 2、输入功能:LinkList *create(); 通过一个for循环语句的控制,可以一次完成无数条记录的输入。并将其存入链

数据结构课程设计独立题目

题目2:运动会分数统计 1.问题描述 参加运动会有n个学校,学校编号为1……n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1……m,女子m+1……m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。(m<=20,n<=20) 2.功能要求 1)可以输入各个项目的前三名或前五名的成绩; 2)能统计各学校总分; 3)可以按学校编号、学校总分、男女团体总分排序输出; 4)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。 存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。 。 题目6:哈夫曼编/译码器 1.问题描述 利用哈夫曼编码进行信息通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码(复原)。对于双工信道(即可以双向传输信息的信道),每端都需要一个完整的编/译码系统。试为这样的信息收发站写一个哈夫曼编/译码系统。 2.功能要求 I:初始化(Initialization)。从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树,并将它存于文件hfmTree中。 E:编码(Encoding)。利用已建好的哈夫曼树(如不在内存,则从文件htmTree 中读入),对文件ToBeTran中的正文进行编码,然后将结果存入文件CodeFile 中。 D:译码(Decoding)。利用已建好的哈夫曼树将文件CodeFile中的代码进行译码,结果存入文件TextFile中。 P:印代码文件(Print)。将文件CodeFile以紧凑格式显示在终端上,每行50个代码。同时将此字符形式的编码写入文件CodePrint中。 T:印哈夫曼树(Tree Printing)。将已在内存中的哈夫曼树以直观的方式(树或凹入表形式)显示在终端上,同时将此字符形式的哈夫曼树写入文件TreePrint 中。 题目9:构造可以使n个城市连接的最小生成树 1.问题描述 给定一个地区的n个城市间的距离网,用Prim算法或Kruskal算法建立最小生成树,并计算得到的最小生成树的代价。 2.功能要求 城市间的距离网采用邻接矩阵表示,邻接矩阵的存储结构定义采用课本中给出的定义,若两个城市之间不存在道路,则将相应边的权值设为自己定义的无穷大值。要求在屏幕上显示得到的最小生成树中包括了哪些城市间的道路,并显示得到的最小生成树的代价。

数据结构课程设计题目及要求

实验一~实验四任选一题;实验五~实验九任选一题。 实验一运动会分数统计 一、实验目的: (1)熟练掌握线性表的两种存储方式 (2)掌握链表的操作和应用。 (3)掌握指针、结构体的应用 (4)按照不同的学校,不同项目和不同的名次要求,产生各学校的成绩单、团体总分报表。 二、实验内容: 【问题描述】 参加运动会的n个学校编号为1~n。比赛分成m个男子项目和w个女子项目,项目编号分别为1~m和m+1~m+w。由于各项目参加人数差别较大,有些项目取前五名,得分顺序为7,5,3,2,1;还有些项目只取前三名,得分顺序为5,3,2。写一个统计程序产生各种成绩单和得分报表。 【基本要求】 产生各学校的成绩单,内容包括各校所取得的每项成绩的项目号、名次(成绩)、姓名和得分;产生团体总分报表,内容包括校号、男子团体总分、女子团体总分和团体总分。 【测试数据】 对于n=4,m=3,w=2,编号为奇数的项目取前五名,编号为偶数的项目取前三名,设计一组实例数据。 【实现提示】 可以假设m≤20,m≤30,w≤20,姓名长度不超过20个字符。每个项目结束时,将其编号、类型符(区分取前五名还是前三名)输入,并按名次顺序输入运动员姓名、校名(和成绩)。 【选作内容】 允许用户指定某些项目可采取其他名次取法。

实验二停车场管理 一、实验目的: (1)熟练掌握栈顺存和链存两种存储方式。 (2)掌握栈的基本操作及应用。 (3)以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。 二、实验内容: 【问题描述】 设停车场是一个可停放n辆汽车的长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车信放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场院,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。 【基本要求】 以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码以及到达或离去的时刻。对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。栈以顺序结构实现,队列以链表结构实现。 【测试数据】 设n=2,输入数据为:(A,1,5),(A,1,15),(A,3,20),(A,4,25),(A,5,30),(D,2,35),(D,4,40),(E,0,0)。其中:A表示到达(Arrival);D表示离去(Departure);E表示输入结束(End)。 【实现提示】 需另设一个栈,临时停放为给要离去的汽车让路而从停车场退出来的汽车,也用顺序存储结构实现。输入数据按到达或离去的时刻有序。栈中每个元素表示一辆汽车,包含两个数据项:汽车的牌照号码和进入停车场的时刻。 【选作内容】 (1)两个栈共享空间,思考应开辟数组的空间是多少? (2)汽车可有不同种类,则他们的占地面积不同收费标准也不同,如1辆客车和1.5辆小汽车的占地面积相同,1辆十轮卡车占地面积相当于3辆小汽车的占地面积。(3)汽车可以直接从便道开走,此时排在它前面的汽车要先开走让路,然后再依次排到队尾。 (4)停放在便道上的汽车也收费,收费标准比停放在停车场的车低,请思考如何修改结构以满足这种要求。

数据结构课程设计报告范例

Guangxi University of Science and Technology 课程设计报告 课程名称:算法与编程综合实习 课题名称: 姓名: 学号: 院系:计算机学院 专业班级:通信121 指导教师: 完成日期:2012年12月15日

目录 第1部分课程设计报告 (3) 第1章课程设计目的 (3) 第2章课程设计内容和要求 (4) 2.1 问题描述 (4) 2.2 设计要求 (4) 第3章课程设计总体方案及分析 (4) 3.1 问题分析 (4) 3.2 概要设计 (7) 3.3 详细设计 (7) 3.4 调试分析 (10) 3.5 测试结果 (10) 3.6 参考文献 (12) 第2部分课程设计总结 (13) 附录(源代码) (14)

第1部分课程设计报告 第1章课程设计目的 仅仅认识到队列是一种特殊的线性表是远远不够的,本次实习的目的在于使学生深入了解队列的特征,以便在实际问题背景下灵活运用它,同时还将巩固这种数据结构的构造方………………………………………………………………………………………………………………………………………………………………………………………..(省略)

第2章课程设计内容和要求 2.1问题描述: 迷宫问题是取自心理学的一个古典实验。在该实验中,把一只老鼠从一个无顶大盒子的门放入,在盒子中设置了许多墙,对行进方向形成了多处阻挡。盒子仅有一个出口,在出口处放置一块奶酪,吸引老鼠在迷宫中寻找道路以到达出口。对同一只老鼠重复进行上述实验,一直到老鼠从入口走到出口,而不走错一步。老鼠经过多次试验最终学会走通迷宫的路线。设计一个计算机程序对任意设定的矩形迷宫如下图A所示,求出一条从入口到出口的通路,或得出没有通路的结论。 图A 2.2设计要求: 要求设计程序输出如下: (1) 建立一个大小为m×n的任意迷宫(迷宫数据可由用户输入或由程序自动生成),并在屏 幕上显示出来; (2)找出一条通路的二元组(i,j)数据序列,(i,j)表示通路上某一点的坐标。 (3)用一种标志(如数字8)在迷宫中标出该条通路; (4)在屏幕上输出迷宫和通路; (5)上述功能可用菜单选择。

数据结构课程设计题目

《数据结构》课程设计题目 1. 排序算法的性能分析 问题描述 设计一个测试程序,比较几种内部排序算法的关键字比较次数和移动次数以取得直观感受。 基本要求 (1)对冒泡排序、直接排序、选择排序、箱子排序、堆排序、快速排序及归并排序算法进行比较。 (2)待排序表的表长不小于100,表中数据随机产生,至少用5组不同数据作比较,比较指标:关键字参加比较次数和关键字的移动次数(关键字交换记为3次移动)。 (3)输出比较结果。 选做内容 (1)对不同表长进行比较。 (2)验证各算法的稳定性。 (3)输出界面的优化。 2. 排序算法思想的可视化演示—1 基本要求 排序数据随机产生,针对随机案例,对冒泡排序、箱子排序、堆排序、归并算法,提供排序执行过程的动态图形演示。 3. 排序算法思想的可视化演示—2 基本要求 排序数据随机产生,针对随机案例,,对插入排序、选择排序、基数排序、快速排序算法,提供排序执行过程的动态图形演示。 4. 线性表的实现与分析 基本要求 ①设计并实现线性表。 ②线性表分别采取数组(公式化描述)、单链表、双向链表、间接寻址存储方 式 ③针对随机产生的线性表实例,实现线性表的插入、删除、搜索操作动态演示(图 形演示)。 5. 等价类实现及其应用 问题描述:某工厂有一台机器能够执行n个任务,任务i的释放时间为r i(是一个整数),最后期限为d i(也是整数)。在该机上完成每个任务都需要一个单元的时间。一种可行的调

度方案是为每个任务分配相应的时间段,使得任务i的时间段正好位于释放时间和最后期限之间。一个时间段不允许分配给多个任务。 基本要求: 使用等价类实现以上机器调度问题。 等价类分别采取两种数据结构实现。 6. 一元稀疏多项式计算器 问题描述 设计一个一元稀疏多项式简单计算器。 基本要求 一元稀疏多项式简单计算器的基本功能是: (1)输入并建立多项式; (2)输出多项式,输出形式为整数序列:n,c1,e1,c2,e2,…,c n,e n,其中n是多项式的项数,c i,e i,分别是第i项的系数和指数,序列按指数降序排序; (3)多项式a和b相加,建立多项式a+b; (4)多项式a和b相减,建立多项式a-b; (5)计算多项式在x处的值; (6)计算器的仿真界面(选做) 7. 长整数的代数计算 问题描述 应用线性数据结构解决长整数的计算问题。设计数据结构完成长整数的表示和存储,并编写算法来实现两长整数的加、减、乘、除等基本代数运算。 基本要求 ①长整数长度在一百位以上。 ②实现两长整数在取余操作下的加、减、乘、除操作,即实现算法来求解a+b mod n, a-b mod n, a?b mod n, a÷b mod n。 ③输入输出均在文件中。 ④分析算法的时空复杂性。 8. 敢死队问题。 有M个敢死队员要炸掉敌人的一碉堡,谁都不想去,排长决定用轮回数数的办法来决定哪个战士去执行任务。如果前一个战士没完成任务,则要再派一个战士上去。现给每个战士编一个号,大家围坐成一圈,随便从某一个战士开始计数,当数到5时,对应的战士就去执行任务,且此战士不再参加下一轮计数。如果此战士没完成任务,再从下一个战士开始数数,被数到第5时,此战士接着去执行任务。以此类推,直到任务完成为止。排长是不愿意去的,假设排长为1号,请你设计一程序,求出从第几号战士开始计数才能让排长最后一个留下来而不去执行任务。 要求:至少采用两种不同的数据结构的方法实现。 9. 简单计算器

数据结构课程设计报告

编号 课程设计 题目 1、一元稀疏多项式计算器 2、模拟浏览器操作程序 3、背包问题的求解 4、八皇后问题 二级学院计算机科学与工程学院 专业计算机科学与技术 班级 2011级 37-3班 学生姓名 XX 学号 XXXXXXXXXX 指导教师 XXXXX 评阅教师 时间 1、一元稀疏多项式计算器 【实验内容】 一元稀疏多项式计算器。

【问题描述】 设计一个一元稀疏多项式简单计算器。 【需求分析】 其基本功能包括: (1)输入并建立多项式; (2)输出多项式,输出形式为整数序列为:n,c1,e1,c2,e2,……,cn,en,其中n 是多项式的项数,ci,ei分别是第i项的系数和指数,序列按指数降序排序;(3)多项式a和b相减,建立多项a+b; (4)多项式a和b相减,建立多项式a-b; (5)计算多项式在x处的值; (6)计算器的仿真界面(选做); 【概要设计】 -=ADT=- { void input(Jd *ha,Jd *hb); void sort(dnode *h)

dnode *operate(dnode *a,dnode *b) float qiuzhi(int x,dnode *h) f",sum); printf("\n"); } 【运行结果及分析】 (1)输入多项式:

(2)输出多项式(多项式格式为:c1x^e1+c2x^e2+…+cnx^en): (3)实现多项式a和b相加: (4)实现多项式a和b相减: (5)计算多项式在x处的值:

2、模拟浏览器操作程序 【实验内容】 模拟浏览器操作程序 【问题描述】 标准Web浏览器具有在最近访问的网页间后退和前进的功能。实现这些功能的一个方法是:使用两个栈,追踪可以后退和前进而能够到达的网页。在本题中,要求模拟实现这一功能。 【需求分析】 需要支持以下指令: BACK:将当前页推到“前进栈”的顶部。取出“后退栈”中顶端的页面,使它成为当前页。若“后退栈”是空的,忽略该命令。 FORWARD:将当前页推到“后退栈”的顶部。取出“前进栈”中顶部的页面,使它成为当前页。如果“前进栈”是空的,忽略该命令。 VISIT:将当前页推到“后退栈”的顶部。使URL特指当前页。清空“前进栈”。 QUIT:退出浏览器。 假设浏览器首先加载的网页URL是:http:

数据结构课程设计说明书讲解

安徽理工大学 数据结构 课程设计说明书题目: 一元多项式计算 院系:计算机科学与工程学院 专业班级:数字媒体13-1班 学号: 2013303102 学生姓名:钱福琛 指导教师:梁兴柱 2015年 1月 9 日

安徽理工大学课程设计(论文)任务书计算机科学与工程学院

2014年 11 月 10 日安徽理工大学课程设计(论文)成绩评定表

目录 1 问题描述 2 功能描述 2.1 课题要求........................................... 2.2 软件格式规定....................................... 3 设计 2 3.1 相关函数介绍说明................................... 3.2 主程序的流程基函数调用说明......................... 4 程序设计 4 4.1 多项式存储的实现................................... 4.2 加减乘除算法....................................... 4.2.1加法运算的实现............................... 4.2.2减法运算的实现............................... 4.2.3乘法运算的实现............................... 4.2.4除法运算的实现............................... 4.3 函数调用关系图..................................... 5 运行测试

数据结构课程设计题目表

《数据结构》课程设计课题表 课题1:设计出链表结构的相关函数库,以便在程序设计中调用。要求: (1)包括线性表的各种基本函数以及常用函数(自己确定函数、函数形式及理由)。 (2)最好能借助语言环境实现图形显示功能,以便能将抽象的数据结构以图形方式显示出来,将复杂的运行过程以动态方式显示出来。 (3)给出若干例程,演示通过调用自己的库函数来实现相关问题的求解。 课题2:设计出顺序表结构的相关函数库,以便在程序设计中调用。要求: (1)包括线性表的各种基本函数以及常用函数(自己确定函数、函数形式及理由)。 (2)最好能借助语言环境实现图形显示功能,以便能将抽象的数据结构以图形方式显示出来,将复杂的运行过程以动态方式显示出来。 (3)给出若干例程,演示通过调用自己的库函数来实现相关问题的求解。 课题3:设计程序以实现任意两个高次多项式的加法和乘法运算。 要求: (1)所设计的数据结构应尽可能节省存储空间。 (2)程序的运行时间应尽可能少。 课题4:设计一个模拟计算器的程序,要求能对包含加、减、乘、除、括号运算符及SQR和ABS函数的任意整型表达式进行求解。 要求:要检查有关运算的条件,并对错误的条件产生报警。 课题5:设计出二叉链表结构的相关函数库,以便在程序设计中调用。要求: (1)包括二叉树的各种基本函数以及常用函数(自己确定函数、函数形式及理由)。 (2)最好能借助语言环境实现图形显示功能,以便能将抽象的数据结构以图形方式显示出来,将复杂的运行过程以动态方式显示出来。 (3)给出若干例程,演示通过调用自己的库函数来实现相关问题的求解。 课题6:设计出树结构的相关函数库,以便在程序设计中调用。要求: (1)包括树结构的存储结构及各种基本函数以及常用函数(自己确定函数、函数形式及理由)。 (2)最好能借助语言环境实现图形显示功能,以便能将抽象的数据结构以图形方式显示出来,将复杂的运行过程以动态方式显示出来。 (3)给出若干例程,演示通过调用自己的库函数来实现相关问题的求解。 课题7:选择合适的存储结构表示广义表,并能实现下列运算要求: (1)用大写字母表示广义表,用小写字母表示原子,并提供设置广义表的值的功能。 (2)取广义表L的表头和表尾的函数head(L)和tail(L)。

数据结构课程设计报告

数据结构课程设计 设计说明书 TSP 问题 起止日期:2016 年 6 月27 日至2016 年7 月 1 日 学生姓名 班级 学号 成绩 指导教师( 签字) 2016 年7 月 1 日

目录 第1 章需求分析.................................................................................1... 1.1 简介 (1) 1.2 系统的开发背景 (1) 1.3 研究现状 (1) 第2 章概要设计.................................................................................2... 2.1 系统开发环境和技术介绍 (2) 2.2 系统需求分析 (2) 2.2.1 总体功能分析 (2) 2.2.2 核心功能分析 (3) 第3 章详细设计...................................................................................4... 3.1 系统开发流程 (4) 3.2 系统模块设计 (4) 3.3 系统结构 (6) 3.2 系统流程图 (6) 第4 章调试分析...................................................................................7... 4.1 程序逻辑调试 (7) 4.2 系统界面调试 (8) 第5 章测试结果...................................................................................9... 5.1 测试环境 (9) 5.2 输入输出测试项目 (9) 5.3 测试结果 (10) 结论.....................................................................................................1..1.. 参考文献................................................................................................1..1. 附录.......................................................................................................1..2..

关于数据结构课程设计心得体会范文

关于数据结构课程设计心得体会范文 心得体会是指一种读书、实践后所写的感受性文字。是指将学习的东西运用到实践中去,通过实践反思学习内容并记录下来的文字,近似于经验总结。下面是小编搜集的关于数据结构课程设计心得体会范文,希望对你有所帮助。 关于数据结构课程设计心得体会(1) 这学期开始两周时间是我们自己选题上机的时间,这学期开始两周时间是我们自己选题上机的时间,虽然上机时间只有短短两个星期但从中确实学到了不少知识。上机时间只有短短两个星期但从中确实学到了不少知识。 数据结构可以说是计算机里一门基础课程,据结构可以说是计算机里一门基础课程,但我觉得我们一低计算机里一门基础课程定要把基础学扎实,定要把基础学扎实,然而这次短短的上机帮我又重新巩固了 c 语言知识,让我的水平又一部的提高。数据结构这是一门语言知识让我的水平又一部的提高。数据结构这是一门知识,纯属于设计的科目,它需用把理论变为上机调试。 纯属于设计的科目,它需用把理论变为上机调试。它对我们来说具有一定的难度。它是其它编程语言的一门基本学科。来说具有一定的难度。它是其它编程语言的一门基本学科。我选的上机题目是交叉合并两个链表,对这个题目,我选的上机题目是交叉合并两个链表,对这个题目,我觉得很基础。刚开始调试代码的时候有时就是一个很小的错觉得很基础。 刚开始调试代码的时候有时就是一个很小的错调试代码的时候误,导致整个程序不能运行,然而开始的我还没从暑假的状导致整个程序不能运行,态转到学习上,每当程序错误时我都非常焦躁,态转到学习上,每当程序错误时我都非常焦躁,甚至想到了放弃,但我最终找到了状态,一步一步慢慢来,放弃,但我最终找到了状态,一步一步慢慢来,经过无数次的检查程序错误的原因后慢慢懂得了耐心是一个人成功的必然具备的条件! 同时,通过此次课程设计使我了解到,必然具备的条件! 同时,通过此次课程设计使我了解到,硬件语言必不可缺少,要想成为一个有能力的人,必须懂得件语言必不可缺少,要想成为一个有能力的人,硬件

数据结构课程设计(附代码)

上海应用技术学院课程设计报告 课程名称《数据结构课程设计》 设计题目猴子选大王;建立二叉树;各种排序;有序表的合并;成绩管理系统;院系计算机科学与信息工程专业计算机科学与技术班级 姓名学号指导教师日期 一.目的与要求 1. 巩固和加深对常见数据结构的理解和掌握 2. 掌握基于数据结构进行算法设计的基本方法 3. 掌握用高级语言实现算法的基本技能 4. 掌握书写程序设计说明文档的能力 5. 提高运用数据结构知识及高级语言解决非数值实际问题的能力 二.课程设计内容说明 1. 项目一 (1) 对设计任务内容的概述 学生成绩管理** 任务:要求实现对学生资料的录入、浏览、插入和删除等功能。 输入:设学生成绩以记录形式存储,每个学生记录包含的信息有:学号和各门课程的成绩,设学生成绩至少3门以上。存储结构:采用线性链式结构。 (2) 详细设计 LinkList *create():输入学生成绩记录函数; void print(LinkList *head):显示全部记录函数 LinkList *Delete(LinkList *head):删除记录函数 LinkList *Insert(LinkList *head):插入记录函数 void menu_select():菜单选择 void ScoreManage():函数界面

(3) 程序流程图 (4) 程序模块及其接口描述 该程序可以分为以下几个模块: 1、菜单选择:void menu_select(); 提供五种可以选择的操作,在main函数中通过switch语句调用菜单menu_select()函数,进入不同的功能函数中完成相关操作。

数据结构课程设计题目

数据结构课程设计 一、考核方法和容 根据课程设计过程中学生的学生态度、题目完成情况、课程设计报告书的质量和回答问题的情况等按照10%、40%、30%、20%加权综合打分。成绩评定实行优秀、良好、中等、及格和不及格五个等级。 评分标准: 优秀:答辩所有问题都能答出+报告良好 或报告良好+实现“提高部分”的功能; 良好:答辩所有问题都能答出+报告一般; 或报告一般+实现“提高部分”的功能; 中等:答辩大部分问题能答出+报告良好; 及格:答辩大部分问题能答出+报告一般; 以下四种,都不及格: 1)答辩几乎答不出问题; 2)报告几乎都是代码; 3)雷同部分达到60%; 4)课设报告与数据结构和c/c++关联不大。 课设报告的装订顺序如下: 任务书(签名,把题目要求贴在相应位置,注意下划线)-----目录(注意目录的格式,页码)-----1、设计任务(题目要求)-----2、需求分析(准备选用什么数据逻辑结构?数据元素包含哪些属性?需要哪些函数?为什么要这样设计?最后列出抽象数据类型定义)-----3、系统设计(设计实现抽象数据类型,包含选择什么物理存储方式?数据元素的结构体或类定义,以及各函数的设计思路,算法,程序流程图等)----4、编码实现(重要函数的实现代码)-----5、调试分析(选择多组测试数据、运行截图、结果分析)-----6、课设总结(心得体会)-----7、谢辞-----8、参考文献; 课设报告打印要求: B5纸打印,报告总页数控制在10—15页,报告中不能全是代码,报告中代码总量控制在3页。版式:无页眉,有页码,页码居中 字号:小四,单倍行距 字体:宋体+Times new Romar 截图:截图要配图的编号和图的题目,如:“图1 Insert函数流程图” 二、课程设计的题目 1.长整数的加法运算 2.通讯录管理系统的设计与实现——顺序表 3.广义表的应用 4.学生成绩管理系统的设计与实现 5.家谱管理系统的设计与实现

数据结构课程设计报告-学生成绩管理系统[]

武汉理工大学华夏学院课程设计报告书 课程名称:数据结构课程设计 题目:用C语言实现成绩统计程序的设计系名:信息工程系 专业班级:计算机1121 姓名:吴涛 学号:10210412104 指导教师:司晓梅 2016年3 月20日

武汉理工大学华夏学院信息工程系 课程设计任务书 课程名称:数据结构课程设计指导教师:司晓梅班级名称:计算机1121 开课系、教研室:信息系计算机 一、课程设计目的与任务 《数据结构》课程设计是为训练学生的数据组织能力和提高程序设计能力而设置的增强实践能力的课程。目的:学习数据结构课程,旨在使学生学会分析研究数据对象的特性,学会数据的组织方法,以便选择合适的数据的逻辑结构和存储结构以及相应操作,把现实世界中的问题转换为计算机内部的表示和处理,这就是一个良好的程序设计技能训练的过程。提高学生的程序设计能力、掌握基本知识、基本技能,提高算法设计质量与程序设计素质的培养就是本门课程的课程设计的目的。 任务:根据题目要求,完成算法设计与程序实现,并按规定写出课程设计报告。 二、课程设计的内容与基本要求 设计题目:用C语言实现成绩统计程序的设计 〔问题描述〕给出n个学生的m门课程的考试成绩信息,每条信息由姓名、课程代号与分数组成,要求设计算法: (1)输入每个人的各门课程的成绩,计算每人的平均成绩; (2)按平均成绩的高低次序,打印出个人的名次,平均成绩相同的为同一名次; (3)按名次列出每个学生的姓名和各科成绩; 〔基本要求〕学生的考试成绩必须通过键盘输入,且需对输出进行格式控制; 〔算法提示〕可以用选择排序、冒泡排序等多种排序算法求解; 具体要完成的任务是: A. 编制完成上述问题的C语言程序、进行程序调试并能得出正确的运行结果。 B. 写出规范的课程设计报告书; 三、课程设计步骤及时间进度和场地安排 时间:1周地点:现代教育中心 具体时间安排如下: 第一天:布置题目,确定任务、查找相关资料 第二天~第四天:功能分析,编写程序,调试程序、运行系统; 第五天上午:撰写设计报告; 第五天下午:程序验收、答辩。 四、课程设计考核及评分标准

相关文档
最新文档