资源简介
1.数据结构与算法课程设计是综合运用课程中学到的几种典型数据结构、常用算法以及程序设计语言,自行实现一个较为完整的应用系统。
2.通过课程设计,学生自主进行系统分析、系统设计、编程调试,写实验报告等环节,进一步掌握应用系统设计的方法和步骤,灵活运用并深刻理解典型数据结构在软件开发中的应用。

代码片段和文件信息
#include
#include
#define stack_init_size 100 //存储空间初始分配量
#define createstack 10 //存储空间分配增量
#define max_vertex_num 20
typedef int Status;
typedef int SElemType;//栈类型
typedef struct
{
SElemType *base;//栈底指针
SElemType *top;//栈顶指针
int stacksize;//栈大小
}SqStack;//顺序栈
typedef struct ArcNode
{
int adjvex;//该弧所指向的顶点的位置
struct ArcNode *nextarc;//指向第一条依附该顶点的弧的指针
}ArcNode;//顶点的弧
typedef struct VNode//顶点
{
char data[10];
ArcNode *firstarc;
}AdjList[max_vertex_num];//最大顶点数 头结点
typedef struct
{
AdjList vertices;
int vexnumarcnum;//图的当前顶点数和弧数
}ALGraph;
int indegree[20]={0};//存储图的入度的全局变量数组
Status InitStack(SqStack &S)//将栈分配存储空间,并对top和base赋值
{ //构造一个空栈S
S.base=(SElemType *)malloc(stack_init_size*sizeof(SElemType));//将malloc函数返回的指针强制转化成一个ElemType指针
if(!S.base)
return 0;//内存分配失败
S.top=S.base;
S.stacksize=stack_init_size;
return 1;
}
Status Push(SqStack &SSElemType e)
{ //插入元素e为新的栈顶元素
if(S.top-S.base>=S.stacksize)
{ //栈满,追加存储空间
S.base=(SElemType *)realloc(S.base(S.stacksize+createstack)*sizeof(SElemType));
if(!S.base)
return 0;//存储分配失败
S.top=S.base+S.stacksize;
S.stacksize+=createstack;
}
*S.top++=e;
return 1;
}
Status Pop(SqStack &SSElemType &e)
{ //若栈不空,则删除S的栈顶元素,用e返回其值,并返回1,否则返回0
if(S.top==S.base)
return 0;
e=*--S.top;
return 1;
}
Status StackEmpty(SqStack S)
{ //判断栈是否为空,为空返回1,否则返回0
if(S.top==S.base)
return 1;
else return 0;
}
Status CreateALGraph(ALGraph &G)
{ //建立邻接表
int isemester_numvwvex;
printf(“请输入学期数目:“);
scanf(“%d“&semester_num);
if(semester_num>8)
{
printf(“请重新输入学期数目:“);
scanf(“%d“&semester_num);
}
printf(“请输入课程数目(课程数必须小于20):“);
scanf(“%d“&vex);
if(vex>=20)
{
printf(“请重新输入课程数目(课程数必须小于20):“);
scanf(“%d“&vex);
}
G.vexnum=vex;
printf(“请输入课程间的先后关系数(总边数):“);
scanf(“%d“&G.arcnum);
for(i=0;i {
printf(“请输入%d课程的名字(课程名的长度小于等于10个字符):“i+1);
scanf(“%s“&G.vertices[i].data);
G.vertices[i].firstarc = NULL;
}
for(i=0;i {
printf(“请输入课程间两两间的先后关系(用整数表示整数与整数之间用逗号隔开):“);
scanf(“%d%d“&v&w);
ArcNode *p=new ArcNode;//建立结点
if(!p) return 0;
p->adjvex=w-1;
p->nextarc=G.vertices[v-1].firstarc;//顶点v的链表
G.vertices[v-1].firstarc=p;//添加到最左边
}
return 1;
}
void FindInDegree(ALGraph G)//通过循环求出每一个结点的入度
{ //求图的入度
ArcNode* p;
for(int i=0;i {
p=G.vertices[i].firstarc;
while(p)
{
for(int j=0;j if(p->adjvex==j)
indegree[j]++;
p=p->nextarc;
}
}
}
Status TopologicalSort(ALGraph G)//通过拓扑排序将相应的课程给输出来
{ //拓扑排序
//有向图G采用邻接表存储结构
SqStack S1S2;
ArcNode* p;
int icountk;
FindInDegree(G);//求各顶点的入度
InitStack(S1);//初始化栈S1
InitStack(S2);//初始化栈S2
for(i=0;i if(!indegree[i])
Push(S1i);//把入度为0的压入栈S1
count=0;//对输出顶点计数
while(!StackEmpty(S1))
{
printf(“第%d学期应学的课程:“cou
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 4267 2018-07-12 15:25 排课系统\main.cpp
目录 0 2018-12-19 08:35 排课系统
----------- --------- ---------- ----- ----
4267 2
- 上一篇:软件工程+学生成绩管理系统
- 下一篇:案例数据-购物网站
相关资源
- bp神经网络源代码,可直接运行
- 仿知乎界面小程序源代码
- 贪吃蛇源代码.fla
- phong模型(简单光照模型)
- dotnet 写字板 实验 源代码 不好请要不
- 一个超简单的企业管理系统(带ACCE
- 图像二维小波变换的实现源代码
- 八三编码器设计 VHDL代码 简单,包附
- linux应用层的华容道游戏源代码
- 黑白棋(带简单AI)
- jQuery ajax实现简单登录验证
- 网上拍卖系统完整源代码
- CSMA/CD等动画演示加源代码
- 编写简单的RMI程序 多线程web 服务器
- silicon lab公司的收音IC SI47XX全套开发工
- 合同管理系统的源代码(附数据库)
- 旋转矩阵求欧拉角的简单算法
- 用VC 编写的仿QQ聊天室程序源代码
- 51单片机基于protues的几个仿真实例
- 教学计划编制系统
- 小型抽签程序 C 简单实用
- STM32F103 串口程序(完整版)
- VPC3_DPV1源代码,Profibus
- PB做的托盘程序(最小化后在左下角显
- 一个简单的verilog编写的DMA IP CORE,和
- 简单的房屋租赁系统
- 透明加密源码及说明
- 静态网页简单的作业
- 排队机叫号 源代码
- 五子棋C 源代码
评论
共有 条评论