数据结构 教学计划编制问题 实验5报告

数据结构 教学计划编制问题 实验5报告
数据结构 教学计划编制问题 实验5报告

HUNAN UNIVERSITY 实验五最终报告

题目:教学计划编制问题

学生姓名

学生学号

专业班级

指导老师

完成日期2014年5月15日

一、需求分析

1.输入形式:

用户通过键盘输入课程总数、每门课的课程编号(固定占3位的字母数字串)和直

接先修的课程号等的参数。

不对非法输入做处理,假定输入的数据都合法。

2.输出形式:

如果拓扑排序成功,输出拓扑排序后的教学计划编制的顺序;

如果拓扑排序不成功,输出排序错误信息,结束程序。

3.程序功能:对于用户输入的一组课程编号,根据输入的先修顺序创建邻接矩阵进行存储,并输出拓扑排序后的课程编号的顺序。

4.测试数据

输入:

输入课程总数:3

输入每门课的课程编号:A01

是否有直接先修的课程(T/F):F

输入每门课的课程编号:A02

是否有直接先修的课程(T/F):T

先修课程编号:A01

是否有直接先修的课程(T/F):F

输入每门课的课程编号:A03

是否有直接先修的课程(T/F):T

先修课程编号:A02

是否有直接先修的课程(T/F):F

输出:教学计划编制完成,课程修读顺序为:A01,A02,A03

(输入有误)课程输入错误!教学计划编制失败,请重新输入。

二、概要设计

抽象数据类型

题设要求使用一个有向图表示教学计划,顶点表示某门课程,有向边表示课程之间的先修关系,数据的对象是图中的每一个顶点和有向边。由此为本问题确定一个图的数据关系。

拓扑排序可以用顶点入度为0的方法实现,所以为实现拓扑排序的顶点顺序的存放,创建一个队列来存放。

图的ADT

数据对象:V,R(分别代表某门课程的顶点组成的一个顶点集 V 和代表课程先修关系的有向弧边组成的一个弧集 R。)

数据关系:VR={| v,w∈V 且P(v,w)}

表示从v 到w 的一条弧,并称v 为弧头,w 为弧尾。

基本操作:

int n(); //返回图中的顶点数

int first(int); //返回该点的第一条邻边

int next(int); //返回该店的下一条邻边

void setEdge(int,int,int); //为有向边设置权值

int getMark(int); //获得顶点的标志值

void setMark(int); //为顶点设置标志值

队列ADT

数据对象:int

数据关系:R={|a i-1,a i∈car,i=1,2,3….n}

约定a1 为队列头,an为队列尾。

基本操作:

queue(); //队列结构初始化

~queue(); //结构销毁操作

bool push(const int& it); //数据入列

bool pop(int& it); //数据出列

int size(); //获取队列长度

算法的基本思想

通过用户输入的顶点的个数(课程数)初始化一个表示有向图的相邻矩阵,课程编号作为相邻矩阵的行列值以及有向边的关系(课程先修关系)完成一个有向图的构建。为了检验图中顶点是否都经过拓扑排序,为每个顶点初始化一个标志值0,当一个顶点经过拓扑排序后更改该顶点标志值0。

对相邻矩阵棕的顶点进行入度为0的方法进行拓扑排序。排序结束后,遍历一次图中所有顶点的标志值,当有一个标志值为0时,输出错误信息,结束程序。否则,排序成功,输出排序后的顶点序列。

程序的流程

(1)初始化模块:输入课程总数,再输入相应数量的课程编号及每个课程的先修课程,用这些信息初始化一个有向图。

(2)拓扑排序模块:对有向图进行拓扑排序。

(3)输出模块:根据有向图是否为空输出。为空时,输出拓扑排序结果;不为空时输出输入错误提示。

各层次模块之间的调用关系

三、详细设计

物理数据类型

由于用户输入的课程个数不定,所以存储拓扑排序后的顶点的个数不定,由此用链式队列来存储排序后的顶点。为了检查图中是否有回路,把每一个顶点的标志值初始化为0。

(一)有向图的基本操作

1.初始化一个有向图

Graphm(int numVert)

{

int i,j;

numVertex = numVert; //顶点数

numEdge=0;

mark=new int[numVert]; //初始化标志数组

for(i=0;i

mark[i]=0; //每一个顶点的标志值初始化为0

matrix =(int**) new int*[numVertex];

for(i=0;i

matrix[i]=new int[numVertex]; //构建一个相邻矩阵

for(i=0;i

for(j=0;j

matrix[i][j]=0;

}

2.有向图的销毁

~Graphm()

{

delete []mark;

for(int i=0;i

delete [] matrix[i];

delete [] matrix; //销毁相邻矩阵

}

3.获取第一个邻居

int first(int v) //返回该点的第一条邻边

{

int i;

for(i=0;i

if(matrix[v][i]!=0) return i; //当顶点和顶点i有边时,返回顶点i的值return i;

}

int next(int v1,int v2) //获得v1的邻居v2

{

int i;

for(i=v2+1;i

if(matrix[v1][i]!=0) return i;

return i;

}

4.其他基本操作

void setEdge(int v1,int v2) //设置有向图的边

{

if(matrix[v1][v2]==0)

numEdge++;

matrix[v1][v2]=1;

}

int getMark(int v) //获取顶点标记的值

{return mark[v];}

int setMark(int v,int val) //设置访问的标记

{mark[v]=val;}

(二)拓扑排序

找到第一个入度为0 的点存入队列中,从有向图中删去此顶点以及所有以它为尾的

弧,再在这些点中找入度为0 的点。重复上述操作,直至图空,或者图不空但找不到无前驱的顶点为止,此时返回该队列。

queue topsort(Graphm G,queue Q,queue L, int n )

{

int count[100];

int v,w,i;

for(v=0;v

{count[v]=0;}

for(v=0;v

for(w=G.first(v);w

count[w]++;

for(v=0;v

if(count[v]==0) //找到度为0的点

{ Q.push(v); G.setMark(v,1); } //顶点进队列,并更改顶点标志值为1 while(Q.size()!=0)

{

i=Q.front();

Q.pop();

L.push(i);

for(w=G.first(i);w

{

count[w]--; //顶点度减一

if(count[w]==0) //找到度为0的点

{Q.push(w); G.setMark(w,1); } //顶点进队列,并更改顶点标志值为1 }

}

return L; //返回存放排序后顶点的队列

}

(三)队列基本操作

//压入队列

bool pop(char*& it)

{

if(length()==0) return false;

it=front->elem;

qnode* ltemp=front;

front=front->next;

delete ltemp;

if(front==NULL) rear=NULL;

size--;

return true;

}

//出队列

bool push(const char*& it){

if(rear==NULL)

front=rear=new qnode(it,NULL);

else //append

{

rear->next=new qnode(it,NULL);

rear=rear->next;

}

size++;

return true;

}

//获取队列长度

int size() const

{ return size; }

最后,判断图中是否有回路。可以通过遍历图中的每一个顶点的标记值,如果有一个为0,那么说明图中存在回路。

for(i=0;i

{ if(G.getMark(i)==0) //为0时表示该顶点未经过拓扑排序

{ cout<<"课程输入错误!教学计划编制失败,请重新输入。"<

exit(0); } }

算法的具体步骤

创建一个数组存储顶点信息,再构建一个邻接矩阵存储输入的课程编号(顶点),和课程先修关系(有向边)构成的有向图的信息,然后对邻接矩阵中的图的信息进行拓扑排序,把排序结果存放在一个队列中。如果一次排序结束后,遍历顶点标志值有为0,输出输入错误提示,结束程序;否则,输出队列中存储的课程编号序列。

流程图如下:

伪代码如下,

char v[100][5];

char v1[4],v2[4];

Graphm T;

queue S;

cin.get(n); //输入课程总数n

T.CreatGraphm(n);

cin.get(v); //输入每门课的编号,保存在*v[4]数组中

for(i=0;i

{

cout<

cin>>ch;

while(ch=='T')

{

GetNum(n2); //输入先修课程编号

T.setEdge(n2,i); //n2在前表示先修的顺序

cout<<"是否有直接先修的课程(T/F):";

cin>>ch;

}

}

S=topsort(T,Q,L,n); //对图T进行拓扑排序,排序序列存储在队列中返回到S

cout<<"教学计划编制完成,课程修读顺序为:"<

printout(S); //输出排序后的顶点序列

}

算法的时空分析及改进设想

因为图的邻接矩阵是一个|V|×|V|矩阵,所以邻接矩阵的空间代价为Θ(|V|^2),对于有n个顶点的和E条弧的有向图而言,对此图的拓扑排序算法时间复杂度为Θ(V+E)

输入和输出的格式

输入:

1.输入课程数n---- cin.get(n);

cout<<"输入课程总数:";

cin<

2.输入每门课的课程编号---- cin.get(v);

for(i=0;i

{

cout<<"输入每门课的课程编号:"<

cin.get();

cin.getline(v1,4);

strcpy(v[i],v1); //要用字符串拷贝函数,用等号不能正确的赋值!!

}

3.获得先修的课程编号----GetNum(n2);

cout<<"先修课程编号:";

cin.get();

in.getline(v2,4);

n2=getNum(v,n,v2);

输出:

1.编制成功,把队列S中的顶点序列输出。---- printout(S);

for(i=0;i

{

j=S.front();

cout<

S.pop();

}

2.编制失败,图中有回路,输出错误信息,结束程序。

if(G.getMark(i)==0) //为0时表示该顶点未经过拓扑排序

{

cout<<"课程输入错误!教学计划编制失败,请重新输入。"<

exit(0);

}

四、测试数据

编制成功,003->001->002

编制失败,001->002,002->001

数据结构 教学计划编制问题 实验5报告

HUNAN UNIVERSITY 实验五最终报告 题目:教学计划编制问题 学生姓名 学生学号 专业班级 指导老师 完成日期2014年5月15日

一、需求分析 1.输入形式: 用户通过键盘输入课程总数、每门课的课程编号(固定占3位的字母数字串)和直 接先修的课程号等的参数。 不对非法输入做处理,假定输入的数据都合法。 2.输出形式: 如果拓扑排序成功,输出拓扑排序后的教学计划编制的顺序; 如果拓扑排序不成功,输出排序错误信息,结束程序。 3.程序功能:对于用户输入的一组课程编号,根据输入的先修顺序创建邻接矩阵进行存储,并输出拓扑排序后的课程编号的顺序。 4.测试数据 输入: 输入课程总数:3 输入每门课的课程编号:A01 是否有直接先修的课程(T/F):F 输入每门课的课程编号:A02 是否有直接先修的课程(T/F):T 先修课程编号:A01 是否有直接先修的课程(T/F):F 输入每门课的课程编号:A03 是否有直接先修的课程(T/F):T 先修课程编号:A02 是否有直接先修的课程(T/F):F 输出:教学计划编制完成,课程修读顺序为:A01,A02,A03 (输入有误)课程输入错误!教学计划编制失败,请重新输入。 二、概要设计 抽象数据类型 题设要求使用一个有向图表示教学计划,顶点表示某门课程,有向边表示课程之间的先修关系,数据的对象是图中的每一个顶点和有向边。由此为本问题确定一个图的数据关系。 拓扑排序可以用顶点入度为0的方法实现,所以为实现拓扑排序的顶点顺序的存放,创建一个队列来存放。 图的ADT 数据对象:V,R(分别代表某门课程的顶点组成的一个顶点集 V 和代表课程先修关系的有向弧边组成的一个弧集 R。) 数据关系:VR={| v,w∈V 且P(v,w)} 表示从v 到w 的一条弧,并称v 为弧头,w 为弧尾。 基本操作: int n(); //返回图中的顶点数 int first(int); //返回该点的第一条邻边 int next(int); //返回该店的下一条邻边 void setEdge(int,int,int); //为有向边设置权值 int getMark(int); //获得顶点的标志值 void setMark(int); //为顶点设置标志值 队列ADT

数据结构实验报告格式

《数据结构课程实验》大纲 一、《数据结构课程实验》的地位与作用 “数据结构”是计算机专业一门重要的专业技术基础课程,是计算机专业的一门核心的关键性课程。本课程较系统地介绍了软件设计中常用的数据结构以及相应的存储结构和实现算法,介绍了常用的多种查找和排序技术,并做了性能分析和比较,内容非常丰富。本课程的学习将为后续课程的学习以及软件设计水平的提高打下良好的基础。 由于以下原因,使得掌握这门课程具有较大的难度: (1)内容丰富,学习量大,给学习带来困难; (2)贯穿全书的动态链表存储结构和递归技术是学习中的重点也是难点; (3)所用到的技术多,而在此之前的各门课程中所介绍的专业性知识又不多,因而加大了学习难度; (4)隐含在各部分的技术和方法丰富,也是学习的重点和难点。 根据《数据结构课程》课程本身的技术特性,设置《数据结构课程实验》实践环节十分重要。通过实验实践内容的训练,突出构造性思维训练的特征, 目的是提高学生组织数据及编写大型程序的能力。实验学时为18。 二、《数据结构课程实验》的目的和要求 不少学生在解答习题尤其是算法设计题时,觉得无从下手,做起来特别费劲。实验中的内容和教科书的内容是密切相关的,解决题目要求所需的各种技术大多可从教科书中找到,只不过其出现的形式呈多样化,因此需要仔细体会,在反复实践的过程中才能掌握。 为了帮助学生更好地学习本课程,理解和掌握算法设计所需的技术,为整个专业学习打好基础,要求运用所学知识,上机解决一些典型问题,通过分析、设计、编码、调试等各环节的训练,使学生深刻理解、牢固掌握所用到的一些技术。数据结构中稍微复杂一些的算法设计中可能同时要用到多种技术和方法,如算法设计的构思方法,动态链表,算法的编码,递归技术,与特定问题相关的技术等,要求重点掌握线性链表、二叉树和树、图结构、数组结构相关算法的设计。在掌握基本算法的基础上,掌握分析、解决实际问题的能力。 三、《数据结构课程实验》内容 课程实验共18学时,要求完成以下六个题目: 实习一约瑟夫环问题(2学时)

(完整版)数据结构实验报告全集

数据结构实验报告全集 实验一线性表基本操作和简单程序 1 .实验目的 (1 )掌握使用Visual C++ 6.0 上机调试程序的基本方法; (2 )掌握线性表的基本操作:初始化、插入、删除、取数据元素等运算在顺序存储结构和链表存储结构上的程序设计方法。 2 .实验要求 (1 )认真阅读和掌握和本实验相关的教材内容。 (2 )认真阅读和掌握本章相关内容的程序。 (3 )上机运行程序。 (4 )保存和打印出程序的运行结果,并结合程序进行分析。 (5 )按照你对线性表的操作需要,重新改写主程序并运行,打印出文件清单和运行结果 实验代码: 1)头文件模块 #include iostream.h>// 头文件 #include// 库头文件------ 动态分配内存空间 typedef int elemtype;// 定义数据域的类型 typedef struct linknode// 定义结点类型 { elemtype data;// 定义数据域 struct linknode *next;// 定义结点指针 }nodetype; 2)创建单链表

nodetype *create()// 建立单链表,由用户输入各结点data 域之值, // 以0 表示输入结束 { elemtype d;// 定义数据元素d nodetype *h=NULL,*s,*t;// 定义结点指针 int i=1; cout<<" 建立一个单链表"<> d; if(d==0) break;// 以0 表示输入结束 if(i==1)// 建立第一个结点 { h=(nodetype*)malloc(sizeof(nodetype));// 表示指针h h->data=d;h->next=NULL;t=h;//h 是头指针 } else// 建立其余结点 { s=(nodetype*) malloc(sizeof(nodetype)); s->data=d;s->next=NULL;t->next=s; t=s;//t 始终指向生成的单链表的最后一个节点

数据结构(C++)课程设计报告--教学计划编制问题

数据结构(C++)课程设计报告--教学计划编制问题

上海电力学院 数据结构(C++)课程设计 题目: 教学计划编制问题 姓名:石鑫磊 学号:20113296 院系:计算机科学与技术学院 专业年级:信息安全2011级 2013年07月04日

一、设计题目 大学的每个专业都要编制教学计划。假设任何专业都有固定的学习年限,每学年含两学期,每学期的时间长度和学分上限都相等。每个专业开设的课程都是确定的,而且课程的开设时间的安排必须满足先修关系。每个课程的先修关系都是确定的,可以有任意多门,也可以没有。每一门课程恰好一个学期。试在这样的情况下设置一个教学计划编制程序。 在大学的某个专业中选取几个课程作为顶点,通过各门课的先修关系来构建个图,该图用邻接表来存储,邻接表的头结点存储每门课的信息。 本程序的目的是为用户编排课程,根据用户输入的信息来编排出每学期要学的课程。 二、需求分析 (一)运行环境(软、硬件环境) 设计环境和器材—— 硬件:计算机 软件:Microsoft Visula C++ 在本课程设计中,系统开发平台为Windows XP或Win 7,程序运行环境为Visual C++ 6.0,程序设计语言为C++。Visual C++一般分为三个版本:学习版、专业版和企业版,不同版本适合于不同类型的应用开发。实验中可以使用这三个版本的任意一种,在本课程设计中,以Visual C++ 6.0为编程环境。 Visual C++以拥有“语法高亮”,IntelliSense(自动编译功能)以及高级除错功能而著称。比如,它允许用户进行远程调试和单步执行等。还有允许用户在调试期间重新编译被修改的代码,而不必重新启动正在调试的程序。其编译及建置系统以预编译头文件、最小重建功能及累加链接著称。这些特征明显缩短程式编辑、编译及链接的时间花费,在大型软件计划上尤其显著。 Visual C++ 6.0秉承Visual C++ 以前版本的优异特性,为用户提供了一套良好的开发环境,主要包括文本编辑器、资源编辑器、工程创建工具和Debugger调试器等等。用户可以在集成开发环境中创建工程,打开工程,建立、打开和编辑文本,编译、链接、运行和调试应用程序。 (二)输入的形式和输入值的范围 数据输入的方式是键盘输入。输入的数据多是整型的或是浮点型的,还有一些字符(以中文的形式)。输入的数值型的数据大都是小于100的数值。 (三)输出的形式描述 输出的是教学编制计划,就是形如:“第二学期学的课程有:普通物理线性代数汇编语言”这样的形式。 (四)功能描述 输入参数包括:学期总数,一学期的学分上限,每门课的课程号(固定占3位的字母数字串)、学分和直接先修课的课程号。

数据结构实验报告

数据结构实验报告 一.题目要求 1)编程实现二叉排序树,包括生成、插入,删除; 2)对二叉排序树进行先根、中根、和后根非递归遍历; 3)每次对树的修改操作和遍历操作的显示结果都需要在屏幕上用树的形状表示出来。 4)分别用二叉排序树和数组去存储一个班(50人以上)的成员信息(至少包括学号、姓名、成绩3项),对比查找效率,并说明在什么情况下二叉排序树效率高,为什么? 二.解决方案 对于前三个题目要求,我们用一个程序实现代码如下 #include #include #include #include "Stack.h"//栈的头文件,没有用上 typedefintElemType; //数据类型 typedefint Status; //返回值类型 //定义二叉树结构 typedefstructBiTNode{ ElemType data; //数据域 structBiTNode *lChild, *rChild;//左右子树域 }BiTNode, *BiTree; intInsertBST(BiTree&T,int key){//插入二叉树函数 if(T==NULL) { T = (BiTree)malloc(sizeof(BiTNode)); T->data=key; T->lChild=T->rChild=NULL; return 1; } else if(keydata){ InsertBST(T->lChild,key); } else if(key>T->data){ InsertBST(T->rChild,key); } else return 0; } BiTreeCreateBST(int a[],int n){//创建二叉树函数 BiTreebst=NULL; inti=0; while(i

最新教学计划编制问题讲课稿

目录 1 课题需求描述 (3) 1.1 教学计划编制问题 (3) 1.2 进制转换 (3) 2 总体功能与数据结构设计 (4) 2.1 总体功能结构 (4) 2.2 数据结构设计 (5) 3 算法设计和程序设计 (7) 3.1 教学计划编制问题 (7) 3.2 进制转换问题 (10) 4 调试与测试 (24) 4.1 教学计划编制问题调试结果 (24) 4.2 进制转换问题调试结果 (26) 5 设计总结 (28) 6 程序代码 (30)

1 课题需求描述 1.1 教学计划编制问题 大学的每个专业都要制订教学计划。假设任何专业都有固定的学习年限,每学年含两学期,每学期的时间长度和学分上限均相等。每个专业开设的课程都是确定的,而且课程在开设时间的安排必须满足先修关系。每门课程有哪些先修课程是确定的,可以有任意多门,也可以没有。每门课恰好占一个学期。在这样的前提下设计一个教学计划编制程序。通过输入实际的课程及先后关系。结合每学期的学分及课程数,制定好学习计划。在输入相关数据后,程序会安排好每学期的课程。 1.2 进制转换 进制数制是人们利用符号进行计数的科学方法。数制有很多种,在计算机中常用的数制有:十进制,二进制,八进制和十六进制。十六进制数有两个基本特点:它由十六个字符0~9以及A,B,C,D,E,F组成(它们分别表示十进制0~15),十六进制数运算规律逢十六进一。 要求: (1)输入一个十进制数N,将它转换成R进制数输出,并可以进行你转换。 (2)输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2<=R<=16)。 (3)为每个测试实例输出转换后的数,每个输出占一行。如果R大于10,则对应的数字规则参考16进制(比如,10用A表示, 等等)。

数据结构 实验五 教学计划编制问题 最终实验报告

HUNAN UNIVERSITY 课程实习报告 题目教学计划编制问题 学生姓名 学生学号 专业班级 指导老师李晓鸿 完成日期2014年12月16日

一、需求分析 1.问题描述: 用有向网表示教学计划,其中顶点表示某门课程,有向边表示课程之间的先修关系(如果A课程是B课程的先修课程,那么A到B之间有一条有向边从A指向B)。设计一个教学计划编制程序,获取一个不冲突的线性的课程教学流程。(课程线性排列,每门课上课时其先修课程已经被安排)。 2.程序功能: 本程序要求根据所输入的课程及课程间的先修关系,得到一个不冲突的线性的课程表。 3.输入的形式和输入值的范围 用户通过键盘输入课程总数、每门课的课程编号(固定占3位的字母数字串)和直接先修的课程号等的参数。本程序不对非法输入做处理,即假设输入都是合法的。 4.输出的形式 如果排序成功,输出排序后的教学计划表;否则输出错误提示信息,表示所输入的课程不能构成一个完全满足教学要求的课程表。 5.测试数据: 输入: 请输入课程的个数和课程关系的个数:4 3 请输入点,即课程编号1:A1 请输入点,即课程编号2:A2 请输入点,即课程编号3:A3 请输入点,即课程编号4:A4 请输入有向边,即课程的先后关系1:A2 A4 请输入有向边,即课程的先后关系2:A4 A3 请输入有向边,即课程的先后关系3:A3 A1 请输入课程的个数和课程关系的个数:3 3 请输入点,即课程编号1:A1 请输入点,即课程编号2:A2 请输入点,即课程编号3:A3 请输入有向边,即课程的先后关系1:A2 A1 请输入有向边,即课程的先后关系2:A1 A3 请输入有向边,即课程的先后关系3:A3 A2 输出: 课程的选修的先后顺序为:A2 A4 A3 A1 课程的选修的先后顺序为:课程网络存在回路 二、概要设计 1.抽象数据类型的定义: 题设要求使用一个有向图表示教学计划,顶点表示某门课程,有向边表示课程之间的先修关系,数据的对象是图中的每一个顶点和有向边。由此为本问题确定一个图的数据关系。同时课程存储在顶点位置,所以创建节点类来存储课程信息。 在对图中所存储的课程进行排序时,使用拓扑排序可以完美得到所需顺序,而拓扑排序可以用顶点入度为0的方法实现,所以为实现拓扑排序的顶点的存放,创建一个线性表来存放。

手工编织教学计划教学大纲

手工编织教学计划 一、培训目标 1.培养具备以下条件的人员:具备编织和刺绣的基本技能,同时掌握仿作和独立设计的知识和技能。 2.理论知识培训目标 依据《国家职业标准》中对手工编织工的理论知识要求,通过培训使培训对象掌握基本针法、设计制造常识,了解编织刺绣发展的总体趋势和前景。 3.操作技能培训目标 依据《国家职业标准》中对手工编制工的操作技能要求,通过培训,使培训对象能够掌握棒针、钩针针法,掌握刺绣基础,掌握十字绣、苏绣、中国结的制造方法并形成完整的作品。 二、教学要求 1.理论知识要求 1.1手工编织基本概念和编织材料知识 1.2棒针编织基础知识 1.3钩针编织基础知识 1.4刺绣基础知识 1.5十字绣基础知识 1.6苏绣基础知识 1.7中国结相关基础知识

2.操作技能要求 2.1棒针技法 2.2钩针技法 2.3刺绣基本技法 2.4十字绣基本技法 2.5苏绣基本技法 2.6中国结基本技法 2.7拖鞋的编织方法 2.8女士帽子的编织方法 2.9手提包的编织方法 2.10绣球的编织方法 三、教材 中国劳动社会保障出版社《手工编织》四、教学计划安排 总课时:120课时 理论知识授课:30课时 理论知识复习:2课时 操作技能授课:32课时 操作技能联系:52课时 机动课时:4课时 手工编织教学大纲一、课程任务说明

通过系统培训,使学员掌握手工编织的相关理论知识和手工编织技术,能够看懂手工编织图示和编织出自己设计的作品。 在教学过程中,以理论教学为基础,注重加强基础针法的实际操作,让学员熟练掌握拖鞋、帽子、手提包、绣球等成品的编织方法。 二、课时分配 课时分配表 三、理论知识部分教学要求及内容 1、概述 1.1手工编织基本概念

数据结构教学计划编制问题课程设计

课程设计(论文) 题目名称教学计划编制问题 课程名称数据结构 学生姓名杨满平 学号1041302054 系、专业信息工程系、2010级计算机科学与技术指导教师黄同成 2011年12 月25 日

摘要 数据结构是计算机科学与技术专业的专业基础课,是一门十分重要的核心课程。数据结构的知识为后续专业课程的学习提供必要的知识和技能准备,学好“数据结构”这门课程,对于学习计算机专业的其他课程,如操作系统、编译原理、数据库管理系统、软件工程、人工智能等都是十分有益的,而且所有的计算机系统软件和应用软件都要用到各种类型的数据结构。因此,要想更好地运用计算机来解决实际问题,仅掌握几种计算机程序设计语言是难以应付众多复杂的课题的,要想有效地使用计算机、充分发挥计算机的性能,还必须学习和掌握好数据结构的有关知识。例如本次程序设计题目大学的每个专业都要制订教学计划。假设任何专业都有固定的学习年限,每学年含两学期,每学期的时间长度和学分上限均相等。每个专业开设的课程都是确定的,而且课程在开设时间的安排必须满足先修关系。每门课程有哪些先修课程是确定的,可以有任意多门,也可以没有。每门课恰好占一个学期。试在这样的前提下设计一个教学计划编制程序

Abstract Data structures in computer science and technology professional courses, is a very important core curriculum. The data structure knowledge for the following courses to provide the knowledge and skills necessary to prepare, learn" data structure" of the course, for learning other computer science courses, such as operating system, compiler theory, database management system, software engineering, artificial intelligence, are very useful, and all of the computer system software and the application of software to use various types of data structure. Therefore, in order to better use the computer to solve practical problems, only to grasp some computer programming language is hard to cope with the many complex issues, in order to effectively use computers, give full play to the computer's performance, also must learn and master some knowledge about data structure.For example, the program design of University of each professional should develop teaching plans. The assumption that any profession has a fixed length, each school year with two semesters, each semester and the length of time equal to the credit limit are. Each professional courses are determined, and the creation of curriculum time arrangements must meet prevocational relations. Each course which is a pre-determined curriculum, can have any number of doors, there will be No. Each class just for a semester. Test this premise in the design of a teaching plan programming

数据结构实验报告模板

2009级数据结构实验报告 实验名称:约瑟夫问题 学生姓名:李凯 班级:21班 班内序号:06 学号:09210609 日期:2010年11月5日 1.实验要求 1)功能描述:有n个人围城一个圆圈,给任意一个正整数m,从第一个人开始依次报数,数到m时则第m个人出列,重复进行,直到所有人均出列为止。请输出n个人的出列顺序。 2)输入描述:从源文件中读取。 输出描述:依次从显示屏上输出出列顺序。 2. 程序分析 1)存储结构的选择 单循环链表 2)链表的ADT定义 ADT List{ 数据对象:D={a i|a i∈ElemSet,i=1,2,3,…n,n≧0} 数据关系:R={< a i-1, a i>| a i-1 ,a i∈D,i=1,2,3,4….,n} 基本操作: ListInit(&L);//构造一个空的单链表表L ListEmpty(L); //判断单链表L是否是空表,若是,则返回1,否则返回0. ListLength(L); //求单链表L的长度 GetElem(L,i);//返回链表L中第i个数据元素的值; ListSort(LinkList&List) //单链表排序 ListClear(&L); //将单链表L中的所有元素删除,使单链表变为空表 ListDestroy(&L);//将单链表销毁 }ADT List 其他函数: 主函数; 结点类; 约瑟夫函数 2.1 存储结构

[内容要求] 1、存储结构:顺序表、单链表或其他存储结构,需要画示意图,可参考书上P59 页图2-9 2.2 关键算法分析 结点类: template class CirList;//声明单链表类 template class ListNode{//结点类定义; friend class CirList;//声明链表类LinkList为友元类; Type data;//结点的数据域; ListNode*next;//结点的指针域; public: ListNode():next(NULL){}//默认构造函数; ListNode(const Type &e):data(e),next(NULL){}//构造函数 Type & GetNodeData(){return data;}//返回结点的数据值; ListNode*GetNodePtr(){return next;}//返回结点的指针域的值; void SetNodeData(Type&e){data=e;}//设置结点的数据值; void SetNodePtr(ListNode*ptr){next=ptr;} //设置结点的指针值; }; 单循环链表类: templateclass CirList { ListNode*head;//循环链表头指针 public: CirList(){head=new ListNode();head->next=head;}//构造函数,建立带头节点的空循环链表 ~CirList(){CirListClear();delete head;}//析构函数,删除循环链表 void Clear();//将线性链表置为空表 void AddElem(Type &e);//添加元素 ListNode *GetElem(int i)const;//返回单链表第i个结点的地址 void CirListClear();//将循环链表置为空表 int Length()const;//求线性链表的长度 ListNode*ListNextElem(ListNode*p=NULL);//返回循环链表p指针指向节点的直接后继,若不输入参数,则返回头指针 ListNode*CirListRemove(ListNode*p);//在循环链表中删除p指针指向节点的直接后继,且将其地址通过函数值返回 CirList&operator=(CirList&List);//重载赋

《数据结构》实验报告

《数据结构》实验报告 实验序号:4 实验项目名称:栈的操作

附源程序清单: 1. #include #define MaxSize 100 using namespace std; typedef int ElemType; typedef struct { ElemType data[MaxSize]; int top; }SqStack; void InitStack(SqStack *st) //初始化栈 { st->top=-1; } int StackEmpty(SqStack *st) //判断栈为空{ return (st->top==-1); } bool Push(SqStack *st,ElemType x) //元素进栈{ if(st->top==MaxSize-1)

{ return false; } else { st->top++; //移动栈顶位置 st->data[st->top]=x; //元素进栈 } return true; } bool Pop(SqStack *st,ElemType &e) //出栈 { if(st->top==-1) { return false; } else { e=st->data[st->top]; //元素出栈 st->top--; //移动栈顶位置} return true; } //函数名:Pushs //功能:数组入栈 //参数:st栈名,a->数组名,i->数组个数 bool Pushs(SqStack *st,ElemType *a,int i) { int n=0; for(;n数组名,i->数组个数 bool Pops(SqStack *st,ElemType *a,int i) { int n=0; for(;n

教学计划编制问题课程设计Word版

信息与电气工程学院 课程设计说明书 (2015/2016学年第一学期) 课程名称:软件算法分析与设计 题目:教学计划编制 专业班级:计算机1401 学生姓名:李丹丹 学号: 140210132 指导教师:陈丽 设计周数:一周 设计成绩: 2016年1月13日

目录 一、课题的主要功能 (1) 1.1程序的功能 (1) 1.2.输入输出的要求 (1) 1.3运行环境 (1) 1.4开发工具 (1) 二、概要设计 (2) 2.1程序的模块组成 (2) 2.2模块的层次结构及调用关系 (2) 2.3模块的主要功能 (3) 2.4数据结构和数据库结构 (3) 三.主要功能的实现 (3) 3.1采用C语言定义相关的数据类型。 (3) 3.2主要函数的流程图 (4) 3.3画出各函数的调用关系图 (11) 四、程序调试 (12) 4.1测试数据: (12) 4.2使用说明 (13) 五.心得体会 (14) 六、附录 (15) 6.1参考书目 (15) 6.2源程序清单(带注释) (16)

一、课题的主要功能 1.1程序的功能 大学的每个专业都要制订教学计划。假设任何专业都有固定的学习年限,每学年含两学期,每学期的时间长度和学分上限均相等。每个专业开设的课程都是确定的,而且课程在开设时间的安排必须满足先修关系。每门课程有哪些先修课程是确定的,可以有任意多门,也可以没有。每门课恰好占一个学期。试在这样的前提下设计一个教学计划编制程序。 本程序针对本科的学期内容,通过输入实际的课程及先后关系。结合每学期的学分及课程数,制定好学习计划。在输入相关数据后,程序会安排好每学期的课程。 1.2.输入输出的要求 输入参数包括:学期总数,一学期的学分上限,每门课的课程号(固定占3位的字母数字串)、学分和直接先修课的课程号。 输出要求输出各门课程所对应的学分,以及每学期各门课程的安排。 1.3运行环境 1. WINDOWS 7系统 2. Vc++6.0编译环境 1.4开发工具 C语言

数据结构课程实验报告(15)

课程实验报告课程名称:数据结构 专业班级:信安1302 学号: 姓名: 指导教师: 报告日期:2015. 5. 12 计算机科学与技术学院

目录 1 课程实验概述............ 错误!未定义书签。 2 实验一基于顺序结构的线性表实现 2.1 问题描述 ...................................................... 错误!未定义书签。 2.2 系统设计 ...................................................... 错误!未定义书签。 2.3 系统实现 ...................................................... 错误!未定义书签。 2.4 效率分析 ...................................................... 错误!未定义书签。 3 实验二基于链式结构的线性表实现 3.1 问题描述 ...................................................... 错误!未定义书签。 3.2 系统设计 ...................................................... 错误!未定义书签。 3.3 系统实现 ...................................................... 错误!未定义书签。 3.4 效率分析 ...................................................... 错误!未定义书签。 4 实验三基于二叉链表的二叉树实现 4.1 问题描述 ...................................................... 错误!未定义书签。 4.2 系统设计 ...................................................... 错误!未定义书签。 4.3 系统实现 ...................................................... 错误!未定义书签。 4.4 效率分析 ...................................................... 错误!未定义书签。 5 实验总结与评价 ........... 错误!未定义书签。 1 课程实验概述 这门课是为了让学生了解和熟练应用C语言进行编程和对数据结构进一步深入了解的延续。

教学计划编制

教学计划编制问题 #include #include

#include #define null 0 #define MAXNODE 64 //最大课程个数 typedef struct { char c[3]; }cid; //课程号 typedef struct Course { cid id[3]; //课程号 char name[30]; //课程名 float xf; //学分 }Course; ////////////////////////////////////////////////课程 typedef struct PreCourse { int adjvex; //课程在数组中的下标 struct PreCourse *pre; //指向下一先修的课程节点 }PreCourse;/////////////////////////////////////////////////先修的课程节点typedef struct { Course course;//课程 PreCourse *firstnext; //指向第一个先修的课程节点 }CourseNode;////////////////////////////////////////////////////////////课程节点typedef struct { CourseNode courses[MAXNODE]; //邻接表 int xqs;//学期总数 int num; //课程的数目 float xfsx;/////学分上限 }AlGraph;///////////////////////////////////////////////////////////////课程图typedef struct { int data[MAXNODE];//队中元素 int f,r;//队头r 队尾f }queue; int IsCricle=0;//判断是否环1表示是0表示不是 int jxq;//用于计算学期的 ///////////////////////////////////////////////////////////////////////// void queueinit(queue *q)///////////////队初始化 { q->f=q->r=0; } void queuein(queue *q,int x)//入队 {

数据结构实验报告--图实验

图实验 一,邻接矩阵的实现 1.实验目的 (1)掌握图的逻辑结构 (2)掌握图的邻接矩阵的存储结构 (3)验证图的邻接矩阵存储及其遍历操作的实现 2.实验内容 (1)建立无向图的邻接矩阵存储 (2)进行深度优先遍历 (3)进行广度优先遍历 3.设计与编码 MGraph.h #ifndef MGraph_H #define MGraph_H const int MaxSize = 10; template class MGraph { public: MGraph(DataType a[], int n, int e); ~MGraph(){ } void DFSTraverse(int v); void BFSTraverse(int v); private: DataType vertex[MaxSize]; int arc[MaxSize][MaxSize]; int vertexNum, arcNum; }; #endif MGraph.cpp #include using namespace std; #include "MGraph.h" extern int visited[MaxSize]; template MGraph::MGraph(DataType a[], int n, int e)

{ int i, j, k; vertexNum = n, arcNum = e; for(i = 0; i < vertexNum; i++) vertex[i] = a[i]; for(i = 0;i < vertexNum; i++) for(j = 0; j < vertexNum; j++) arc[i][j] = 0; for(k = 0; k < arcNum; k++) { cout << "Please enter two vertexs number of edge: "; cin >> i >> j; arc[i][j] = 1; arc[j][i] = 1; } } template void MGraph::DFSTraverse(int v) { cout << vertex[v]; visited[v] = 1; for(int j = 0; j < vertexNum; j++) if(arc[v][j] == 1 && visited[j] == 0) DFSTraverse(j); } template void MGraph::BFSTraverse(int v) { int Q[MaxSize]; int front = -1, rear = -1; cout << vertex[v]; visited[v] = 1; Q[++rear] = v; while(front != rear) { v = Q[++front]; for(int j = 0;j < vertexNum; j++) if(arc[v][j] == 1 && visited[j] == 0){ cout << vertex[j]; visited[j] = 1;

数据结构实验报告及心得体会

2011~2012第一学期数据结构实验报告 班级:信管一班 学号:201051018 姓名:史孟晨

实验报告题目及要求 一、实验题目 设某班级有M(6)名学生,本学期共开设N(3)门课程,要求实现并修改如下程序(算法)。 1. 输入学生的学号、姓名和 N 门课程的成绩(输入提示和输出显示使用汉字系统), 输出实验结果。(15分) 2. 计算每个学生本学期 N 门课程的总分,输出总分和N门课程成绩排在前 3 名学 生的学号、姓名和成绩。 3. 按学生总分和 N 门课程成绩关键字升序排列名次,总分相同者同名次。 二、实验要求 1.修改算法。将奇偶排序算法升序改为降序。(15分) 2.用选择排序、冒泡排序、插入排序分别替换奇偶排序算法,并将升序算法修改为降序算法;。(45分)) 3.编译、链接以上算法,按要求写出实验报告(25)。 4. 修改后算法的所有语句必须加下划线,没做修改语句保持按原样不动。 5.用A4纸打印输出实验报告。 三、实验报告说明 实验数据可自定义,每种排序算法数据要求均不重复。 (1) 实验题目:《N门课程学生成绩名次排序算法实现》; (2) 实验目的:掌握各种排序算法的基本思想、实验方法和验证算法的准确性; (3) 实验要求:对算法进行上机编译、链接、运行; (4) 实验环境(Windows XP-sp3,Visual c++); (5) 实验算法(给出四种排序算法修改后的全部清单); (6) 实验结果(四种排序算法模拟运行后的实验结果); (7) 实验体会(文字说明本实验成功或不足之处)。

三、实验源程序(算法) Score.c #include "stdio.h" #include "string.h" #define M 6 #define N 3 struct student { char name[10]; int number; int score[N+1]; /*score[N]为总分,score[0]-score[2]为学科成绩*/ }stu[M]; void changesort(struct student a[],int n,int j) {int flag=1,i; struct student temp; while(flag) { flag=0; for(i=1;ia[i+1].score[j]) { temp=a[i]; a[i]=a[i+1]; a[i+1]=temp; flag=1; } for(i=0;ia[i+1].score[j]) { temp=a[i]; a[i]=a[i+1]; a[i+1]=temp; flag=1;

数据结构实验报告(图)

附录A 实验报告 课程:数据结构(c语言)实验名称:图的建立、基本操作以及遍历系别:数字媒体技术实验日期: 12月13号 12月20号 专业班级:媒体161 组别:无 姓名:学号: 实验报告内容 验证性实验 一、预习准备: 实验目的: 1、熟练掌握图的结构特性,熟悉图的各种存储结构的特点及适用范围; 2、熟练掌握几种常见图的遍历方法及遍历算法; 实验环境:Widows操作系统、VC6.0 实验原理: 1.定义: 基本定义和术语 图(Graph)——图G是由两个集合V(G)和E(G)组成的,记为G=(V,E),其中:V(G)是顶点(V ertex)的非空有限集E(G)是边(Edge)的有限集合,边是顶点的无序对(即:无方向的,(v0,v2))或有序对(即:有方向的,)。 邻接矩阵——表示顶点间相联关系的矩阵 设G=(V,E) 是有n 1 个顶点的图,G 的邻接矩阵A 是具有以下性质的n 阶方阵特点: 无向图的邻接矩阵对称,可压缩存储;有n个顶点的无向图需存储空间为n(n+1)/2 有向图邻接矩阵不一定对称;有n个顶点的有向图需存储空间为n2 9

无向图中顶点V i的度TD(V i)是邻接矩阵A中第i行元素之和有向图中, 顶点V i的出度是A中第i行元素之和 顶点V i的入度是A中第i列元素之和 邻接表 实现:为图中每个顶点建立一个单链表,第i个单链表中的结点表示依附于顶点Vi的边(有向图中指以Vi为尾的弧) 特点: 无向图中顶点Vi的度为第i个单链表中的结点数有向图中 顶点Vi的出度为第i个单链表中的结点个数 顶点Vi的入度为整个单链表中邻接点域值是i的结点个数 逆邻接表:有向图中对每个结点建立以Vi为头的弧的单链表。 图的遍历 从图中某个顶点出发访遍图中其余顶点,并且使图中的每个顶点仅被访问一次过程.。遍历图的过程实质上是通过边或弧对每个顶点查找其邻接点的过程,其耗费的时间取决于所采用的存储结构。图的遍历有两条路径:深度优先搜索和广度优先搜索。当用邻接矩阵作图的存储结构时,查找每个顶点的邻接点所需要时间为O(n2),n为图中顶点数;而当以邻接表作图的存储结构时,找邻接点所需时间为O(e),e 为无向图中边的数或有向图中弧的数。 实验内容和要求: 选用任一种图的存储结构,建立如下图所示的带权有向图: 要求:1、建立边的条数为零的图;

相关文档
最新文档