数据结构基本操作源代码 (九)

2014-11-24 03:09:15 · 作者: · 浏览: 12
turn ERROR;
e = Q.base[Q.front];
Q.front = (Q.front+1)% MAXQSIZE;
return OK;
}

Status QueueEmpty(SqQueue Q)
{
if(Q.front==Q.rear)
return OK;
else
return ERROR;
}

typedef struct ArcNode
{
int adjvex;
struct ArcNode *nextarc;
char *info;
}ArcNode;

typedef struct VNode
{
int data;
ArcNode * firstarc;
}VNode,AdjList[MAX_VERTEX_NUM];

typedef struct
{
AdjList vertices;
int vexnum,arcnum;
}ALGraph;

int FirstAdjVex(ALGraph G,int v)
{
if(G.vertices[v].firstarc)
return G.vertices[v].firstarc->adjvex;
return -1;
}

#include "1.h"
int NextAdjVex(ALGraph G,int v,int w)
{
ArcNode *p = G.vertices[v].firstarc;
while(p)
{
if(p->adjvex == w)
{
if(p->nextarc)
return p->nextarc->adjvex;
}
p=p->nextarc;
}
return -1;
}

int createUDG(ALGraph &G )
{
int i, v1, v2;
cout<<"请输入结点个数:";
cin>>G.vexnum; //读入结点数
cout<<"请输入边数:";
cin>>G.arcnum; //读入弧(边)数
for(i=1; i<=G.vexnum ; i++) //初始化空关系图
{
G.vertices[i].firstarc =NULL;
G.vertices[i].data=i;
}
for(i=1;i<=G.arcnum ;i++)
{
cout<<"请输入第 ["< cin>>v1>>v2;//读入一条边(弧)
//正向
ArcNode *p;
p=(ArcNode *)malloc(sizeof(ArcNode));
p->adjvex=v2;
p->nextarc=G.vertices[v1].firstarc;
G.vertices[v1].firstarc=p;

}
return OK;
}

void vist_P(ALGraph G)
{
int i;
ArcNode *p;
p=(ArcNode *)malloc(sizeof(ArcNode));
for (i = 1 ; i<= G.vexnum ; i++)
{
cout<<"."<";
p=G.vertices[i].firstarc;
while (p)
{
cout<adjvex<<"->";
p= p->nextarc;
}
cout<<"^"< }
}

int visited[MAX];
void DFS(ALGraph G,int v)
{

visited[v]=TRUE;
cout< for (int w=FirstAdjVex(G,v);w>=0;w=NextAdjVex(G,v,w))
{
if (!visited[w]) DFS(G,w);
}
}


void DFSTraverse(ALGraph G)
{
int v;
for (v=1;v<=G.vexnum;v++)
{
visited[v]=ERROR;
}
for (v=1;v<=G.vexnum;v++)
{
if (!visited[v]) DFS(G,v);
}
}



void BFSTraverse(ALGraph G)
{
int w,v;
for (v=1; v<=G.vexnum; ++v)
visited[v] = ERROR; //初始化访问标志
InitQueue(Q); // 置空的辅助队列Q
for ( v=1; v<=G.vexnum; ++v )
if ( !visited[v])
{
visited[v] = TRUE;
cout< EnQueue(Q,v);
while(!QueueEmpty(Q))
{
int u ;
DeQueue (Q,u);
for(w = FirstAdjVex(G,u); w >= 0; w = NextAdjVex(G,u,w))
if(!visited[w])
{
visited[w] = TRUE ;cout< EnQueue(Q,w);
}
}

}
}
void Collections(ALGraph G)
{
int num[20] = {0};
int i;
ArcNode *ptr;
for(i = 1; i <= G.vexnum ; i++)
{
if(G.vertices[i].firstarc)
{
ptr = G.vertices[i].firstarc;
while (ptr)
{
num[i]++;
num[ptr->adjvex]++;
ptr = ptr->nextarc;
}
}
}
for(i = 1 ; i <= G.vexnum; i++)
cout<
}

void main()
{
printf(" 1.创建图 \n");
printf("