数据结构课程设计关键路径
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构课程设计-关键路径
#define max 20
#include
#include
#include
using namespace std;
typedef struct ArcNode//定义表结点
{int adjvex;//该弧所指向顶点的位置
struct ArcNode *nextarc;//指向下一条弧的指针
int info;//该弧的权值
}ArcNode;
typedef struct VNode//定义头结点
{int data;//顶点信息
ArcNode *firstarc;//指向第一条依附该顶点的弧的指针}VNode,AdjList[max];
typedef struct//定义ALGraph
{AdjList vertices;
int vexnum,arcnum;//图的当前顶点数和弧数
int kind;//图的种类标志
}ALGraph;
typedef struct//定义栈
{int *base;//栈底
int *top;//栈顶
}stack;
void initstack(stack &s)//建立空栈{s.base=(int*)malloc(max*sizeof(int)); s.top=s.base;
}
int stackempty(stack s)//判断是否为空栈{if(s.base==s.top) return 1;
else return 0;
}
int stackfull(stack s)//判断是否为满栈{if(s.top-s.base>=max) return 1;
else return 0;
}
int pop(stack &s)//进行出栈
{int e;//出栈先进行赋值,后移动指针if(!stackempty(s))
{e=*(s.top-1);
s.top--;
return e;
}
else return NULL;
}
void push(stack &s,int e)//进行入栈
{if(!stackfull(s))
{s.top++;//进栈先移动指针,后进行赋值
*(s.top-1)=e;
}
}
void CreateDG(ALGraph &G)//创建邻接表的图
{int k,i,j;
char tag;
cout<<"请输入图的顶点数目:"<
cout<<"请输入图的弧的数目:"<
cout<<"请确认是否输入弧的权值(y/n):"< cin>>tag; for(i=1;i<=G.vexnum;++i) {G.vertices[i].data=i;//初始化顶点值 G.vertices[i].firstarc=NULL;//初始化指针 } cout<<"请输入弧的相关信息arc(V1-->V2)"< {cout< cin>>i; cout<<"请输入弧尾"<<"[1,"< cin>>j; while(i<1||i>G.vexnum||j<1||j>G.vexnum)//如果弧头或弧尾不合法,重新输入 {cout< cin>>i; cout<<"请再次输入弧尾"<<"[1,"< cin>>j; } ArcNode *p; p=(ArcNode*)malloc(sizeof(ArcNode));//分配内存 if(!p) {cout<<"Overflow!";//如果没有足够的空间,则退出 } p->adjvex=j;//对弧结点的弧顶点数据域赋值 p->nextarc=G.vertices[i].firstarc;//对弧结点下一条弧指针域赋值 p->info=0; // 对弧结点相关信息指针域赋值 G.vertices[i].firstarc=p; // 将弧结点插入到对应的单链表 if(tag=='y') {cout<<"请输入弧的权值:"; cin>>p->info; } } } void ShowMGraph(ALGraph G)//输出图G {int j; ArcNode *p; for(j=1;j<=G.vexnum;++j) {if(G.vertices[j].firstarc) cout< else cout< for(p=G.vertices[j].firstarc;p;p=p->nextarc) cout< } } int degree(ALGraph G,int i)//求各顶点的入度 {int *indegree,j,k; indegree=(int*)malloc((G.vexnum+1)*sizeof(int)); ArcNode *p; for(j=1;j<=G.vexnum;j++) indegree[j]=0; for(j=1;j<=G.vexnum;j++)