
그래프(Graph)는 정점(Vertex) 간선(Edge)으로 이루어진 비선형 자료구조이다.
때문에 그래프(Graph)와 트리(Tree)는 정점의 관계를 표현하는 자료구조라는 점에서 동류라고 볼 수 있다.
정점(vertex)노드(node)라고도 하며 각 정점에는 데이터가 저장된다.간선(edge)링크(arcs)라고도 하며 각 정점간 관계를 의미한다.
2차원 배열에 각 정점이 연결된 형태를 표현하는 방식이다.

모든 정점에 연결된 정점들을 리스트로 표현하는 방식이다.
인접행렬(Adjacency Matrix)에 비해 느리다.
정점을 연결하는 간선에 방향이 없는 그래프를 말한다.

정점을 연결하는 간선에 방향이 있는 그래프를 말한다.
간선의 방향대로만 이동할 수 있다.

두 정점을 이동하는 비용이 존재하는 그래프를 말한다.

모든 정점이 연결되어있는 그래프를 말한다.
그래프의 모든 정점을 한 번씩 방문하는 것을
탐색이라고 한다.

DFS와 BFS 관련된 자세한 내용은 추후 알고리즘 파트에서 다루도록 한다.
그래프의 가장 깊은 곳 까지 내려간 후, 더 이상 내려갈 정점이 없으면 옆으로 이동하는 탐색 기법
스택(Stack)그래프에서 최대한 넓게 이동한 후, 더 이상 이동할 정점이 없으면 내려가는 탐색 기법
큐(Queue)class Graph {
constructor() {
//기본 생성자
this.nodes = {};
}
addNode(node) {
//노드 추가
this.nodes[node] = this.nodes[node] || [];
}
contains(node) {
//그래프에 해당 노드가 존재하는지 여부
let result = null;
this.nodes[node] ? (result = true) : (result = false);
return result;
}
removeNode(node) {
//노드 삭제
this.nodes[node] ? delete this.nodes[node] : this.nodes[node];
}
hasEdge(fromNode, toNode) {
//두 노드 사이 간선의 존재 여부
let result = null;
this.nodes[fromNode] &&
this.nodes[toNode] &&
this.nodes[fromNode].includes(toNode) &&
this.nodes[toNode].includes(fromNode)
? (result = true)
: (result = false);
return result;
}
addEdge(fromNode, toNode) {
//두 노드 사이에 간선 추가
this.nodes[fromNode].push(toNode);
this.nodes[toNode].push(fromNode);
}
removeEdge(fromNode, toNode) {
//두 노드 사이 간선을 삭제
let node = this.nodes[fromNode];
if (
this.nodes[fromNode].includes(toNode) &&
this.nodes[toNode].includes(fromNode)
) {
this.nodes[fromNode][node.indexOf(toNode)] = "";
this.nodes[toNode][node.indexOf(fromNode)] = "";
}
}
}
const graph = new Graph();
graph.addNode(100);
graph.addNode(1);
graph.addNode(200);
graph.addNode(400);
graph.addEdge(100, 400);
graph.addEdge(400, 200);
console.log(graph);
/**
Graph {
nodes: { '1': [], '100': [ 400 ], '200': [ 400 ], '400': [ 100, 200 ] }
}
*/
비선형 자료구조 - 그래프(Graph)
[Algorithm] 자료구조 그래프(Graph)란 무엇인가?
[11] [알고리즘 - 자료구조] 그래프(graph)란? (비선형구조) javascript 구현
[Data Structure] 자바스크립트로 그래프 Graph 구현하기