数据结构课程设计关键路径

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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<<"请输入图的顶点数目:"<>G.vexnum;

cout<<"请输入图的弧的数目:"<>G.arcnum;

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<adjvex<<" "<info<<" "<adjvex<<"->"; 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++)

相关文档
最新文档