그림 의 인접 표 생 성 출력

3632 단어 데이터 구조
인접 표 는 배열 과 링크 가 결 합 된 저장 방식 으로 정점 표 와 변 표 로 구성 된다.정점 표: 그림 의 정점 은 1 차원 배열 로 저장 (단일 체인 표 로 저장 할 수도 있 음) 하고 정점 배열 에 대해 서 는 첫 번 째 인접 점 을 가리 키 는 지침 을 저장 하여 정점 의 변 을 찾 아야 합 니 다.사 이 드 시트: 즉, 모든 정점 의 v 의 모든 인접 점 은 하나의 선형 표를 구성 하고 단일 체인 시트 로 저장 합 니 다.
정점 표 의 결산 점 은 data 와 friestedge 두 도 메 인 에 의 해 표 시 됩 니 다. data 는 데이터 도 메 인 이 고 정점 정 보 를 저장 합 니 다. friestedge 는 지침 도 메 인 이 며 사 이 드 표 의 첫 번 째 정점, 즉 정점 의 첫 번 째 인접 점 을 가리 킵 니 다.
typedef struct VertexNode /*       */
{
	VertexType data; /*    ,       */
	EdgeNode *firstedge;/*       */
}VertexNode, AdjList[MAXVEX];

사 이 드 시트 의 결산 점 은 adjvex 와 next 두 개의 도 메 인 으로 구성 되 어 있 으 며, adjvex 는 인접 점 도 메 인 으로 특정한 정점 의 인접 점 을 정점 표 에 저장 하 는 아래 표 시 를 저장 하고, next 도 메 인 은 사 이 드 시트 의 결산 점 다음 결점 을 가리 키 는 지침 을 저장 합 니 다.
typedef struct EdgeNode /*       */
{
	int adjvex;    /*     ,           */
	EdgeType info;		/*       ,           */
	struct EdgeNode *next; /*   ,         */
}EdgeNode;

완전한 노드 정의 코드
typedef int Status;	/* Status      ,           , OK  */
typedef char VertexType; /*            */
typedef int EdgeType; /*               */

typedef struct EdgeNode /*       */
{
	int adjvex;    /*     ,           */
	EdgeType info;		/*       ,           */
	struct EdgeNode *next; /*   ,         */
}EdgeNode;

typedef struct VertexNode /*       */
{
	VertexType data; /*    ,       */
	EdgeNode *firstedge;/*       */
}VertexNode, AdjList[MAXVEX];

typedef struct
{
	AdjList adjList; 
	int numNodes,numEdges; /*            */
}GraphAdjList;

 인접 표 생 성 코드 는 다음 과 같 습 니 다.
/*           */
void  CreateALGraph(GraphAdjList *G)
{
	int i,j,k;
	EdgeNode *e;
	printf("        :
"); scanf("%d,%d",&G->numNodes,&G->numEdges); /* */ for(i = 0;i < G->numNodes;i++) /* , */ { printf("
"); scanf("%s",&G->adjList[i].data); /* */ G->adjList[i].firstedge=NULL; /* */ } for(k = 0;k < G->numEdges;k++)/* */ { printf(" (vi,vj) :
"); scanf("%d,%d",&i,&j); /* (vi,vj) */ e=(EdgeNode *)malloc(sizeof(EdgeNode)); /* , */ e->adjvex=j; /* j */ e->next=G->adjList[i].firstedge; /* e */ G->adjList[i].firstedge=e; /* e */ e=(EdgeNode *)malloc(sizeof(EdgeNode)); /* , */ e->adjvex=i; /* i */ e->next=G->adjList[j].firstedge; /* e */ G->adjList[j].firstedge=e; /* e */ } }

출력 코드 인쇄
void DispGraphAdjList(GraphAdjList *G)
{
	int i;
	EdgeNode *p;
	printf("         
"); printf("%6s%8s%12s
"," "," "," "); for(i=0;i< G->numNodes;i++) { printf("%4d %8c",i,G->adjList[i].data);// for(p=G->adjList[i].firstedge;p!=NULL;p=p->next) printf("%4d",p->adjvex); printf("
"); } }

주 함수 코드
int main(void)
{    
	GraphAdjList G;    
	CreateALGraph(&G);
	DispGraphAdjList(&G);
	
	return 0;
}

 
헤더 파일 정의 및 참조
#include "stdio.h"    
#include "stdlib.h"   
#include "io.h"  
#include "math.h"  
#include "time.h"

#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXVEX 100 /*      ,       */

 
테스트 결과
 
이 코드 는 그림 인접 표 와 관련 된 작업 이 없습니다.

좋은 웹페이지 즐겨찾기