티스토리 뷰
1. 링크드 리스트 (LinkedList)
: 노드라고 불리는 각 요소(element)들을 담고 있는 선형 자료 구조. 노드는 데이터와 다음 노드의 정보 또는 주소값을 저장하는 Object이다.
2. Array vs LinkedList
- Array
: Array의 요소(element)들은 특정한 위치 또는 인덱스에 저장되어 있다.
- LinkedList
: LinkedList의 요소인 노드는 특정한 위치에 저장되어 있지 않고 각 노드가 갖고 있는 pointer 값으로 연결 되어 있다. 즉, 한 노드의 위치는 그 노드의 위치를 갖고 있는 다른 노드에 의존한다.
3. 링크드리스트의 장단점
- 장점
: LinkedList에서 노드의 제거 및 추가는 대상이 되는 노드의 위치를 갖고 있는 다른 노드의 pointer 값만 바꿔주면 되기 때문에 노드 삭제 및 추가시 전체적인 배열의 조정 없이 간단하게 수행된다.
- 단점
: 특정 노드의 탐색이 느리다. LinkedList의 탐색은 Head라고 불리는 첫 번째 노드부터 순차적으로 진행되기 때문에 탐색 수행이 느리다. 또한 노드는 데이터 뿐만이 아닌 다른 노드의 주소값을 저장해야 하기 때문에 메모리를 추가적으로 사용한다.
4. Javascript로 구현
// 데이터(data)와 다음 노드의 정보를 갖는(next) Node 객체 정의.
class Node {
constructor(data) {
this.data = data;
this.next = null;
}
}
// 리스트의 첫 노드인 head와 helper 메서드를 갖는 LinkedList 정의
class LinkedList {
// LinkedList가 생성될 때 head에 인자값이 들어가지 않으면, null을 세팅함.
constructor(head = null) {
this.head = head;
}
size() {
let count = 0;
let node = this.head;
while (node) {
count++;
node = node.next;
}
return count;
}
clear() {
this.head = null;
}
getLast() {
let lastNode = this.head;
if (lastNode) {
while (lastNode.next) {
lastNode = lastNode.next;
}
}
return lastNode;
}
getFirst() {
return this.head;
}
}
// node1, node2 생성 후 node1에 node2의 정보 저장.
let node1 = new Node(2);
let node2 = new Node(5);
node1.next = node2;
// node1을 head로 하는 LinkedList 생성
let list = new LinkedList(node1);
// list의 size 출력.
console.log(list.size());
'Study > DataStructure' 카테고리의 다른 글
해시, 해시함수, 해시테이블 (Hash, Hash Table) (0) | 2020.03.12 |
---|---|
생활코딩 DataStructure -6 (0) | 2020.02.24 |
Set(Java) (0) | 2020.02.18 |
Queue(Java) (0) | 2020.02.18 |
Stack(Java) (0) | 2020.02.18 |
댓글
최근에 올라온 글
최근에 달린 댓글
TAG
- 20200413
- 20200417
- likelion
- chapter7
- 20200504
- 20200510
- 20200319
- 20200423
- 생활코딩리눅스
- 백준
- 20200415
- 20200502
- chapter8
- 20200330
- 20200429
- 20200317
- 20200406
- 20200804
- 20200427
- 20200512
- 20200424
- 20200425
- 20200420
- 20201204
- 20200624
- 20200428
- 20200622
- 20200421
- 20200503
- 20200403
- Total
- Today
- Yesterday