基于数据结构解决教学计划编制问题

这篇具有很好参考价值的文章主要介绍了基于数据结构解决教学计划编制问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

摘  要

教学计划是学校保证教学质量和人才培养的关键,也是组织教学过程、安排教学过程、安排教学任务、确定教学编排的基本依据和课程安排的具体形式。是稳定教学秩序、提高教学质量的重要保证。从教学计划的设计、实施等方面,阐明了如何搞好教学管理,从而为提高教学质量提供保证。随着教育改革的不断深入和社会发展的需要,原旧的教学计划在定位上的方向性偏差,已经不再适应社会的需求。因此,应重视教学计划的改革和修订工作,以确保教育教学质量,提高教育教学水平。教学计划编制中的思路:一是明确培养目标;二是注重学科设置的整体性、统一性和灵活性、全面性;三是与学分制改革有机结合。

教学计划是高校实施常规教学活动的基本管理文档,由于传统的手工编制方式存在诸多弊端,开发基于Web应用程序形式的教学计划编制系统具有良好的应用价值。使用C程序设计语言,研发开发教学计划编制系统Web应用系统。

关键词:教学计划  编制  C程序设计语言  管理  

 设计题目

大学的每个专业都要编制教学计划。假设任何专业都有固定的学习年限,每学年含两学期,每学期的时间长度和学分上限都相等。每个专业开设的课程都是确定的,而且课程的开设时间的安排必须满足先修关系。每个课程的先修关系都是确定的,可以有任意多门,也可以没有。每一门课程恰好一个学期。试在这样的情况下设置一个教学计划编制程序。

在大学的某个专业中选取几个课程作为顶点,通过各门课的先修关系来构建个图,该图用邻接表来存储,邻接表的头结点存储每门课的信息。

本程序的目的是为用户编排课程,根据用户输入的信息来编排出每学期要学的课程。

第二章  需求分析

2.1 运行环境(软、硬环境)

设计环境和器材——

硬件:计算机

软件: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调试器等等。用户可以在集成开发环境中创建工程,打开工程,建立、打开和编辑文本,编译、链接、运行和调试应用程序。

2.2 输入的形式和输入值的范围

数据输入的方式是键盘输入。输入的数据多是整型的或是浮点型的,还有一些字符(以中文的形式)。输入的数值型的数据大都是小于100的数值。

2.3 输出的形式描述

输出的是教学编制计划,就是形如:“第二学期学的课程有:普通物理 线性代数 汇编语言”这样的形式。

2.4 功能描述

输入参数包括:学期总数,一学期的学分上限,每门课的课程号(固定占3位的字母数字串)、学分和直接先修课的课程号。

允许用户指定下列两种编排策略之一:一是使学生在各学期中的学习负担尽量均匀;二是使课程尽可能地集中在前几个学期中。

若根据给定的条件问题无解,则报告适当的信息;否则将教学计划输出到用户指定的文件中。计划的表格格式自行设计。

2.5 测试数据

学期总数:6 

学分上限:10

该专业共开设12门课,课程号从01~12,学分顺序为2,3,4,2,2,4,4,4,7,5,2,3。

  概要设计

3.1 抽象数据类型定义描述

(对各类的成员及成员函数进行抽象描述)。

抽象数据类型:

为实现上述功能需建立一个结点类,线性表类,图类。

ADT Graph{

数据对象V:V是具有相同特性的数据元素的集合,称为顶点集。

数据关系R:

R={VR}

VR={(v,w)|v,w∈V,(v,w)表示v和w之间存在直接先修关系}

基本操作P:

void creatpre(AlGraph *CGraph);

void findindegree(AlGraph *CGraph,int indegree[]);

void layout1(AlGraph *CGraph,queue *q);

void layout2(AlGraph *CGraph,queue *q);

}ADT Graph

队列的定义:

ADT List{

数据对象:D={ai|ai∈ElemSet,i=1,2,…n,n>=0}

数据关系:R1={﹤ai-1 ai﹥|ai-1,ai∈D,i=2,…,n}

基本操作:

void queue_init(queue *q);

void queue_in(queue *q,int x);

int queue_out(queue *q);

int queue_empty(queue *q);

}ADT Stack

3.2 功能模块设计

主程序:

void main()

{

int choice;

queue q;

Queue.queue_init(&q);

AlGraph CGraph;

CGraph=Graph.input();

system("cls");

Graph.output(CGraph);

cout<<endl<<endl;

Judgement.judgingcricle(&CGraph,&q);

if(!WhetherCricle)

{

while(1)

{

cout<<"请选择编排策略:\t"<<endl;

cout<<"1.使学生在各学期中的学习负担尽量均匀;\t"<<endl;

cout<<"2.使课程尽可能地集中在前几个学期中。\t"<<endl;

cout<<"请选择:";

cin>>choice;

system("cls");

if(choice==1)

Edit.layout1(&CGraph,&q);

else

Edit.layout2(&CGraph,&q);

cout<<"请选择继续编排策略或退出程序(0退出 1继续):\t"<<endl;

cin>>choice;

system("cls");

if(choice==0)

break;

}

}

}

3.3 模块层次调用关系

本程序只有两个模块,调用关系简单:主程序模块→拓扑排序模块

TopSort流程图

教学计划编排问题c语言,课程设计,数据结构教学计划编排问题c语言,课程设计,数据结构

第四章 详细设计

教学计划编制系统主要是处理课程之间的依赖关系。表列出了若干门计算机系本科课程,其中有些课程不要求先修课程,例如,C1是独立于其他课程的基础课,而有些课程却需要有先修课程,比如,学完程序设计语言C++和离散数学后才能学习数据结构。

课程代号

课程名称

先修课程

C1

高等代数

C2

计算机科学导论

C3

离散数学

C1

C4

程序设计语言C++

C1 C2

C5

数据结构

C3 C4

C6

计算机原理

C2 C4

C7

数据库原理

C4 C5 C6

先修课程规定了课程之间的依赖关系,这种关系可以用AOV网来表示,其中顶点表示课程,弧表示依赖关系。

教学计划编排问题c语言,课程设计,数据结构

程序的主要功能是实现课程的排序,以满足同一学期所修的课程相互之间无依赖关系,并且已修完其所有先修课程。本程序需要基于图的基本操作来实现。

算法的基本思想:

 1、数据的定义:

给出课程号、课程、先修的课程结点、课程结点、邻接表、课程图的定义。

邻接表的定义:

邻接表是一种顺序存储与链接存储相结合的存储方法。在邻接表中存在两种结点结构:顶点表结点和边表结点。

教学计划编排问题c语言,课程设计,数据结构

 2、图的构建:

建立一个结点类,类的元素有字符型变量用来存储字母,整形变量用来存储位置,该类型的指针,指向下一个元素。建立一个线性表类,完成线性表的构建。建立一个图类,完成图的信息的读取,(如有n个点,则建立n个线性表,将每个结点与其指向的结点组成一个线性表,并记录线性表的长度)。

3、队的初始化:

令头指针和尾指针置于0,表示队列为空。

void Queue::queue_init(queue *q) //队初始化

{

q->f=q->r=0;                        //头指针和尾指针置于0,表示队列为空

}

4、入队操作:

判断队列是否满,若队满输出“队满”。否则,将队尾指针加1,再将新元素插入队尾。

void Queue::queue_in(queue *q,int x) //入队

{

if((q->r+1)%MAX_COURSE_NUM==q->f)

{

cout<<"队满\t"<<endl;

exit(0);

}

q->r=(q->r+1)%MAX_COURSE_NUM;       //队尾指针加1

q->data[q->r]=x;                    //新元素插入队尾

}

5、出队操作:

先判断队列是否为空,若空则输出“队空”;否则保存队头元素,将队头指针加1。

int Queue::queue_out(queue *q) //出队

{

if(q->f==q->r)                          //判断队空

{

cout<<"队空\t"<<endl;

exit(0);

}

q->f=(q->f+1)%MAX_COURSE_NUM;           //队头指针加1

return q->data[q->f];                   //保存队头元素

}

6、建立先修关系:

输入课程的编号,在输入每一门课程的先修课程编号。判断输入的课程编号是否正确,若不正确,则输出“先修课程号不可能是本课程号”。否则,令p的邻接点等于j-1,p邻接的下一条边的结点为空,当元素为空时,令表头结点为p,令q等于表头结点;否则,让与q邻接的下一条边的结点是p,q等于p。

p=(PreCourse *)malloc(sizeof(PreCourse)); p->adjvex=j-1;

p->nextarc=null;

if(n==0)

{

CGraph->courses[i].firstarc=p;

q=CGraph->courses[i].firstarc;

n++;

}

else

{

q->nextarc=p;

q=p;

n++;

}

cin>>j;

}

}

cout<<"(1)重新建立先修关系\t"<<"(2)确定\n";

cout<<"请选择:";

cin>>choice;

if(choice==1)

creatpre(CGraph);

jxq=0;

}

7、建立课程图:

输入课程号、课程名、学分,判断输入是否正确,若不正确,则输出“输入的学分有误,请重新输入学分:”;调用creatpre()函数建立先修关系,建立课程图

AlGraph Graph::input() //输入并建立课程图

{

AlGraph CGraph;

int xqzs=0,kczs=0;      

int i;

int choice;

float xf,xfsx=0;

cout<<"教学计划编制\n"<<endl;

cout<<"输入参数:\n";

cout<<"1.学期总数:";

cin>>xqzs;

CGraph.xqs=xqzs;

cout<<"2.专业共开设课程数:";

cin>>kczs;

CGraph.num=kczs;

cout<<"3.学分上限(每个学期的学分上限都一样):";

cin>>xfsx;

CGraph.xfsx=xfsx;

cout<<"4.每门课的课程号(固定占3位的字母数字串)、课程名、学分--"<<endl;

for(i=0;i<kczs;i++) //输入课程号,课程名,学分

{

cout<<"课程号:";

scanf("%s",CGraph.courses[i].course.id);

cout<<"课程名:";

scanf("%s",CGraph.courses[i].course.name);

cout<<"学分:";

cin>>xf;

cout<<endl;

while(xf>xfsx||xf<=0) //判断输入的学分是否合格

{

cout<<"输入的学分有误,请重新输入学分:";

cin>>xf;

}

CGraph.courses[i].course.xf=xf;

CGraph.courses[i].firstarc=null;

}

cout<<"(1)重新输入\t"<<"(2)确定"<<endl;

cout<<"请选择:";

cin>>choice;

if(choice==1)

{

system("cls");

input();

}

else

{

creatpre(&CGraph); //建立先修关系

return CGraph;

}

}

8、Topsort算法:

先计算每个点的入度,保存在数组中。找到第一个入度为0的点,将该点所连的各点的入度减一。再在这些点中找入度为0 的点。如果找到,重复上述操作。如果找不到,则跳出while循环,再搜索其他的点,看入度是否为0。再重复上述操作,如果所有的入度为0的点都被寻找到,但个数少于输入顶点的个数,说明该图存在环。

while(1)

{

i=Queue.queue_out(&q);

Queue.queue_in(q2,i);

if(i!=-1)

{

m++;

for(j=0;j<CGraph->num;j++)

if(j!=i)

{

if(indegree[j]==0&&(xf+CGraph->courses[j].course.xf)<=CGraph->xfsx)

{

Queue.queue_in(&q,j);

indegree[j]--;

xf+=CGraph->courses[j].course.xf;

}

else

{

p=CGraph->courses[j].firstarc;

while(p)

{

if(p->adjvex==i)

{

indegree[j]--;

if(indegree[j]==0&&(xf+CGraph->courses[j].course.xf)<=CGraph->xfsx)

{

Queue.queue_in(&q,j);

indegree[j]--;

pd=1;

xf+=CGraph->courses[j].course.xf;

}

}

p=p->nextarc;

}

}

}

}

else

{

if(pd)

{

pd=0;

Queue.queue_in(&q,-1);

jxq++;

xf=0;

}

else break;

}

}

if(jxq>CGraph->xqs)

{cout<<endl<<"错误报告:\n"<<"在"<<CGraph->xqs<<"学期内是无法修完这些课程"<<endl;

exit(0);}

if(m<CGraph->num)

{

cout<<"\n错误报告:"<<endl;

cout<<"存在循环,因此课程安排不了"<<endl;

WhetherCricle=1;

}

Queue.queue_in(q2,-1);}

程序完整代码文章来源地址https://www.toymoban.com/news/detail-773783.html

附  录
#include<iostream>
#include<string>
#include<cstdio>
#include<cstdlib>
using namespace std;
#define null 0
#define MAX_COURSE_NUM 100						//最大课程个数

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 *nextarc;				 
}PreCourse;								//先修的课程节点

typedef struct
{	
	Course course;						
	PreCourse *firstarc;				
}CourseNode;							//课程节点

typedef struct
{
	CourseNode courses[MAX_COURSE_NUM];		//邻接表
	int xqs;							
	int num;							
	float xfsx;							
}AlGraph;								//课程图

typedef struct 
{
	int data[MAX_COURSE_NUM];					
	int f,r;							
}queue;

int WhetherCricle=0;							
int jxq;								
 
class Queue
{
public:
	void queue_init(queue *q);
	void queue_in(queue *q,int x);
	int queue_out(queue *q);
	int queue_empty(queue *q);
}Queue;

void Queue::queue_init(queue *q)				//队初始化
{
	q->f=q->r=0;
}

void Queue::queue_in(queue *q,int x)			//入队
{
	if((q->r+1)%MAX_COURSE_NUM==q->f)
	{
		cout<<"队满\t"<<endl;
		exit(0);
	}
	q->r=(q->r+1)%MAX_COURSE_NUM;
	q->data[q->r]=x;
}

int Queue::queue_out(queue *q)					//出队
{
	if(q->f==q->r)
	{
		cout<<"队空\t"<<endl;
		exit(0);
	}
	q->f=(q->f+1)%MAX_COURSE_NUM;
	return q->data[q->f];
}

int Queue::queue_empty(queue *q)				//队判空 1为空
{
	if(q->f==q->r)
		return 1;
	else return 0;
}

class Graph
{
public:
	AlGraph input();
	void output(AlGraph CGraph);
	void creatpre(AlGraph *CGraph);
}Graph;

void Graph::creatpre(AlGraph *CGraph)			//建立先修关系
{
	system("cls");						
	int choice;
	int i,n;							 
	int j;
	PreCourse *p,*q;					
	cout<<endl<<"建立先修关系:\t"<<endl;
	cout<<endl<<"输入的每一门课程号的编号:\t"<<endl;
	for(i=0;i<CGraph->num;i++)
	{
		if(i%4==0)
			cout<<endl;
		cout<<"("<<i+1<<")";				//输入课程的编号
		printf("%s\t",CGraph->courses[i].course.id);	
	}
	cout<<endl;
	cout<<"\n请根据以上的编号,输入每一门课程的先修课程号的编号(输入0 表示没有或结束):\t"<<endl;
	for(i=0;i<CGraph->num;i++)
	{
		printf("%s的先修课程:",CGraph->courses[i].course.id);
		cin>>j;
		n=0;
		while(j)						//判断输入的课程编号是否正确
		{
			while(j<1||j>CGraph->num||j==i+1)
			{			
				if(j==i+1)				
					cout<<"先修课程号不可能是本课程号\n";			
				else				
cout<<"输入的先修课程号不在该专业开设的课程序列中"<<endl;
				cout<<"请重新输入:";
				cin>>j;
			}	
			p=(PreCourse *)malloc(sizeof(PreCourse));					p->adjvex=j-1;
			p->nextarc=null;
			if(n==0)
			{	
				CGraph->courses[i].firstarc=p;
				q=CGraph->courses[i].firstarc;
				n++;
			}
			else
			{
				q->nextarc=p;
				q=p;
				n++;
			}
			cin>>j;
		}
	}
	cout<<"(1)重新建立先修关系\t"<<"(2)确定\n";
	cout<<"请选择:";
	cin>>choice;
	if(choice==1)
		creatpre(CGraph);
	jxq=0;
}

AlGraph Graph::input()						//输入并建立课程图
{
	AlGraph CGraph;
	int xqzs=0,kczs=0;				     
	int i;			
	int choice;
	float xf,xfsx=0;				
	cout<<"教学计划编制\n"<<endl;
	cout<<"输入参数:\n";
	cout<<"1.学期总数:";
	cin>>xqzs;
	CGraph.xqs=xqzs;
	cout<<"2.专业共开设课程数:";
	cin>>kczs;
	CGraph.num=kczs;				
	cout<<"3.学分上限(每个学期的学分上限都一样):";
	cin>>xfsx;
	CGraph.xfsx=xfsx;
	cout<<"4.每门课的课程号(固定占3位的字母数字串)、课程名、学分--"<<endl;
	for(i=0;i<kczs;i++)				//输入课程号,课程名,学分
	{
		cout<<"课程号:";
		scanf("%s",CGraph.courses[i].course.id);
		cout<<"课程名:";
		scanf("%s",CGraph.courses[i].course.name);
		cout<<"学分:";
		cin>>xf;
		cout<<endl;
		while(xf>xfsx||xf<=0)			//判断输入的学分是否合格
		{
			cout<<"输入的学分有误,请重新输入学分:";
			cin>>xf;
		}
		CGraph.courses[i].course.xf=xf;
		CGraph.courses[i].firstarc=null;
	}
	cout<<"(1)重新输入\t"<<"(2)确定"<<endl;
	cout<<"请选择:";
	cin>>choice;
	if(choice==1)
	{
		system("cls");	
		input();
	}
	else 
	{
		creatpre(&CGraph);				//建立先修关系
		return CGraph;
	}
}

void Graph::output(AlGraph CGraph)			///输出先修关系
{
	int i,j,n;	
	PreCourse *p;	
	cout<<"先修关系如下:\n"<<endl;
	cout<<"课程编号\t"<<"课程名称\t"<<"先决条件"<<endl;
	for(i=0;i<CGraph.num;i++)
	{
		printf("%s\t\t%s\t\t",CGraph.courses[i].course.id,CGraph.courses[i].course.name);
		j=0;
		p=CGraph.courses[i].firstarc;
		while(p)
		{
			n=p->adjvex;
			printf(" %s  ",CGraph.courses[n].course.id);
			p=p->nextarc;
			j++;
		}
		if(j==0)
			cout<<" 无";
		cout<<endl;
	}
}

class Judgement
{
public:
	void findindegree(AlGraph *CGraph,int indegree[]);
	void judgingcricle(AlGraph *CGraph,queue *q2);
}Judgement;

void Judgement::findindegree(AlGraph *CGraph,int indegree[])	
{
	int i;
	PreCourse *p;
	for(i=0;i<CGraph->num;i++)
	{
		indegree[i]=0;
		p=CGraph->courses[i].firstarc;
		while(p)
		{
			indegree[i]++;
			p=p->nextarc;
		}
	}
}

void Judgement::judgingcricle(AlGraph *CGraph,queue *q2)			//判断是否有环和课程入队
{
	int indegree[MAX_COURSE_NUM];								//入度
	int i,m,j,pd=0;
	float xf=0;
	PreCourse *p;
	queue q;
	Queue.queue_init(&q);							//队初始化
	findindegree(CGraph,indegree);						//找入度
	for(i=0;i<CGraph->num;i++)
	{
	if(indegree[i]==0&&(xf+CGraph->courses[i].course.xf)<=CGraph->xfsx)				
{
			Queue.queue_in(&q,i);
			indegree[i]--;
			xf+=CGraph->courses[i].course.xf;
		}
	}
	m=0;
	xf=0;
	Queue.queue_in(&q,-1);          //把-1入队  用来判断
	jxq++;
	while(1)
	{
		i=Queue.queue_out(&q);
		Queue.queue_in(q2,i);
		if(i!=-1)
		{
			m++;
			for(j=0;j<CGraph->num;j++)
			if(j!=i)
			{	
	if(indegree[j]==0&&(xf+CGraph->courses[j].course.xf)<=CGraph->xfsx)						
	{
					Queue.queue_in(&q,j);
					indegree[j]--;
					xf+=CGraph->courses[j].course.xf;
				}
				else
				{
					p=CGraph->courses[j].firstarc;
					while(p)
					{
						if(p->adjvex==i)
						{
							indegree[j]--;
				if(indegree[j]==0&&(xf+CGraph->courses[j].course.xf)<=CGraph->xfsx)
							{
								Queue.queue_in(&q,j);
								indegree[j]--;
								pd=1;
								xf+=CGraph->courses[j].course.xf;
							}
						}
						p=p->nextarc;
					}
				}
			}
			
		}
		else
		{
			if(pd)
			{
				pd=0;
				Queue.queue_in(&q,-1);
				jxq++;
				xf=0;
			}
			else break;
		}
	}
	if(jxq>CGraph->xqs)
	{cout<<endl<<"错误报告:\n"<<"在"<<CGraph->xqs<<"学期内是无法修完这些课程"<<endl;
		exit(0);}
	if(m<CGraph->num)
	{
		cout<<"\n错误报告:"<<endl;
		cout<<"存在循环,因此课程安排不了"<<endl;
		WhetherCricle=1;
	}
	Queue.queue_in(q2,-1);}

class Edit
{
public:
	void layout1(AlGraph *CGraph,queue *q);
	void layout2(AlGraph *CGraph,queue *q);
}Edit;

void Edit::layout1(AlGraph *CGraph,queue *q)								{cout<<"\n学生在各学期中的学习负担尽量均匀:\n"<<endl;
	int i,j,k,xq=1,ck[20];
	float xf;
	float m=CGraph->num/CGraph->xqs*1.0f;								queue q1=*q;
	int n;int x;
	n=0;
	ck[0]=-1;
	for(i=0;i<20;i++)
	{j=Queue.queue_out(&q1);
		ck[i]=j;
		if(j==-1) 
			i--;
		if((Queue.queue_empty(&q1))) 
			break;
	}
	for(x=0;x<CGraph->xqs;x++)
	{
		if(ck[0]!=-1)
		{
			cout<<"\n第"<<xq++<<"学期学:";
			xf=0;
			for(i=0;i<m;i++)
			{
				k=ck[n];
				printf(" %s  ",CGraph->courses[k].course.id);
				n++;
				xf+=CGraph->courses[k].course.xf;}
			cout<<"获得学分是:"<<xf<<endl;}
	}		
}
void Edit::layout2(AlGraph *CGraph,queue *q)								{
	cout<<"\n课程尽可能地集中在前几个学期中:\n"<<endl;
    int i,j,xq=1;
	float xf;
	cout<<"\n第"<<xq<<"学期学:";
	xq++;
	xf=0;
	queue q1=*q;
	for(i=1;i<=CGraph->num;)
	{
		j=Queue.queue_out(&q1);
		if(j!=-1)
		{
			printf(" %s  ",CGraph->courses[j].course.id);
			i++;
			xf+=CGraph->courses[j].course.xf;
		}
		else
		{
			cout<<"获得学分是:"<<xf;	
			cout<<"\n第"<<xq++<<"学期学:";
			xf=0;
		}	
	}
	cout<<"获得学分是:"<<xf<<endl;
	if(xq<=CGraph->xqs)
	{
		cout<<"\n第"<<xq++<<"学期学:无\n"<<endl;
	}
	
}
void main()
{	
	int choice;
	queue q;									
	Queue.queue_init(&q);								
	AlGraph CGraph;								
	CGraph=Graph.input();								
	system("cls");								
	Graph.output(CGraph);								
	cout<<endl<<endl;
	Judgement.judgingcricle(&CGraph,&q);					
	if(!WhetherCricle)
	{
		while(1)
		{
			cout<<"请选择编排策略:\t"<<endl;
			cout<<"1.使学生在各学期中的学习负担尽量均匀;\t"<<endl;
			cout<<"2.使课程尽可能地集中在前几个学期中。\t"<<endl;
			cout<<"请选择:";
			cin>>choice;					
			system("cls");
			if(choice==1) 
			Edit.layout1(&CGraph,&q);					
			else 
			Edit.layout2(&CGraph,&q);				
			cout<<"请选择继续编排策略或退出程序(0退出 1继续):\t"<<endl;
			cin>>choice;
			system("cls");
			if(choice==0)
				break; 
		}			
	

到了这里,关于基于数据结构解决教学计划编制问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • (数据结构)栈的实现——再一次保姆级教学

    目录 1. 栈 ​编辑  1.2 栈的实现 2. 代码的实现 2.1 初始化栈和销毁栈 2.2栈顶元素的插入 2.3栈顶元素的删除 栈元素删除 2.4栈顶元素的获取和栈元素的个数 1.1 栈的概念和结构 栈(Stack)是一种 线性 存储结构,它具有如下特点: (1)栈中的数据元素遵守” 先进后出 ”(First In

    2024年02月06日
    浏览(43)
  • 软考A计划-真题-分类精讲汇总-第九章(数据结构与算法基础)

    点击跳转专栏=Unity3D特效百例 点击跳转专栏=案例项目实战源码 点击跳转专栏=游戏脚本-辅助自动化 点击跳转专栏=Android控件全解手册 点击跳转专栏=Scratch编程案例 专注于 Android/Unity 和各种游戏开发技巧,以及 各种资源分享 (网站、工具、素材、源码、游戏等) 有什么需要

    2024年02月05日
    浏览(63)
  • 新星计划Day6【数据结构与算法】 链表Part2

    👩‍💻博客主页:京与旧铺的博客主页 ✨欢迎关注🖱点赞🎀收藏⭐留言✒ 🔮本文由京与旧铺原创,csdn首发! 😘系列专栏:java学习 💻首发时间:🎞2022年4月30日🎠 🎨你做三四月的事,八九月就会有答案,一起加油吧 🀄如果觉得博主的文章还不错的话,请三连支持一

    2023年04月08日
    浏览(59)
  • 第一百零五天学习记录:数据结构与算法基础:顺序表(王卓教学视频)

    注:笔记截图均来自王卓数据结构教学视频 线性表是具有相同特性的数据元素的一个有限序列 同一线性表中的元素必定具有相同特性,数据元素间的关系是线性关系。 稀疏多项式的运算 顺序存储结构存在的问题 1、存储空间分配不灵活 2、运算的空间复杂度高 引出链式存储

    2024年02月15日
    浏览(38)
  • 第一百零六天学习记录:数据结构与算法基础:单链表(王卓教学视频)

    结点在存储器中的位置是任意的,即逻辑上相邻的数据元素在物理上不一定相邻 线性表的链式表示又称为非顺序映像或链式映像。 用一组物理位置任意的存储单元来存放线性表的数据元素。 这组存储单元既可以是连续的,也可以是不连续的,甚至是零散分布在内存中的任意

    2024年02月16日
    浏览(54)
  • 第一百二十八天学习记录:数据结构与算法基础:栈和队列(上)(王卓教学视频)

    1、栈和队列是两种常用的、重要的数据结构 2、栈和队列是限定插入和删除只能在表的“端点”进行的线性表 线性表可以在任意一个位置插入和删除,栈只能在最后位置插入和删除 只能删除第一个元素 栈和队列是线性表的子集(是插入和删除位置受限的线性表)

    2024年02月13日
    浏览(43)
  • PHP教学资源管理系统Dreamweaver开发mysql数据库web结构php编程计算机网页

    一、源码特点     PHP 教学资源管理系统是一套完善的web设计系统,对理解php编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 源码 https://download.csdn.net/download/qq_41221322/88260480 论文 https://download.csdn.net/download/qq_41221322/88260482 二、功能介绍 前

    2024年02月10日
    浏览(55)
  • 【数据结构 ---基于C语言预备知识】

    我们怎样将现实中的各种数据以 特定的数据类型 和 特定的存储结构 保存到主存储器(内存)当中去。-------数据结构 在此存储基础上为实现某个功能(比如查找某个元素,删除某个元素,以及对所有元素进行排序)而执行的相应操作,这个相应的操作也叫做算法-----算法 因

    2023年04月25日
    浏览(38)
  • 【数据结构】——解决topk问题

    前言:我们前面已经学习了小堆并且也实现了小堆,那么我们如果要从多个数据里选出最大的几个数据该怎么办呢,这节课我们就来解决这个问题。我们就用建小堆的方法来解决。 首先我们来看到这个方法的时间复杂度,我们先取前k个数据建立一个小堆,后面插入的数据依

    2024年02月04日
    浏览(40)
  • 数据结构基于不同方式词频统计和查找

    实践题目 : 基于不同策略的英文单词的词频统计和检索系统 、实验目的 掌握基于顺序表的顺序查找、基于链表的顺序查找、折半查找)、二叉排序树和哈希表(包括基于开放地址法的哈希查找)   实验内容    一篇英文文章存储在一个文本文件中,然后分别基于线性表、

    2024年02月12日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包