Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 1236
- 함수 parmater
- 동적계획법
- 11047
- 함수 arguments
- event loop
- html5
- 1302
- 자류구조
- setTiemOut
- 배열같은배열아닌너
- 1568
- 9461
- 백준
- 함수 선언문
- 1904
- 11399
- 2667
- 렉시컬 스코프
- 호이스팅
- 1543
- 함수 이놈
- 1931
- baekjoon
- 비동기처리
- Async/Await
- 유사배열
- 탐욕 알고리즘
- 1668
- javascript
Archives
- Today
- Total
두치의 개발공부
링크드 리스트(Linked List) 본문
1. 링크드 리스트(Linked List) 구조
- 연결 리스트라고도 합니다.
- 링크드 리스트는 떨어진 곳에 존재한 데이터를 화살표(포인터)로 연결해서 데이터를 관리하는 구조
- 배열은 연결된 공간에 데이터를 나열한 구조
2. 링크드 리스트 구조와 용어
- 노드(Node) : 데이터를 저장 하는 단위(Data, 포인터) 로 구성되어 있습니다.
- 포인터(Pointer) : 각 노드에서, 다음의 노드와의 연결 정보를 가지고 있는 공간
3. 링크드 리스트 장점,단점
- 장점
- 배열의 크기를 미리 지정하지 않아도 된다. (Java는 배열 선언시 크기를 미리 지정해야 하지만, JavaScript는 지정하지 않아도 되기 때문에 JavaScript를 사용한다면 장점은 아니다.)
- 노드의 추가 및 삭제시 전체 배열의 조정이 필요 없다(Pointer 값만 바꾼다.)
- 단점
- 특정 위치의 데이터를 검색할 때는 head(첫번째 노드) 에서부터 순차적으로 검색하기 때문에 비효율적이다.
- 구현이 복잡하다.
- 중간 데이터 삭제 시, 앞뒤 데이터의 연결을 재구성해야 하는 부가적인 작업 필요
4. 링크드 리스트 구현
링크드 리스트는 구현은 JavaScript로 하도록 하겠습니다.
class Node {
constructor(data, next=null){
this.data = data;
this.next = next;
}
}
class NodeMng {
constructor(data){
this.head = new Node(data);
}
desc() {
let node = this.head;
while (node) {
console.log(node.data);
node = node.next;
}
}
add(data) {
let node = this.head;
while (node.next) {
node = node.next;
}
node.next = new Node(data);
}
findPrevious(data) {
let node = this.head;
while(node.next != null && node.next.data !== data) {
node = node.next;
}
return node;
}
remove(data){
let preNode = this.findPrevious(data);
preNode.next = preNode.next.next;
}
}