์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- REACT
- ์ฝ๋ฉํ ์คํธ
- position
- ๋ฐ๋ธ์ฝ์ค
- ๋ธ๋ก๊ทธ
- useRef
- Flex
- ํ๋ก ํธ์๋
- CSS
- float
- ํ๋ก๊ทธ๋๋จธ์ค
- Gatsby
- Props
- ์๊ณ ๋ฆฌ์ฆ
- history api
- ๋ฐ๋ธ์ฝ์ค3๊ธฐ
- ์๋ฐ์คํฌ๋ฆฝํธ
- fetch API
- useEffect
- Today
- Total
Daehyunii's Dev-blog
14 ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ ๋ณธ๋ฌธ
14 ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ
Daehyunii 2022. 8. 13. 18:4814.1 ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ(Doubly Linked Lists)
์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ ๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๋ณ๋ฐ ๋ค๋ฅผ๊ฒ ์๋ค. ๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ ๋ ธ๋๋ค์ ์ฐ๊ฒฐ์ด ํ๋์ ๋ฐฉํฅ์ผ๋ก๋ง ์ด์ด์ ธ ์์๋ค๋ฉด ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ ๋ ธ๋์ ๋ ธ๋๊ฐ ์๋ก ์๋ฐฉํฅ์ผ๋ก ์ด์ด์ ธ ์๋ ์๋ฃ ๊ตฌ์กฐ์ด๋ค. ์ฆ ๊ฐ ๋ ธ๋์ ๋ฐฉํฅ ์ง์๊ฐ ๋ ๊ฐ์ฉ ์๋ค๋ ๊ฒ์ด๋ค. ๋ํ ๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๋นํด ์๋ฐฉํฅ์ผ๋ก ์ฐ๊ฒฐ๋์ด ์์ด ๋ ธ๋์ ์ ๊ทผํ ๋ ํ ์ผ ๋๋ ํค๋ ์ค์ ๋ ๊ฐ๊น์ด ๊ณณ์ ํํด์ ์ ๊ทผํ ์ ์๋ค. ๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ์ ์ฒด์ ์ธ ๊ตฌ์กฐ๋ ๊ฑฐ์ ๋๊ฐ๋ค. ๋ค๋ง ๋ฐฉํฅ์ ์์ชฝ์ผ๋ก ๋ค ์ด์ด์ผ ํ๋ค๋ ๊ฒ์ ์ฃผ์ํ๋ฉด ๋๋ค.
14.2 ๋ ธ๋์ ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ ํด๋์ค
๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๋ค๋ฅธ ์ ์ prev ํ๋กํผํฐ๋ฅผ ์ถ๊ฐํ ๊ฒ ๋ฐ์ ์๋ค.
class Node{
constructor(val){
this.val = val;
this.next = null;
this.prev = null;
}
}
class DoublyLinkedList{
constructor(){
this.head = null;
this.tail = null;
this.length = 0;
}
}
14.3 push ๋ฉ์๋ ๊ตฌํํ๊ธฐ
์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๋ง์ง๋ง ์์น์ ๋ ธ๋๋ฅผ ์ถ๊ฐํ๋ ๊ธฐ๋ฅ์ด๋ค. ๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๋ค๋ฅธ ์ ์ ๋ ธ๋๋ฅผ ์ ๋ฐฉํฅ์ผ๋ก ์ด์ด์ค๋ค๋ ๊ฒ ๋ฟ์ด๋ค.
14.4 pop ๋ฉ์๋
pop ๋ฉ์๋๋ ๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์คํ๋๋ค. ๊ฐ์ฅ ๋ค์ ์๋ ๋ ธ๋๋ฅผ ์ ๊ฑฐํด์ ๊ทธ ๊ฐ์ ๋ฐํํ๋ค.
14.5 shift ๋ฉ์๋
shift ๋ฉ์๋๋ ๋ฆฌ์คํธ์ ๋งจ ์์ ์๋ ๋ ธ๋๋ฅผ ์ ๊ฑฐํ๋ ๊ธฐ๋ฅ์ ํ๋ค.
14.6 unshift ๋ฉ์๋
unshift ๋ฉ์๋๋ ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์ํธ์ ๋งจ ์์ ๋ ธ๋๋ฅผ ์ถ๊ฐํ๋ ๊ธฐ๋ฅ์ ํ๋ค.
14.7 get ๋ฉ์๋
์ธ์๋ก ๋ฐ์ ์์น์ ์๋ ๋ ธ๋๋ฅผ ์ฐพ๋ ๊ธฐ๋ฅ์ ํ๋ค.
14.8 set ๋ฉ์๋
์ธ์๋ก ๋ฐ์ ์์น์ ์๋ ๋ ธ๋๋ฅผ ์ธ์๋ก ๋ฐ์ ๊ฐ์ผ๋ก ๊ฐฑ์ ํ๋ค.
14.9 insert ๋ฉ์๋
์ธ์๋ก ๋ฐ์ ์์น์ ์ธ์๋ก ๋ฐ์ ์๋ก์ด ๊ฐ์ ๋ ธ๋๋ก ์ถ๊ฐํ๋ค.
14.10 remove ๋ฉ์๋
์ธ์๋ก ๋ฐ์ ์์น์ ๋ ธ๋๋ฅผ ์ ๊ฑฐํ๋ค.
class Node{
constructor(val){
this.val = val;
this.next = null;
this.prev = null;
}
}
class DoublyLinkedList{
constructor(){
this.head = null;
this.tail = null;
this.length = 0;
}
push(val){
var newNode = new Node(val);
if(this.length === 0){
this.head = newNode;
this.tail = newNode;
} else {
this.tail.next = newNode;
newNode.prev = this.tail;
this.tail = newNode;
}
this.length++;
return this;
}
pop(){
if(!this.head) return undefined;
var poppedNode = this.tail;
if(this.length === 1){
this.head = null;
this.tail = null;
} else {
this.tail = poppedNode.prev;
this.tail.next = null;
poppedNode.prev = null;
}
this.length--;
return poppedNode;
}
shift(){
if(this.length === 0) return undefined;
var oldHead = this.head;
if(this.length === 1){
this.head = null;
this.tail = null;
}else{
this.head = oldHead.next;
this.head.prev = null;
oldHead.next = null;
}
this.length--;
return oldHead;
}
unshift(val){ // ๋งจ ์ ์ถ๊ฐ
var newNode = new Node(val);
if(this.length === 0) {
this.head = newNode;
this.tail = newNode;
} else {
this.head.prev = newNode;
newNode.next = this.head;
this.head = newNode;
}
this.length++;
return this;
}
get(index){ // ์ธ์๋ก ๋ฐ์ ์ธ๋ฑ์ค์ ์์นํ๋ ๋
ธ๋ ์ฐพ๊ธฐ
if(index < 0 || index >= this.length) return null;
var count;
var current;
if(index <= this.length/2){
count = 0;
current = this.head;
while(count !== index){
current = current.next;
count++;
}
} else {
count = this.length - 1;
current = this.tail;
while(count !== index){
current = current.prev;
count--;
}
}
return current;
}
set(index, val){
var foundNode = this.get(index);
if(foundNode != null){
foundNode.val = val;
return true;
}
return false;
}
insert(index, val){ // ์ธ์๋ก ๋ฐ์ ์ธ๋ฑ์ค ์์น์ ๋
ธ๋๋ฅผ ์ถ๊ฐ
if(index < 0 || index > this.length) return false;
if(index === 0) return !!this.unshift(val);
if(index === this.length) return !!this.push(val);
var newNode = new Node(val);
var beforeNode = this.get(index-1);
var afterNode = beforeNode.next;
beforeNode.next = newNode, newNode.prev = beforeNode;
newNode.next = afterNode, afterNode.prev = newNode;
this.length++;
return true;
}
remove(index){
if(index < 0 || index >= this.length) return false;
if(index === this.length-1) return !!this.pop();
if(index === 0) return !!this.shift();
var removedNode = this.get(index);
var beforeNode = removedNode.prev;
var afterNode = removedNode.next;
beforeNode.next = afterNode;
afterNode.prev = beforeNode;
removedNode.next = null;
removedNode.prev = null;
this.length--;
return removedNode;
}
}
14.11 ๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๋น ์ค ํ๊ธฐ๋ฒ
(Average Situation) | Singly Linked Lists | Doubly Linked Lists |
Insertion | O(1) | O(1) |
Removal | O(1) or O(N) | O(1) |
Searching | O(N) | O(N) |
Access | O(N) | O(N) |
๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ์๊ฐ ๋ณต์ก๋๋ ๊ฑฐ์ ๋์ผํ๋ค. ํ์ง๋ง ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ ์ผ์ ํ ์ํฉ์์ ๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๋นํด ํจ์ฌ ์ ์ฉํ ์ ์์ง๋ง ๊ทธ ๋์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ณด๋ค ๋ง์ด ์๋นํ๊ฒ ๋๋ค.
๋ฐฐ์ด๊ณผ ๋น๊ตํด ๋ณธ๋ค๋ฉด ๋ฐฐ์ด์ ์ธ๋ฑ์ค ๋ฒํธ๋ฅผ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ์ ๊ทผ์ ๊ต์ฅํ ๋น ๋ฅด๋ค. ํ์ง๋ง ์ญ์ , ์ถ๊ฐ, ์ฝ์ ์ ์ธ๋ฑ์ค ๋ฒํธ์ ์ ๋ฉด ๊ต์ฒด๊ฐ ํ์ํ๋ฏ๋ก ์ค๋๊ฑธ๋ฆฐ๋ค.(๋ฐฐ์ด์ ๋งจ ๋ค์ ์์๋ฅผ ์ ๊ฑฐํ๊ฑฐ๋, ์ถ๊ฐํ๋ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณ ) ๋ฐ๋ฉด ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ ์ญ์ , ์ถ๊ฐ, ์ฝ์ ์ด ๋ฐฐ์ด์ ๋นํด ๋น ๋ฅด๋ค. ์ธ๋ฑ์ค๊ฐ ์์ผ๋ฏ๋ก ์ธ๋ฑ์ค ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊พธ๋ ์์ ์ด ํ์ํ์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.
'๐ Language & CS knowledge > Algorithm & Data structure' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
16 ์ด์ง ๊ฒ์ ํธ๋ฆฌ (0) | 2022.08.14 |
---|---|
15 ์คํ & ํ (0) | 2022.08.14 |
13 ๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ (0) | 2022.08.12 |
11 ํต ์ ๋ ฌ (0) | 2022.08.08 |
10 ํฉ๋ณ ์ ๋ ฌ (0) | 2022.08.07 |