资源简介
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
- 上一篇:软件工程+学生成绩管理系统
- 下一篇:案例数据-购物网站
相关资源
- linux下缓冲区溢出攻击源代码
- 网络嗅探器源代码及文档
- 计算机网络高级软件编程技术第5章
- 汇编语言课程设计实验报告 拼图游戏
- 超市销售管理系统包含需求分析 概要
- fourinone源代码分析
- 一个简单的SLR分析程序
- 家用防盗报警器的Verilog源代码及原理
- 俄罗斯方块AI源代码以及设计文档
- 基于qt的音乐播放器源代码
- 语法分析的源代码文件与相关文件
- linux VFS概述以及内核源代码分析
- Kinect俄罗斯方块源代码及项目
- 源代码.rar
- 空间分析的源代码
- 编译原理——简单的四则运算
- 数据结构课程设计教学计划编制问题
- SPSS其实很简单 全套数据文件
- 语义分析c源代码
- memcached1.4.5源代码
- 电力系统分析 Hadi Saadat 光盘源代码
- 三层架构简单管理系统
- 哈工大软件学院编译原理语法分析源
- 汇编语言课程设计实验报告——拼图
- 神级memcached源代码分析文档_1.4.0代码
- 物流配货网项目源代码
- 飞机订票系统delphi源代码
- 传智播客版俄罗斯方块源代码
- 电子密码锁设计源代码
- 关于电子秤的实验项目包括protues仿真
评论
共有 条评论