#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTEX 30
typedef struct graphNode {
int vertex;
struct graphNode* link;
}graphNode;
typedef struct graphType {
int n;
graphNode* adjList_H[MAX_VERTEX];
}graphType;
void createGraph(graphType* g) {
g->n = 0;
for (int v = 0; v < MAX_VERTEX; v++) {
g->adjList_H[v] = NULL;
}
}
void insertVertex(graphType* g, int v) {
if (((g->n) + 1) > MAX_VERTEX) {
printf("그래프 정점의 개수를 초과하였습니다(최대 개수:%d 입니다)\n", MAX_VERTEX);
return;
}
g->n++; //g->n의 값을 1늘린다는것은 정점의 개수를 한개 늘린다는 뜻이다.
}
void insertEdge(graphType* g, int u, int v) {
graphNode* node;
if (u >= g->n || v >= g->n) {
printf("[ 그래프에 없는 정점입니다 ]\n");
return;
}
node = (graphNode*)malloc(sizeof(graphNode));
node->vertex = v;
node->link = g->adjList_H[u];
g->adjList_H[u] = node;
}
void print_adjList(graphType* g) {
int i;
graphNode* p;
for (i = 0; i < g->n; i++) {
printf(" \n정점 %c 의 인접 리스트 : %c ", i + 65,i+65);
p = g->adjList_H[i];
while (p) {
printf(" -> %c", p->vertex + 65);
p = p->link;
}
}
}
void main() {
int i;
graphType* G1;
G1 = (graphType*)malloc(sizeof(graphType));
createGraph(G1);
for (i = 0; i < 4; i++) {
insertVertex(G1, i); //G1에 정점 4개 추가하기
}
insertEdge(G1, 0, 3);insertEdge(G1, 0, 1);
insertEdge(G1, 1, 3);insertEdge(G1, 1, 2); insertEdge(G1, 1, 0);
insertEdge(G1, 2, 3);insertEdge(G1, 2, 1);
insertEdge(G1, 3, 2);insertEdge(G1, 3, 1); insertEdge(G1, 3, 0);
printf("[ G1의 인접 리스트 ]");
print_adjList(G1);
}
'코딩 이야기' 카테고리의 다른 글
[Java] 반복문을 이용하여 여러번 출력하기 (0) | 2022.01.04 |
---|---|
[JAVA자바] 자바의 변수를 알아보자(문자열,정수,실수) (0) | 2022.01.04 |
[C언어] 이진탐색트리의 삽입,삭제,탐색,출력 연산 함수 구현하기(Binary Search Tree) (0) | 2021.12.17 |
[C언어] 이진 탐색트리 입력, 출력, 탐색 구현 (0) | 2021.11.07 |
[C언어] 이진트리 전위,중위,후위 표기법으로 표기하기 (0) | 2021.11.05 |