2023. 6. 21. 16:47ใ์๋ฃ๊ตฌ์กฐ
๐ ์๋ฃ๊ตฌ์กฐ
๋ฐ์ดํฐ๋ฅผ ์ํฉ์ ๋ง๊ฒ ์ ์ฅํ๊ณ ์ฒ๋ฆฌํ๊ธฐ ์ํ ๋ฐฉ๋ฒ
๋ฐ์ดํฐ๋ฅผ ์ ์ฅ, ๊ด๋ฆฌํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ ์ํด ํ์ํ๋ค.
๐ Linked List
์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ ์ฌ๋ฌ๊ฐ์ node๋ก ์ด๋ฃจ์ด์ ธ์๋ค.
pointer ์ ์ํด ๋ค์ node ๋ฅผ ์ฐ๊ฒฐํ๋ค.
์ด๋ฅผ ํตํด Linked List ๋ ๋ฐ์ดํฐ ์ฝ์ /์ญ์ ์ ๋ฐ์ดํฐ์ ๊ตฌ์กฐ๋ฅผ ์ฌ ์ ๋ ฌํ์ง ์์๋ ๋๋ค.
Linked List | Array |
๋์ ์๋ฃ๊ตฌ์กฐ | ์ ์ ์๋ฃ๊ตฌ์กฐ |
์์ ์ ๊ทผ ๋ถ๊ฐ, ์์ฐจ์ ์ผ๋ก ์ ๊ทผํด์ผ ํจ | ๋ฐ์ดํฐ์ ์ธ๋ฑ์ค๋ก ์์ ์ ๊ทผ ๊ฐ๋ฅ |
๋ฐ์ดํฐ ์ถ๊ฐ, ์ญ์ ์ ์ฉ์ด | ์ ๊ทผ๊ณผ ํ์์ ์ฉ์ด |
ํฌ๊ธฐ์ ์ ํ์ด ์์ | ์์ ๋ถ๊ฐ๋ฅ, ๋ฐฐ์ด ํฌ๊ธฐ ์ด์์ ๋ฐ์ดํฐ ์ ์ฅ ๋ถ๊ฐ๋ฅ |
๐ Singly Linked List
๋ค์ ๋ ธ๋์ ๋ํ ์ฐธ์กฐ๋ง์ ๊ฐ์ง ๊ฐ์ฅ ๋จ์ํ ํํ์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ด๋ค. ๊ฐ์ฅ ๋ง์ง๋ง ์์๋ฅผ ์ฐพ์ผ๋ ค๋ฉด ์์งค์์ด ๋ฆฌ์คํธ ๋๊น์ง ์ฐพ์๊ฐ์ผ ํ๊ธฐ ๋๋ฌธ์(O(n)), ๋ง์ง๋ง ์์๋ฅผ ๊ฐ๋ฆฌํค๋ ์ฐธ์กฐ๋ฅผ ๋ฐ๋ก ๊ฐ์ง๋ ํํ์ ๋ณํ๋ ์๋ค. ๋ณดํต ํ (Queue)๋ฅผ ๊ตฌํํ ๋ ์ด๋ฐ ๋ฐฉ๋ฒ์ ์ด๋ค.
Linked List ๊ตฌํํด๋ณด๊ธฐ
์ฐ๊ฒฐ๋ฆฌ์คํธ์๋ ์ถ๊ฐ, ๊ฒ์, ์ญ์ ๊ธฐ๋ฅ์ด ์์ด์ผ ํ๋ค. add, search, remove ํจ์๋ก ์ด๋ฅผ ๊ตฌํํ์๋ค.
class Node {
next = null;
constructor(data){
this.data = data;
}
}
class LinkedList {
length = 0;
head = null;
add(value){
const node = new Node(value);
let current = this.head;
if(!current){ //ํ์ฌ head์ ๋
ธ๋๊ฐ ์์ผ๋ฉด
this.head = node; // ์ ๋
ธ๋๋ฅผ ์ถ๊ฐํ๋ค.
this.length++;
return node;
}else{ //์ด๋ฏธ ๋
ธ๋๊ฐ ์์ผ๋ฉด
while(current.next){ //๋ง์ง๋ง ๋
ธ๋๋ฅผ ์ฐพ๊ณ
current = current.next;
}
current.next = node; //๋ง์ง๋ง ์์น์ ๋
ธ๋๋ฅผ ์ถ๊ฐํ๋ค.
this.length++;
return node;
}
}
search(position){
let current = this.head;
let count = 0;
while(count < position){ //position ์์น๋งํผ ์ด๋ํ๋ค.
current = current.next;
count++;
}
return current?.data;
}
remove(position){
let current = this.head;
let before;
let remove;
let count = 0;
if(position === 0){ //๋งจ ์ฒ์ ๋
ธ๋๋ฅผ ์ญ์ ํ๋ฉด
remove = this.head;
this.head = this.head.next; //head๋ฅผ ๋ ๋ฒ์งธ ๋
ธ๋๋ก ๊ต์ฒดํ๋ค.
this.length--;
return remove;
}
//๊ทธ ์ธ์ ๋ค๋ฅธ ๋
ธ๋๋ฅผ ์ญ์ ํ๋ฉด
while(count < position){
before = current;
count++;
current = current.next;
}
remove = current;
before.next = remove.next;
this.length--;
return remove;
}
}
์ฐธ์กฐ
zerocho์๋ฃ๊ตฌ์กฐ Linked List
๊ฐ๋น์ง ์ปฌ๋ ์
JS๋ ๊ฐ์ฒด๊ฐ ์์ฑ๋์์ ๋ ์๋์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ ์ด์ ํ์ํ์ง ์์ ๋ ์๋์ผ๋ก ํด์ ํ๋ค.
... ํ์ ์ ๋ฆฌ ํ์
'์๋ฃ๊ตฌ์กฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๋ฃ๊ตฌ์กฐ] ํธ๋ฆฌ(Tree)์ ์ฐ์ ์์ ํ(Priority Queue) (2) | 2024.10.27 |
---|---|
[์๋ฃ๊ตฌ์กฐ] ํ(Queue) (1) | 2024.10.27 |
[์๋ฃ๊ตฌ์กฐ] ์คํ(Stack) (0) | 2024.10.27 |
[์๋ฃ๊ตฌ์กฐ] ๋ฐฐ์ด(Array)๊ณผ ๋ฆฌ์คํธ(List) (0) | 2024.10.27 |
์๋ฃ๊ตฌ์กฐ (0) | 2024.10.25 |