[์ž๋ฃŒ๊ตฌ์กฐ] Linked List (์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ) - ๋‹จ์ˆœ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ

2023. 6. 21. 16:47ใ†์ž๋ฃŒ๊ตฌ์กฐ

728x90

๐Ÿ‘‰ ์ž๋ฃŒ๊ตฌ์กฐ

๋ฐ์ดํ„ฐ๋ฅผ ์ƒํ™ฉ์— ๋งž๊ฒŒ ์ €์žฅํ•˜๊ณ  ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•

๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ, ๊ด€๋ฆฌํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•˜๋‹ค.

๐Ÿ‘‰ 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๋Š” ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ์„ ๋•Œ ์ž๋™์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์„ ๋•Œ ์ž๋™์œผ๋กœ ํ•ด์ œํ•œ๋‹ค.

... ํ›„์— ์ •๋ฆฌ ํ•„์š”

728x90