• 大小: 2KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-08-07
  • 语言: 其他
  • 标签: 源代码  

资源简介

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


评论

共有 条评论