Skip to content

Commit ee7ab8b

Browse files
all data structure update
1 parent f42e149 commit ee7ab8b

File tree

7 files changed

+514
-0
lines changed

7 files changed

+514
-0
lines changed

10 graph.js

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
class Graph{
2+
constructor(){
3+
this.adjacencyList = {};
4+
}
5+
addVertex(vertex){
6+
if(!this.adjacencyList[vertex]) this.adjacencyList[vertex] = [];
7+
}
8+
addEdge(v1,v2){
9+
this.adjacencyList[v1].push(v2);
10+
this.adjacencyList[v2].push(v1);
11+
}
12+
removeEdge(vertex1,vertex2){
13+
this.adjacencyList[vertex1] = this.adjacencyList[vertex1].filter(
14+
v => v !== vertex2
15+
);
16+
this.adjacencyList[vertex2] = this.adjacencyList[vertex2].filter(
17+
v => v !== vertex1
18+
);
19+
}
20+
removeVertex(vertex){
21+
while(this.adjacencyList[vertex].length){
22+
const adjacentVertex = this.adjacencyList[vertex].pop();
23+
this.removeEdge(vertex, adjacentVertex);
24+
}
25+
delete this.adjacencyList[vertex]
26+
}
27+
depthFirstRecursive(start){
28+
const result = [];
29+
const visited = {};
30+
const adjacencyList = this.adjacencyList;
31+
32+
(function dfs(vertex){
33+
if(!vertex) return null;
34+
visited[vertex] = true;
35+
result.push(vertex);
36+
adjacencyList[vertex].forEach(neighbor => {
37+
if(!visited[neighbor]){
38+
return dfs(neighbor)
39+
}
40+
});
41+
})(start);
42+
43+
return result;
44+
}
45+
depthFirstIterative(start){
46+
const stack = [start];
47+
const result = [];
48+
const visited = {};
49+
let currentVertex;
50+
51+
visited[start] = true;
52+
while(stack.length){
53+
currentVertex = stack.pop();
54+
result.push(currentVertex);
55+
56+
this.adjacencyList[currentVertex].forEach(neighbor => {
57+
if(!visited[neighbor]){
58+
visited[neighbor] = true;
59+
stack.push(neighbor)
60+
}
61+
});
62+
}
63+
return result;
64+
}
65+
breadthFirst(start){
66+
const queue = [start];
67+
const result = [];
68+
const visited = {};
69+
let currentVertex;
70+
visited[start] = true;
71+
72+
while(queue.length){
73+
currentVertex = queue.shift();
74+
result.push(currentVertex);
75+
76+
77+
this.adjacencyList[currentVertex].forEach(neighbor => {
78+
if(!visited[neighbor]){
79+
visited[neighbor] = true;
80+
queue.push(neighbor);
81+
}
82+
});
83+
}
84+
return result;
85+
}
86+
}
87+
88+
89+
90+
let g = new Graph();
91+
92+
g.addVertex("A")
93+
g.addVertex("B")
94+
g.addVertex("C")
95+
g.addVertex("D")
96+
g.addVertex("E")
97+
g.addVertex("F")
98+
99+
100+
g.addEdge("A", "B")
101+
g.addEdge("A", "C")
102+
g.addEdge("B","D")
103+
g.addEdge("C","E")
104+
g.addEdge("D","E")
105+
g.addEdge("D","F")
106+
g.addEdge("E","F")
107+
108+
// A
109+
// / \
110+
// B C
111+
// | |
112+
// D --- E
113+
// \ /
114+
// F
115+
116+
// QUEUE: []
117+
// RESULT: [A, B, C, D, E, F]
118+

4 Stack.js.js

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
class Node {
2+
constructor(value){
3+
this.value = value;
4+
this.next = null;
5+
}
6+
}
7+
8+
class Stack {
9+
constructor(){
10+
this.first = null;
11+
this.last = null;
12+
this.size = 0;
13+
}
14+
push(val){
15+
var newNode = new Node(val);
16+
if(!this.first){
17+
this.first = newNode;
18+
this.last = newNode;
19+
} else {
20+
var temp = this.first;
21+
this.first = newNode;
22+
this.first.next = temp;
23+
}
24+
return ++this.size;
25+
}
26+
pop(){
27+
if(!this.first) return null;
28+
var temp = this.first;
29+
if(this.first === this.last){
30+
this.last = null;
31+
}
32+
this.first = this.first.next;
33+
this.size--;
34+
return temp.value;
35+
}
36+
}

5 Queue.js.js

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
class Node {
2+
constructor(value){
3+
this.value = value;
4+
this.next = null;
5+
}
6+
}
7+
8+
class Queue {
9+
constructor(){
10+
this.first = null;
11+
this.last = null;
12+
this.size = 0;
13+
}
14+
enqueue(val){
15+
var newNode = new Node(val);
16+
if(!this.first){
17+
this.first = newNode;
18+
this.last = newNode;
19+
} else {
20+
this.last.next = newNode;
21+
this.last = newNode;
22+
}
23+
return ++this.size;
24+
}
25+
26+
dequeue(){
27+
if(!this.first) return null;
28+
29+
var temp = this.first;
30+
if(this.first === this.last) {
31+
this.last = null;
32+
}
33+
this.first = this.first.next;
34+
this.size--;
35+
return temp.value;
36+
}
37+
}

6 Binary_Search_Tree.js

Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
class Node {
2+
constructor(value){
3+
this.value = value;
4+
this.left = null;
5+
this.right = null;
6+
}
7+
}
8+
9+
class BinarySearchTree {
10+
constructor(){
11+
this.root = null;
12+
}
13+
insert(value){
14+
var newNode = new Node(value);
15+
if(this.root === null){
16+
this.root = newNode;
17+
return this;
18+
}
19+
var current = this.root;
20+
while(true){
21+
if(value === current.value) return undefined;
22+
if(value < current.value){
23+
if(current.left === null){
24+
current.left = newNode;
25+
return this;
26+
}
27+
current = current.left;
28+
} else {
29+
if(current.right === null){
30+
current.right = newNode;
31+
return this;
32+
}
33+
current = current.right;
34+
}
35+
}
36+
}
37+
find(value){
38+
if(this.root === null) return false;
39+
var current = this.root,
40+
found = false;
41+
while(current && !found){
42+
if(value < current.value){
43+
current = current.left;
44+
} else if(value > current.value){
45+
current = current.right;
46+
} else {
47+
found = true;
48+
}
49+
}
50+
if(!found) return undefined;
51+
return current;
52+
}
53+
contains(value){
54+
if(this.root === null) return false;
55+
var current = this.root,
56+
found = false;
57+
while(current && !found){
58+
if(value < current.value){
59+
current = current.left;
60+
} else if(value > current.value){
61+
current = current.right;
62+
} else {
63+
return true;
64+
}
65+
}
66+
return false;
67+
}
68+
BFS(){
69+
var node = this.root,
70+
data = [],
71+
queue = [];
72+
queue.push(node);
73+
74+
while(queue.length){
75+
node = queue.shift();
76+
data.push(node.value);
77+
if(node.left) queue.push(node.left);
78+
if(node.right) queue.push(node.right);
79+
}
80+
return data;
81+
}
82+
DFSPreOrder(){
83+
var data = [];
84+
function traverse(node){
85+
data.push(node.value);
86+
if(node.left) traverse(node.left);
87+
if(node.right) traverse(node.right);
88+
}
89+
traverse(this.root);
90+
return data;
91+
}
92+
DFSPostOrder(){
93+
var data = [];
94+
function traverse(node){
95+
if(node.left) traverse(node.left);
96+
if(node.right) traverse(node.right);
97+
data.push(node.value);
98+
}
99+
traverse(this.root);
100+
return data;
101+
}
102+
DFSInOrder(){
103+
var data = [];
104+
function traverse(node){
105+
if(node.left) traverse(node.left);
106+
data.push(node.value);
107+
if(node.right) traverse(node.right);
108+
}
109+
traverse(this.root);
110+
return data;
111+
}
112+
}
113+
114+
115+
var tree = new BinarySearchTree();
116+
tree.insert(10);
117+
tree.insert(6);
118+
tree.insert(15);
119+
tree.insert(3);
120+
tree.insert(8);
121+
tree.insert(20);
122+
tree.DFSPreOrder();
123+
tree.DFSPostOrder();
124+
tree.DFSInOrder();
125+
126+
127+

7 Binary_Heap.js

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
class MaxBinaryHeap {
2+
constructor(){
3+
this.values = [];
4+
}
5+
insert(element){
6+
this.values.push(element);
7+
this.bubbleUp();
8+
}
9+
bubbleUp(){
10+
let idx = this.values.length - 1;
11+
const element = this.values[idx];
12+
while(idx > 0){
13+
let parentIdx = Math.floor((idx - 1)/2);
14+
let parent = this.values[parentIdx];
15+
if(element <= parent) break;
16+
this.values[parentIdx] = element;
17+
this.values[idx] = parent;
18+
idx = parentIdx;
19+
}
20+
}
21+
}
22+
23+
let heap = new MaxBinaryHeap();
24+
heap.insert(41);
25+
heap.insert(39);
26+
heap.insert(33);
27+
heap.insert(18);
28+
heap.insert(27);
29+
heap.insert(12);
30+
heap.insert(55);
31+
32+
33+

0 commit comments

Comments
 (0)