
| ์๋ฃ๊ตฌ์กฐ | ๋ป | ๊ตฌ์กฐ์ ํน์ง | ๋ํ์ ์ธ ๋์ | ๋น์ |
|---|---|---|---|---|
| Stack (์คํ) | โ์์ ์ฌ๋ฆฐ ๊ตฌ์กฐโ | LIFO (Last In, First Out) โ ๋์ค์ ๋ฃ์ ๊ฒ ๋จผ์ ๋์ด | push(), pop() | ์ ์๋ฅผ ์ฐจ๊ณก์ฐจ๊ณก ์์๋์ ๋๋ฏธ |
| Queue (ํ) | โ์ค ์ ์๋ ๊ตฌ์กฐโ | FIFO (First In, First Out) โ ๋จผ์ ๋ฃ์ ๊ฒ ๋จผ์ ๋์ด | enqueue(), dequeue() | ๋ฒ์ค ์ ๋ฅ์ฅ ์ค ์๊ธฐ |
| Hash Table (ํด์ ํ ์ด๋ธ) | โํค(key)-๊ฐ(value) ์์ผ๋ก ์ ์ฅํ๋ ๊ตฌ์กฐโ | ํด์ ํจ์๋ก ๋น ๋ฅด๊ฒ ์ ๊ทผ | insert(key, value), get(key) | ์ฌ์ (dictionary)์ฒ๋ผ ๋จ์ด-๋ป ์ ์ฅ |
๐ธ Stack
let stack = [];
stack.push(1); // [1]
stack.push(2); // [1, 2]
stack.pop(); // 2 ์ ๊ฑฐ โ [1]
-> ๋์ค์ ๋ค์ด์จ ๊ฒ ๋จผ์ ๋๊ฐ (LIFO)
๐ธ Queue
let queue = [];
queue.push(1); // [1]
queue.push(2); // [1, 2]
queue.shift(); // 1 ์ ๊ฑฐ โ [2]
-> ๋จผ์ ๋ค์ด์จ ๊ฒ ๋จผ์ ๋๊ฐ (FIFO)
๐ธ Hash Table
let hashTable = new Map();
hashTable.set("name", "Minnie");
hashTable.get("name"); // "Minnie"
-> key(โnameโ)๋ก value๋ฅผ ๋ฐ๋ก ์ฐพ์ โ ๋น ๋ฆ ๐ฅ
| ํญ๋ชฉ | Stack | Queue | Hash Table |
|---|---|---|---|
| ์ ์ฅ ๋ฐฉ์ | ์์ฐจ์ (์์์ ์์) | ์์ฐจ์ (์๋ค๋ก ๋๊ฐ) | key-value ์ |
| ์ ๊ทผ ์์ | LIFO | FIFO | key๋ก ์ง์ ์ ๊ทผ |
| ์ฌ์ฉ ์์ | ํจ์ ํธ์ถ(์ฝ์คํ), ๋๋๋ฆฌ๊ธฐ(undo) | ๋๊ธฐ์ด, ํ๋ฆฐํฐ ์์ | ๋ฐ์ดํฐ๋ฒ ์ด์ค, ์บ์ |
| ์๋ | ๋น ๋ฆ (O(1)) | ๋น ๋ฆ (O(1)) | ๋งค์ฐ ๋น ๋ฆ (ํ๊ท O(1)) |
| ์ธ์ด์์ ์ | JS์ Array, Python์ list | JS์ Array, Python deque | JS Map/Object, Python dict |
| ์ํฉ | ์ด๋ค ๊ตฌ์กฐ? | ์ด์ |
|---|---|---|
| ์น ๋ธ๋ผ์ฐ์ โ๋ค๋ก ๊ฐ๊ธฐโ | Stack | ๊ฐ์ฅ ์ต๊ทผ ํ์ด์ง๋ถํฐ ๊บผ๋ |
| ์ํ ๋๊ธฐํ | Queue | ๋จผ์ ์จ ์ฌ๋๋ถํฐ ์ฒ๋ฆฌ |
| ์ฃผ๋ฏผ๋ฑ๋ก๋ฒํธ๋ก ์ด๋ฆ ์ฐพ๊ธฐ | Hash Table | ๊ณ ์ ํค๋ก ๋ฐ๋ก ์ฐพ์ |
| ์๋ฃ๊ตฌ์กฐ | ๋ป | ๊ตฌ์กฐ์ ํน์ง | ๋ฐ์ดํฐ ์ ์ฅ ๋ฐฉ์ | ๋น์ |
|---|---|---|---|---|
| Array (๋ฐฐ์ด) | ์ฐ์๋ ๊ณต๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฐจ๋ก๋ก ์ ์ฅ | ํ ๋ฉ์ด๋ฆฌ๋ก ์ฐ๊ฒฐ๋์ด ์์ | ๋ฉ๋ชจ๋ฆฌ ์์์ ์ฐ์์ ์ผ๋ก ์ ์ฅ | ์ ์นธ๊ณผ ๋ถ์ด์๋ ์ํํธ |
| Linked List (์ฐ๊ฒฐ ๋ฆฌ์คํธ) | ๋ ธ๋(node) ๋จ์๋ก ์ฐ๊ฒฐ๋ ๊ตฌ์กฐ | ๊ฐ๊ฐ์ ๋ ธ๋๊ฐ ๋ค์ ๋ ธ๋์ ์ฃผ์๋ฅผ ๊ฐ์ง | ๋ฉ๋ชจ๋ฆฌ ์์์ ํฉ์ด์ ธ ์์ง๋ง ๋งํฌ๋ก ์ฐ๊ฒฐ | ์ฒด์ธ ๋ชฉ๊ฑธ์ด์ฒ๋ผ ๊ณ ๋ฆฌ๋ก ์ฐ๊ฒฐ๋ ๊ตฌ์ฌ |
๐ธ Array (๋ฐฐ์ด)
[10] [20] [30] [40]
โ โ โ โ
์ฐ์๋ ๊ณต๊ฐ
๐ธ Linked List (์ฐ๊ฒฐ ๋ฆฌ์คํธ)
[10 | next] โ [20 | next] โ [30 | next] โ null
(๋ค์ ๋
ธ๋์ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํด)
| ํญ๋ชฉ | Array (๋ฐฐ์ด) | Linked List (์ฐ๊ฒฐ ๋ฆฌ์คํธ) |
|---|---|---|
| ์ ์ฅ ๋ฐฉ์ | ์ฐ์๋ ๋ฉ๋ชจ๋ฆฌ | ํฉ์ด์ง ๋ ธ๋๋ค์ ํฌ์ธํฐ๋ก ์ฐ๊ฒฐ |
| ๋ฉ๋ชจ๋ฆฌ ํจ์จ | ๊ณ ์ ํฌ๊ธฐ(์ด๊ธฐ ์ง์ ํ์) | ์ ๋์ ํฌ๊ธฐ(ํ์ํ ๋๋ง๋ค ํ์ฅ ๊ฐ๋ฅ) |
| ์ฝ์ /์ญ์ ์๋ | ๋๋ฆผ ๐ข (O(n)) โ ์ค๊ฐ ์ฝ์ ์ ์ด๋ ํ์ | ๋น ๋ฆ ๐ (O(1)) โ ๋งํฌ๋ง ์์ |
| ๊ฒ์ ์๋ | ๋น ๋ฆ (O(1)) โ ์ธ๋ฑ์ค๋ก ๋ฐ๋ก ์ ๊ทผ | ๋๋ฆผ (O(n)) โ ์ฒ์๋ถํฐ ํ์ |
| ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ | ์ ์ (๋ฐ์ดํฐ๋ง ์ ์ฅ) | ๋ง์ (ํฌ์ธํฐ๋ ์ ์ฅ) |
| ๋ํ ์ฌ์ฉ ์์ | ๋ฐฐ์ด, ๋ฆฌ์คํธ, ์ด๋ฏธ์ง ํฝ์ ๋ฐ์ดํฐ | ์คํ, ํ, ๊ทธ๋ํ ๋ ธ๋ ์ฐ๊ฒฐ ๋ฑ |
| ์ํฉ | ์ด๋ค ๊ฑธ ์ฐ๋ฉด ์ข์๊น | ์ด์ |
|---|---|---|
| ๋ฐ์ดํฐ ๊ฐ์๊ฐ ๊ณ ์ ๋์ด ์๊ณ , ์ธ๋ฑ์ค๋ก ์์ฃผ ์ ๊ทผํด์ผ ํจ | โ Array | ์ธ๋ฑ์ค ์ ๊ทผ์ด ๋น ๋ฆ |
| ๋ฐ์ดํฐ ์ฝ์ /์ญ์ ๊ฐ ์์ฃผ ์ผ์ด๋จ | โ Linked List | ๋งํฌ๋ง ๋ฐ๊พธ๋ฉด ๋ผ์ ํจ์จ์ |
| ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ฏธ๋ฆฌ ํ๋ณดํด๋ ๊ด์ฐฎ์ | Array | ๊ณ ์ ํฌ๊ธฐ๋ผ ์์ ์ |
| ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฐ๊ณ ์ถ์ | Linked List | ํ์ํ ๋งํผ๋ง ํ ๋น |
๐ธ Array
let arr = [10, 20, 30];
arr.push(40); // [10, 20, 30, 40]
console.log(arr[2]); // 30 (์ธ๋ฑ์ค๋ก ๋ฐ๋ก ์ ๊ทผ ๊ฐ๋ฅ)
๐ธ Linked List (๊ฐ๋จ ๊ตฌํ ์)
class Node {
constructor(value) {
this.value = value;
this.next = null;
}
}
let first = new Node(10);
let second = new Node(20);
first.next = second; // 10 โ 20
->Array๋ ์ธ๋ฑ์ค๋ก ์ ๊ทผํ์ง๋ง,
LinkedList๋ โ๋ค์(next)โ์ ๋ฐ๋ผ๊ฐ๋ฉฐ ํ์ํด์ผ ํจ.
๐ฆ Array: ๋น ๋ฅธ ์ ๊ทผ, ๋๋ฆฐ ์ฝ์
๐ Linked List: ๋๋ฆฐ ์ ๊ทผ, ๋น ๋ฅธ ์ฝ์