์ถ์ฒ : https://helloworldjavascript.net/pages/282-data-structures.html
ํ, ์คํ, ํธ๋ฆฌ | JavaScript๋ก ๋ง๋๋ ์ธ์
์ฒ์ ์์ํ๋ ์ฌ๋๋ค์ ์ํ JavaScript ๊ต์ฌ
helloworldjavascript.net
ํ, ์คํ, ํธ๋ฆฌ
์ด๋ค ๋ฐ์ดํฐ์ ๊ตฌ์ฒด์ ์ธ ๊ตฌํ ๋ฐฉ์์ ์๋ตํ ์ฑ, ๋ฐ์ดํฐ์ ์ถ์์ ํํ์ ๊ทธ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ๋ง์ ์ ํด๋์ ๊ฒ์ ๊ฐ์ง๊ณ ADT(Abstract Data Type) ํน์ ์ถ์ ์๋ฃํ์ด๋ผ๊ณ ํฉ๋๋ค. ์ด ์ฑํฐ์์๋ ๋๋ฆฌ ์ฌ์ฉ๋๋ ADT์ธ ํ, ์คํ, ํธ๋ฆฌ์ ๋ํด ๋ฐฐ์๋๋ค.
ํ (Queue)
ํ(queue)๋ ๋ค์๊ณผ ๊ฐ์ ์ฑ์ง์ ๊ฐ๋ ์๋ฃํ์ ๋๋ค.
- ๋ฐ์ดํฐ๋ฅผ ์ง์ด๋ฃ์ ์ ์๋ ์ ํ(linear) ์๋ฃํ์ ๋๋ค.
- ๋จผ์ ์ง์ด๋ฃ์ ๋ฐ์ดํฐ๊ฐ ๋จผ์ ๋์ต๋๋ค. ์ด ํน์ง์ ์ค์ฌ์ FIFO(First In First Out)๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
- ๋ฐ์ดํฐ๋ฅผ ์ง์ด๋ฃ๋ enqueue, ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๋ dequeue ๋ฑ์ ์์ ์ ํ ์ ์์ต๋๋ค.
JavaScript์์๋ ๋ฐฐ์ด์ ์ด์ฉํด์ ๊ฐ๋จํ๊ฒ ํ๋ฅผ ๊ตฌํํ ์ ์์ต๋๋ค.
class Queue {
constructor() {
this._arr = [];
}
enqueue(item) {
this._arr.push(item);
}
dequeue() {
return this._arr.shift();
}
}
const queue = new Queue();
queue.enqueue(1);
queue.enqueue(2);
queue.enqueue(3);
queue.dequeue(); // 1
ํ๋ ์์๋๋ก ์ฒ๋ฆฌํด์ผ ํ๋ ์์ ์ ์์๋ก ์ ์ฅํด๋๋ ๋ฒํผ(buffer)๋ก์ ๋ง์ด ์ฌ์ฉ๋ฉ๋๋ค.
์คํ (Stack)
์คํ(stack) ๋ค์๊ณผ ๊ฐ์ ์ฑ์ง์ ๊ฐ๋ ์๋ฃํ์ ๋๋ค.
- ๋ฐ์ดํฐ๋ฅผ ์ง์ด๋ฃ์ ์ ์๋ ์ ํ(linear) ์๋ฃํ์ ๋๋ค.
- ๋์ค์ ์ง์ด๋ฃ์ ๋ฐ์ดํฐ๊ฐ ๋จผ์ ๋์ต๋๋ค. ์ด ํน์ง์ ์ค์ฌ์ LIFO(Last In First Out)๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
- ๋ฐ์ดํฐ๋ฅผ ์ง์ด๋ฃ๋ push, ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๋ pop, ๋งจ ๋์ค์ ์ง์ด๋ฃ์ ๋ฐ์ดํฐ๋ฅผ ํ์ธํ๋ peek ๋ฑ์ ์์ ์ ํ ์ ์์ต๋๋ค.
JavaScript์์๋ ๋ฐฐ์ด์ ์ด์ฉํด์ ๊ฐ๋จํ๊ฒ ์คํ์ ๊ตฌํํ ์ ์์ต๋๋ค.
class Stack {
constructor() {
this._arr = [];
}
push(item) {
this._arr.push(item);
}
pop() {
return this._arr.pop();
}
peek() {
return this._arr[this._arr.length - 1];
}
}
const stack = new Stack();
stack.push(1);
stack.push(2);
stack.push(3);
stack.pop(); // 3
์คํ์ ์๋ก ๊ด๊ณ๊ฐ ์๋ ์ฌ๋ฌ ์์ ์ ์ฐ๋ฌ์ ์ํํ๋ฉด์ ์ด์ ์ ์์ ๋ด์ฉ์ ์ ์ฅํด ๋ ํ์๊ฐ ์์ ๋ ๋๋ฆฌ ์ฌ์ฉ๋ฉ๋๋ค.
ํธ๋ฆฌ (Tree)
ํธ๋ฆฌ(tree)๋ ์ฌ๋ฌ ๋ฐ์ดํฐ๊ฐ ๊ณ์ธต ๊ตฌ์กฐ ์์์ ์๋ก ์ฐ๊ฒฐ๋ ํํ๋ฅผ ๋ํ๋ผ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
ํธ๋ฆฌ๋ฅผ ๋ค๋ฃฐ ๋ ์ฌ์ฉ๋๋ ๋ช ๊ฐ์ง ์ฉ์ด๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
- ๋ ธ๋(node) - ํธ๋ฆฌ ์์ ๋ค์ด์๋ ๊ฐ ํญ๋ชฉ์ ๋งํฉ๋๋ค.
- ์์ ๋ ธ๋(child node) - ๋ ธ๋๋ ์ฌ๋ฌ ์์ ๋ ธ๋๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค.
- ๋ถ๋ชจ ๋ ธ๋(parent node) - ๋ ธ๋ A๊ฐ ๋ ธ๋ B๋ฅผ ์์์ผ๋ก ๊ฐ๊ณ ์๋ค๋ฉด, ๋ ธ๋ A๋ฅผ ๋ ธ๋ B์ '๋ถ๋ชจ ๋ ธ๋'๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
- ๋ฟ๋ฆฌ ๋ ธ๋(root node) - ํธ๋ฆฌ์ ๊ฐ์ฅ ์์ธต๋ถ์ ์๋ ๋ ธ๋๋ฅผ ๋งํฉ๋๋ค.
- ์ ๋ ธ๋(leaf node) - ์์ ๋ ธ๋๊ฐ ์๋ ๋ ธ๋๋ฅผ ๋งํฉ๋๋ค.
- ์กฐ์ ๋ ธ๋(ancestor node) - ๋ ธ๋ A์ ์์์ ๋ฐ๋ผ ๋ด๋ ค๊ฐ์ ๋ ๋ ธ๋ B์ ๋๋ฌํ ์ ์๋ค๋ฉด, ๋ ธ๋ A๋ฅผ ๋ ธ๋ B์ ์กฐ์ ๋ ธ๋๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
- ์์ ๋ ธ๋(descendant node) - ๋ ธ๋ A๊ฐ ๋ ธ๋ B์ ์กฐ์ ๋ ธ๋์ผ ๋, ๋ ธ๋ B๋ฅผ ๋ ธ๋ A์ ์์ ๋ ธ๋๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
- ํ์ ๋ ธ๋(sibling node) - ๊ฐ์ ๋ถ๋ชจ ๋ ธ๋๋ฅผ ๊ฐ๋ ๋ค๋ฅธ ๋ ธ๋๋ฅผ ๋ณด๊ณ ํ์ ๋ ธ๋๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
์๋๋ ์์ฃผ ๊ฐ๋จํ ํํ์ Node๋ฅผ ๊ตฌํํ ์์ ๋๋ค.
class Node {
constructor(content, children = []) {
this.content = content;
this.children = children;
}
}
const tree = new Node('hello', [
new Node('world'),
new Node('and'),
new Node('fun', [
new Node('javascript!')
])
]);
function traverse(node) {
console.log(node.content);
for (let child of node.children) {
traverse(child);
}
}
traverse(tree);
// hello world and fun javascript!
ํธ๋ฆฌ๋ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๋ํ๋ด๊ธฐ ์ํด, ๋ํ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ํตํด ์๊ณ ๋ฆฌ์ฆ์ ํจ์จ์ ๋์ด๊ณ ์ ํ ๋ ๋๋ฆฌ ์ฌ์ฉ๋ฉ๋๋ค.
'Javascript > Javascript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๋ฐ์คํฌ๋ฆฝํธ] for๋ฌธ๊ณผ foreach ์ค์ ์์ ๋น๊ต (0) | 2022.04.30 |
---|---|
[์๋ฐ์คํฌ๋ฆฝํธ] Array.from( {length} ๊ตฌ๋ฌธ์์ {length}์ ์ ์ฌ๋ฐฐ์ด? (0) | 2022.04.27 |
[์๋ฐ์คํฌ๋ฆฝํธ] web api ๋ถ๋ฌ์ค๊ธฐ (0) | 2022.04.24 |
[์๋ฐ์คํฌ๋ฆฝํธ] ์ ๋๋ ์ดํฐ (0) | 2022.04.19 |
[์๋ฐ์คํฌ๋ฆฝํธ] how to remove array element javascript (0) | 2022.04.17 |