失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > c语言 拓补排序源代码 拓扑排序C语言代码

c语言 拓补排序源代码 拓扑排序C语言代码

时间:2020-03-24 03:59:19

相关推荐

c语言 拓补排序源代码 拓扑排序C语言代码

#include

#include

#include

#include

//----------------公共的-----------------

#define TRUE 1

#define FALSE 0

#define OK 1

#define ERROR 0

#define INFEASIBLE -1

#define OVERFLOW -2

//---------------------------------------

//*************栈的初始大小和增量***************

#define STACK_INIT_SIZE 100

#define STATCKINCREMENT 10

//**********************************************

//*************栈的元素类型***************

typedef int SElemType;

typedef struct SqStack

{

SElemType *base;

SElemType *top;

SElemType stacksize;

}SqStack;

//****************************************

#define MAX_VERTEX_NUM 20

#define MAX 20

typedef int Boolean;

typedef int Status;

typedef char InfoType;

typedef struct ArcNode{ //邻接表的弧

int adjvex; //该弧所指向的顶点的位置

InfoType *info; //该弧相关信息的指针(如:权值等)

struct ArcNode *nextarc; //指向下一条弧的指针

}ArcNode;

typedef int VertexType;//每个顶点的值的类型

typedef struct VNode//邻接表的顶点

{

VertexType data;

ArcNode *firstarc;

}VNode,AdjList[MAX_VERTEX_NUM];

typedef struct{

AdjList vertices; //邻接表

int vexnum,arcnum;//图的当前顶点数和弧数

int kind; //图的种类标志 0为无向图 1为有向图

}ALGraph;

//****************栈的使用函数*********************

int InitStack(SqStack &s){//栈的初始化

s.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));

if(!s.base)

{

return 0; //存储分配失败

}

s.top=s.base;

s.stacksize=STACK_INIT_SIZE;

return 1;

}

int Push(SqStack &s,SElemType e){ //元素的入栈

if(s.top-s.base>=s.stacksize)//栈满,追加存储控件

{

s.base=(SElemType *)realloc(s.base,(s.stacksize+STATCKINCREMENT)*sizeof(SElemType));

if(!s.base) return 0;//存储分配失败

s.top=s.base+s.stacksize;

s.stacksize+=STATCKINCREMENT;

}

*(s.top)++=e;

return 1;

}

int Pop(SqStack &s,SElemType &e){//元素的出栈

if(s.top==s.base) return 0;

e=*--s.top;

return 1;

}

int StackEmpty(SqStack s){//若S为为空战,则返回1,否则返回0

if(s.top==s.base) return 1;

else return 0;

}

//*************************************************

Status CreateDG(ALGraph &g){ /* 邻接表建立有向图 */

int i,j,k;

ArcNode *p;

printf("请输入顶点数和边数(格式为:顶点数,边数):");

scanf("%d,%d",&i,&j);

getchar();

g.vexnum=i;g.arcnum=j;

for(i=1;i<=g.vexnum;i++)//输入顶点

{

printf("请输入第%d个顶点的值:",i);

scanf("%d",&g.vertices[i].data);

getchar();

g.vertices[i].firstarc=NULL;

}

printf("输入边的信息(输入格式为:i,j)\n");

for(i=1;i<=g.arcnum;i++) /* 输入弧的信息 */

{

printf("请输入第%d条边的信息:",i);

scanf("%d,%d",&j,&k);

getchar();

p=(ArcNode *)malloc(sizeof(ArcNode));

p->adjvex=k;

p->nextarc=g.

如果觉得《c语言 拓补排序源代码 拓扑排序C语言代码》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。